Created using Claude Sonnet 5 medium
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Control Lovense toys from your Pebble watch. The watch sends button presses
over Bluetooth to a small companion script running in the Pebble phone app,
which relays them as HTTP commands to the Lovense Remote app's local
"Game Mode" API.
Project status / where this was left offRead the full README ↗Control Lovense toys from your Pebble watch. The watch sends button presses over Bluetooth to a small companion script running in the Pebble phone app, which relays them as HTTP commands to the Lovense Remote app's local "Game Mode" API.
Pebble watch --AppMessage--> Phone (PebbleKit JS) --HTTP POST--> Lovense Remote app (Game Mode) --BLE--> Toy
Or, with no Wi-Fi at all (Android only), the optional Lovense Remote companion
Android app in android-companion/ talks to the toy
directly over Bluetooth:
Pebble watch --AppMessage--> Pebble app --PebbleKit 2--> Lovense Remote companion --BLE--> Toy
Pick between the two on the settings page's Connect tab (Wi-Fi or Bluetooth).
Published, current version 1.2.4. Confirmed working on real hardware for both touch-capable platforms: Pebble Time 2 (Emery) and Pebble Round 2 (Gabbro) - boot, Basic mode, both Discrete faces, all three gesture-control modes (accelerometer double-knock, and the touchscreen's double-tap/ long-press/swipe-to-set-intensity), the safety auto-pause timer, and the settings page. Chalk (round, non-touch) has only been verified in the emulator - no non-Gabbro round hardware has been available to test against yet. The Material 3 settings page and the 1.2.2 performance/bugfix round (see below) are both confirmed on real Pebble Time 2 (Emery) hardware; Gabbro and Chalk still need the same re-verification pass the rest of the app already has.
This round (touch/gesture round) added: a swipe-to-set-intensity touch overlay (a vertical drag anywhere on screen sets vibration level directly from absolute touch position, live, on Emery/Gabbro in Touchscreen mode) with a wash-fill + split-color number visual and a brief fade-out on liftoff; long-press-to-cycle-pattern extended to Basic mode (previously Discrete-only, for consistent touch behavior across all three faces); a gesture-control-change hint card that slides in to explain the active gesture mode's controls whenever it changes, auto-dismissing after a few seconds or on any button press/swipe; a configurable safety auto-pause (stops vibration after continuous use - Off/1/3/5/10/15 minutes, default 3, with a haptic warning in the final 15 seconds, reset by any button press or touch); and WCAG contrast fixes across 8 of the 15 built-in color presets.
Two real bugs surfaced specifically by hardware testing this round (the
emulator has no touch-simulation path at all, so neither was catchable
before real-device testing), both since fixed: the swipe overlay's intended
translucent wash rendered fully opaque on real hardware (Pebble's solid
fills ignore GColor8's alpha channel entirely - alpha only applies to
bitmap compositing - fixed with a software color blend toward the active
background instead), and the overlay's number briefly rendered pinned to
the fill boundary instead of staying centered (a text-layout bug in how the
split-color effect was drawn, not a hardware quirk - fixed by moving the
white half of the number into its own clipped child layer).
Local build/test toolchain: this project builds and runs locally via
pebble-tool + the Pebble SDK (WSL/Ubuntu, since the SDK doesn't run on
Windows directly) — pebble build, pebble install --emulator <platform>,
pebble screenshot/emu-app-config, and pebble publish (release notes +
screenshot/GIF upload) all work against this repo. This toolchain, the
emulator, and real hardware only exist on the developer's local machine —
see CLAUDE.md for what that means for a Claude Code session working here
without local access. Two build-breaking bugs
this surfaced early on and fixed: the repo was missing the wscript build
script pebble-tool requires, and package.json's launcher icon was declared
as two separate menuIcon: true resources, which the SDK's appinfo generator
rejects outright (collapsed to one entry using the standard ~bw/~color
filename-tag convention). enableMultiJS: true was also added, which is
required for the settings webview to run under pebble-tool's local JS
engine (pypkjs) at all. Targets now also include flint (Pebble 2 Duo) and
gabbro (Pebble Round 2) alongside the original five.
This round (MD3 settings redesign) added: a full Material Design 3
rewrite of the phone-side settings page, from a single-scroll page with
Presets/Custom/Toy tabs into a 4-tab bottom-nav app (Connect/Display/
Control/Toys), built from a Claude Design handoff package and seeded from
Lovense Pink (#B8004F) — MD3 color tokens (light/dark, following the
phone's own System/Light/Dark setting), filled text fields, choice chips,
ripple state-layer feedback on every interactive surface, a swatch-pop
animation, and a snackbar replacing the old alert() calls for validation/
conflict messages. Colors moved into a Display-tab sub-section; the custom
swatch sets expanded from 8/7/10/6 to 18/18/18/12 background/text/accent/
active options, and a 16th built-in preset ("Rose") was added. A security
pass on the new page closed two pre-existing gaps it inherited from the old
page: persisted customPresets/toyGroups JSON was being spliced into the
generated page as executable JS source (return <raw>; inside a try/catch)
rather than actually parsed, and the saved host/port/color values were
spliced into HTML attributes without escaping — both are now safe even if
localStorage were ever corrupted or tampered with outside the app. The
save/close message-key contract is unchanged, so no watch-side C or
persisted-storage changes were needed. Confirmed on real Pebble Time 2
(Emery) hardware; see "Project status" above for what's still outstanding on
Gabbro/Chalk.
This is the beginning of the README. Read the rest at the original. Read the full README ↗