### PebbleGym v3.1.0 Changelog
* **Routine Deactivation & Toggle:** Users can now toggle an active routine to inactive directly from the settings page, setting the active status to empty.
* **No Auto-Activation on Import:** Importing routines via JSON or Hevy link no longer automatically sets them as active.
* **No Auto-Activation on Delete:** Deleting the active routine now deactivates it instead of auto-selecting another routine.
* **Watch-Controlled Workout Starts:** Added synchronization control to ensure workout sessions are only started when explicitly requested from the watchapp menu. Background updates (such as saving settings or importing routines on the phone) will now sync data silently without force-opening the workout screen.
* **Layout Spacing Fixes:** Resolved vertical overlaps between workout metrics and labels by expanding spacing and scaling coordinates proportionally on all screens.
* **Progress Dots Overlap Prevention:** Fixed previous workout stats text overlaying the set progress dots by reducing the text bounding box height and lowering the dots center coordinates.
* **Build Upgrade:** Compiled and packaged the final binary for Pebble Basalt, Chalk, and Emery runtimes under version 3.1.0.
### PebbleGym 3.0 Changelog
* **Watch-Controlled Workout Starts:** Added synchronization control to ensure workout sessions are only started when explicitly requested from the watchapp menu. Background updates (such as saving settings or importing routines on the phone) will now sync data silently without force-opening the workout screen.
* **Layout Spacing Fixes:** Resolved vertical overlaps between workout metrics and labels by expanding spacing and scaling coordinates proportionally on all screens.
* **Progress Dots Overlap Prevention:** Fixed previous workout stats text overlaying the set progress dots by reducing the text bounding box height and lowering the dots center coordinates.
* **Build Upgrade:** Compiled and packaged the final binary for Pebble Basalt, Chalk, and Emery runtimes under version 3.0
No release notes available
No release notes available
# PebbleGym Release Changelog (v2.7.0)
## 🆕 New Features & UI Enhancements
* **Two-Column Dashboard Layout:** Replaced the single-line layout (e.g. `10 x 80 kg`) with a high-visibility two-column dashboard. Repetitions (left) and Weight (right) are drawn side-by-side using a massive system number font (`BITHAM_42_MEDIUM_NUMBERS`) with clean labels (`WDH.`/`kg`) underneath and a vertical separator line.
* **Centered Timer Layout:** Timed sets (countdown timers) are displayed centered on screen in a large format with a dedicated `TIMER` label underneath.
* **Togglable Watch Helper Footer:** Added a new setting on the phone companion page: "Show Button Hints on Watch". Hiding the button helper footer dynamically shifts and centers all workout stats vertically on the watch, fully utilizing screen real estate and eliminating empty space.
* **Larger Progress Dots:** Increased set progress dot radius to 7px (with wider spacing) and styled the active set indicator with a thicker outline for better readability.
* **Continuous Clock Display:** Current time is shown continuously in the workout sub-header.
* **Interactive Routine Editor:** Edit, rename, and customize routines, sets, reps, weights, and durations directly in the phone WebView.
* **Active Exercise Focus:** Quick exercise jumping menu now automatically focuses the active exercise.
* **1.0 kg/lbs Weight Steps:** Weight adjustments on the watch now increment/decrement by exactly 1.0 kg/lbs.
## 🎨 Design & Contrast (Light Theme)
* **High-Contrast Light Theme:** Redesigned screen drawings to use a white background (`GColorWhite`) and dark text/outlines (`GColorBlack`) for optimal readability under gym lighting.
* **Solid Rest Timer Overlay:** Rest timer popups render on a solid white box twice as tall, completely covering background workout stats to eliminate visual clutter.
## 🐛 Bug Fixes
* **WebView Settings Sync Fix:** Settings changed inside the WebView (rest time, unit, auto-reload, and button hints) are now successfully returned and synced to the background companion app's local storage.
* **URI Too Long Fix:** Migrated configuration and routine payloads to URL hash fragments (`#`), preventing HTTP 414 errors.
* **WebView Compatibility Fix:** Replaced ES6 `find` and `findIndex` functions with ES5 loops, resolving blank screen crashes on older mobile WebViews.
🆕 New Features & Enhancements (since v2.5)
Interactive Routine Editor: Edit, rename, and customize your routines directly from the mobile settings page. Change rep counts, target weights, add/remove sets, or configure set countdown timers.
Timed Exercises (Active Set Timer): Support for timed exercises synced from Hevy. The watch displays a live countdown timer (MM:SS) on screen during the set, vibrates when finished, and automatically logs the set. Long-press SELECT to pause/resume, or use UP/DOWN long-presses to adjust time by +/- 5 seconds.
Continuous Clock Display: The current clock time (supporting 12h/24h formats) is now displayed continuously in the workout sub-header on the watch.
Active Exercise Focus: Opening the quick exercise jumping menu now automatically scrolls and highlights the currently active exercise index, rather than starting at the top.
1.0 kg/lbs Weight Steps: Changed weight increment/decrement adjustments in the watch editor to use exactly 1.0 kg/lbs steps instead of 2.5.
🎨 UI & Aesthetics (Light Theme & High Contrast)
High-Contrast Light Theme: Swapped the background to white (GColorWhite) and text/outlines to dark colors (GColorBlack/GColorDarkGray) to optimize e-paper display readability under harsh gym lighting.
Redesigned Rest Timer Overlay: Rest timers now render on a solid white box overlay that is twice as tall, completely covering background workout stats to eliminate visual clutter.
🐛 Bug Fixes
Rest Timer & settings Sync Fix: Fixed a synchronization bug where changes made to the rest timer duration, weight unit, or auto-reload options inside the settings WebView did not transfer to the background companion app. These are now explicitly returned in the WebView's close callback and saved to the companion's local storage.
URI Too Long Fix: Migrated configuration, routines list, and workout history payloads from URL query parameters (?) to the URL hash fragment (#). This keeps the payload entirely client-side, bypassing HTTP 414 errors and blank page crashes when loading settings.
WebView Compatibility Fix: Replaced ES6 find and findIndex functions with ES5 standard loops, preventing script failures on older Android and iOS webview engines.
Settings Page Synchronization: Aligned the root and subfolder config templates to ensure the latest settings page code is served.
🌟 What's New
High-Contrast Light Theme: The watch app now features a fully redesigned Light Theme (reflective white background with deep black and dark gray text). This drastically improves outdoor and under-gym-light readability on Pebble e-paper screens.
Continuous Clock Display: You can now see the current time continuously in the workout sub-header on the left. Set index centering has been adjusted to prevent any text overlaps.
Interactive Routine Editor: The settings page on the phone (config.html) now allows editing imported Hevy routines! You can rename routines, adjust exercise titles, change target reps and weights, add/remove sets, or configure set-specific timers.
Timed Exercises & Countdown Timer: Timed sets parsed from Hevy routines (or manually configured via the new editor) will now run an active countdown timer (MM:SS) on your watch.
Long-press SELECT to start or pause the active timer.
The watch will double-pulse haptically when the countdown hits zero and auto-log the set.
Long-press UP/DOWN to adjust target duration in +/- 5s increments.
🛠️ Bug Fixes & Improvements
Fix "URI Too Long" (HTTP 414) Error: Migrated routines and workout history JSON payloads from query parameters (?) to URL hash fragments (#). This prevents web servers (like GitHub Pages) from blocking page loads due to URL length limits, fixing the lock-out issue when settings are opened with saved workouts.
1.0 kg/lbs Weight Adjustments: Tweaked inline weight editor steps to adjust by exactly 1.0 (internally 100 units) per button press instead of 2.5, matching standard plate increments.
Smart Menu Focus: The Quick Exercise menu now automatically scrolls to and centers on the currently active exercise when opened, avoiding manual scrolling.
### Version 2.4.0
* **Fix Select Routine Sync Truncation (Issue #2)**:
* Expanded watch routine ID buffers to 64 bytes to prevent Hevy UUID truncation and ensure valid lookup IDs.
* Utilized watch outbox sent/failed callbacks to reliably track transmission status and automatically retry failed activations after 500ms.
* Increased watch AppMessage buffers to 2048 (inbox) / 256 (outbox) to comfortably accommodate larger routine structures without memory overflows.
* **Stable Sync Activation (Issue #2)**:
* Defer workout activation until the watch has completed window stack transitions and returned to a stable sync screen.
* **Track Workout Sessions via Pebble Health (Issue #3)**:
* Integrated Pebble Health to record continuous heart rate samples during active exercises and show real-time BPM values.
* **Fix Auto-Start Bug (Issue #1)**:
* Resolved an issue where watchapps automatically launched the last active routine on boot.
### Version 2.3.0
* **Stable Sync Activation (Fix #2)**:
* Implemented a delayed activation handshake to prevent Bluetooth AppMessage packet drops during window transitions.
* The watch now defers sending the routine activation command until the menu window has popped and the sync window is fully stable (.appear handler).
* Added self-correcting retry logic (using an AppTimer) to handle outbox-busy states gracefully when transitioning windows.
* The phone companion now starts the workout details transmission immediately upon receiving the activation command without delay.
* **Track Workout Sessions via Pebble Health (Issue #3)**:
* Integrated Pebble Health to sample continuous heart rate data during active workouts (1-second sample rate).
* Real-time heart rate (e.g. `135 bpm`) is displayed in the active workout window.
* Completed workouts sync with companion services and map to Health Connect.
* **Auto-Start Bugfix (Issue #1)**:
* Removed automatic start on boot so that the watchapp stays in idle status on startup and only requests the list of routines.
### Version 2.2.0
* **Fix Workout Sync on Watch Selection (Issue #2)**:
* Implemented an event-driven handshake (`WORKOUT_ACTION = 4`) to prevent Bluetooth AppMessage collisions during window transitions when starting a routine from the watch.
* The watch now requests active routine details only after the sync window has fully transitioned and is stable (`.appear` handler).
* Added robust outbox checks and retry logic on the watch: if the outbox is busy transmitting the activation command, it retries requesting the details every 100ms (up to 10 times) using an `AppTimer`.
* Resolved string coercion crashes and routine ID buffer size limitations (expanded to 32 bytes to support autogenerated Hevy routine IDs).
* **Track Workout Sessions via Pebble Health (Issue #3)**:
* Added the health capability to log and record continuous active heart rate samples (1-second period) during workouts.
* Real-time heart rate is displayed on-screen during active exercises.
* Workouts sync automatically to companion services and Health Connect.
* **Fix Auto-Start on Boot (Issue #1)**:
* Fixed an issue where the watchapp would automatically load and start the last active routine on boot even if it had been completed or discarded.
New Features
Pebble Health & Activity Tracking: Added workout session tracking via Pebble Health. When a workout is started on the watch, the Heart Rate Monitor (HRM) sample period is set to 1 second to log high-resolution active metrics in the background. This allows companion phone apps (such as Gadgetbridge) to sync the exercise session directly into Health Connect (Google Fit / Samsung Health).
Live Heart Rate Display: Displays your live heart rate in real-time (in red) on the top-right corner of the workout screen. The heart rate sensor is automatically powered off when the workout is finished or cancelled to save battery.
Bug Fixes
Fix Workout Auto-Start on Launch: Fixed an issue where the active routine was pushed and started automatically every time the watchapp was launched, even after being previously discarded.
Fix Watch Menu Routine Selection: Resolved an issue where selecting a routine from the watch list popped the menu but failed to start the workout sync.
Increased routine ID buffer sizes from 16 to 32 bytes on the watch to prevent truncation of long IDs (such as autogenerated timestamps).
Added defensive string casting in the JavaScript companion code to prevent crashes from type coercion.
Integrated better outbox sending status checks and logging.
PebbleGym v1.9.0
================text
- Decoupled key translation from system global messageKeys: Implemented independent local myMessageKeys mapping to resolve decoding failures under Gadgetbridge empty runtimes.
- Re-compiled project to version 1.9.0.
PebbleGym v1.8.0
================text
- Added auto-reload setting: Users can toggle routine auto-updating from Hevy before starting a workout.
- Saved Hevy URLs: Imported routines now persist their original Hevy links.
- Implemented background fetching: Sync requests dynamically fetch the latest routine template from Hevy's API, updating local storage, with an offline fallback.
- Incremented version to 1.8.0.
PebbleGym v1.6.0
================text
- Fixed Bluetooth sync race condition: Added a 500ms delay before starting routine sync to allow the watch pop animation to complete.
- Added robust key lookup: Implemented getDictionaryValue helper to support both string keys and integer keys, ensuring full compatibility with Gadgetbridge and other Pebble runtimes.
- Incremented version to 1.6.0 for deployment.
PebbleGym v1.5.0
================text
- Resolved routine loading issue: Added 'id_' prefixing to route IDs during transmission to prevent PebbleKit JS from coercing stringified numeric IDs into integers.
- Updated startup sync screen instructions to guide the user to either select a routine on the watch using SELECT or start a workout on their phone.
- Added outbox logging handlers to the watch for better debugging of outgoing messages.
PebbleGym v1.4.0
================text
- Fixed on-watch routine selection: Selecting a routine now successfully triggers the workout load and sync from the phone companion.
- Improved workout exit flow: Pressing the BACK button during an active workout now opens the Quick Exercise Menu instead of exiting immediately.
- Added safe workout ending: Workouts can now be completed and saved to history via "Workout BEENDEN" or discarded via "Abbrechen" in the menu.
- Incremented app version to 1.4.0 for deployment compatibility.
On-Watch Routine Selection Menu:
Added a scrollable routine selection window (SimpleMenuLayer) directly on the watch.
This menu can be opened from the sync/idle screen by pressing the SELECT (Middle) button.
Displays all saved workout routines synchronized from the phone companion (displays routine titles and highlights the currently active plan as Aktiv (Ausgewählt)).
Selecting a routine immediately triggers the watch to send an activation command to the phone (WORKOUT_ACTION = 3), which sets the active routine in the phone's localStorage and synchronizes the workout details back to the watch, starting the session.
Phone Companion Sync Enhancements:
Added routine list serialization to send up to 10 stored plans to the watch.
Refactored the communication thread to push the routine list on boot, on sync requests, or immediately after a new routine is set active.
Added an AppMessage listener to process routine selection commands originating from the watch.
AppMessage Communication Schema Update:
Expanded messageKeys in package.json to include keys required for sync: ROUTINE_COUNT, ROUTINE_INDEX, ROUTINE_ID, ROUTINE_NAME, and ACTIVE_ROUTINE_ID.
Clean Build & Release:
Bumped the app version to 1.3.0 in package.json.
Recompiled the bundle build/project.pbw for all target Pebble platforms (basalt, chalk, emery).
API-Driven Routine Synchronization (Scraping Fix):
Replaced the legacy HTML scraper with direct calls to Hevy's public API endpoint: https://api.hevyapp.com/routine_with_short_id/[short_id].
Added required request headers (x-api-key: shelobs_hevy_web and Hevy-Platform: web) to match the official Hevy web client.
This fixes failures caused by Hevy migrating their shared routine pages to dynamic Client-Side Rendering (CSR), which had removed routine details from the server-side __NEXT_DATA__ script tag.
Improved CORS User Experience in Browser settings page:
Updated config.html (both in /src/pkjs/ and the root replica) to show a clearer status message when a browser CORS block occurs:
"Der Direkt-Abruf im Web-Browser ist durch CORS eingeschränkt. Der Link wurde als ausstehend gespeichert und wird beim Klick auf 'Speichern & Schließen' im Hintergrund über dein Smartphone geladen!"
This clarifies to the user that the background phone companion (which does not suffer from browser CORS limitations) will fetch the routine automatically on save.
Version Bump & Clean Rebuild:
Bumped the official Pebble app version from 1.1.0 to 1.2.0 in package.json.
Rebuilt the application binary inside the Rebble SDK Docker environment. The compiled binary (build/project.pbw) is successfully updated for basalt (Pebble Time), chalk (Pebble Time Round), and emery (Pebble Time 2) platforms.
Added
🎨 Minimalist Dumbbell Logo: Replaced the temporary mockup icon showing a wrist photo with a clean, flat 2D retro pixel-art dumbbell icon (packaged in 48x48 and 144x144 formats).
📁 Promotional Assets Folder: Organized all marketing banners, app store icons, and screenshots for all Pebble platforms under a dedicated release_assets/ directory.
Fixed
🌐 Settings Page 404 error: Updated the configuration URL in the PebbleKit JS companion code (index.js). The watch now points to the correct nested path /src/pkjs/config.html served via GitHub Pages, resolving the loading failure on mobile devices.