🌸Spring 2026 Pebble App Contest View the entries!

Changelog

Version 2.12026-06-26T19:31:53.19

Architecture & Core System
Complete Codebase Refactor: Transitioned from a single monolithic main.c file to a modular 9-file architecture, enabling Link Time Optimization (LTO), faster incremental builds, and isolated UI states.
Global Header implementation: Established vitalgauge.h to manage global states, persistent keys, and subsystem definitions safely across all UI modules.

New Features
On-Device Settings Menu: Added a new SimpleMenuLayer accessible via a long-press of the Select button on the main Hub screen.
Dark Mode: Added a system-wide UI toggle to invert background and text colors across all modules.
Advanced Breathing Styles: Expanded the breathing session tool beyond standard Box Breathing (4-4-4-4) to include Relax (4-7-8) and Sleep (4-8) modes, complete with dynamic audio triggering.
Customizable Haptics: Added a haptic feedback toggle (Off / Low / High) to control interaction vibrations. Default interaction is "Low".
Backlight Override: Added a toggle to force the watch backlight to remain on during EKG scans and breathing sessions.

Improvements & UI Enhancements
Zero-Delay Startup: The health_engine now retrieves the last known Energy Reserve, Sleep, and Readiness scores from persistent flash memory during initialization, eliminating the zero-state screen flash on startup.
Refined Haptic Engine: Replaced the aggressive system default vibration on UI taps with a custom 15ms micro-tick for a more tactile, premium feel.
Streamlined Breathing Visuals: Removed the static outer boundary circle during breathing sessions, leaving only the smooth, animating inner circle.

Bug Fixes
Sleep Tracking Accuracy: Fixed an issue where the OS splitting sleep data into chunks caused the app to only read the single longest chunk. The parser now dynamically scans the full 12-hour window to bridge native sleep blocks and capture total actual sleep.
Breathing Phase Math: Fixed a countdown desync issue where the initial breathing phase would display an incorrect starting second or hang on "HOLD" by refactoring the unified timer to decrement at the top of its logic loop.
Compiler Resolutions: Resolved strict GCC build failures including generated RESOURCE_ID macro collisions, duplicate const declarations, snprintf truncation limits, and time_t signed/unsigned comparison warnings.

Version 2.0.52026-06-25T19:00:00.124

Fixed issue where sleep stats were being shortened. Should have full sleep now properly tracked.

Version 2.0.42026-06-24T11:47:25.329

Modified readiness score scan that is done first thing in the morning. Should hopefully provide better results for your daily energy reserve.

Version 2.0.32026-06-04T14:04:12.621

Fixed issue where energy reserve number between the main page was not pulling from the correct place and showing the wrong number.

Version 2.0.22026-06-02T16:04:33.115

Updated breathing audio
Replaced the audio files with Leda voice
Removed pop at the end of each notification by stringing them all as a single session instead of close the amp at the end of each file.

Version 2.0.12026-06-01T20:49:55.607

added logo/icon
added AppGlance

Version 22026-06-01T20:05:50.941

🚀 V2.0 Release Notes: The "Dashboard" Update
Welcome to the biggest update we’ve ever released! We have completely redesigned the app from the ground up, moving away from the old static bar graph to a dynamic, real-time health dashboard, while adding silent background monitoring and deep historical trends.

Here is everything new in V2.0:

🎨 Complete UI & Navigation Overhaul
The New 3-Ring Hub: Say goodbye to the main screen bar graph! The main screen is now a gorgeous, glanceable "Hub" featuring 3 concentric rings tracking your daily Activity, Sleep, and Stress.

The Energy Reserve: Front and center on the new Hub is your Energy Reserve score (0-100%). It calculates your starting battery based on your sleep, and dynamically drains throughout the day based on your exertion and stress levels.

Quadrant Navigation: We've replaced the old "Up for Stress, Down for Breathing" shortcuts with a full touch/quadrant system. Simply tap a corner of the screen to dive deep into that specific metric.

🧘 Stress & Breathing (Moved & Upgraded)
Dedicated Stress Hub (Top-Left): Stress scanning and Box Breathing haven't disappeared—they’ve just moved to their own dedicated page! Tap the Top-Left quadrant to open it.

New Controls: Inside the Stress page, press [SELECT] to run an EKG scan, or press [UP / DOWN] to start a Box Breathing session.

Live Energy Recharge: Breathing is now tied to your Energy Reserve! Successfully completing a breathing session to lower a high stress score will actively "recharge" your central battery.

Volume Control: You can now adjust the breathing audio volume mid-session using the Up/Down buttons.

📊 Powerful New Dashboards
7-Day Trends (Bottom-Left): Wondering how your week went? Tap the Bottom-Left quadrant to open the brand new Trends page. Use the Up/Down buttons to cycle through 7-day historical bar charts for your Energy, Sleep, Stress, and Activity.

Sleep & Readiness (Bottom-Right): We have merged your Sleep tracking and Morning Readiness score into a single "Morning Baseline" page.

Energy Breakdown (Center Tap): Tap the center of the screen to see the exact math behind your Energy Reserve, including your Cardiac Efficiency, Exertion Drain, and Stress Penalty.

🤫 Silent Background Monitoring
Native System Alerts: We completely removed the intrusive, pop-up windows that used to interrupt you when a high heart rate was detected.

Headless Handoff: The app now monitors your heart rate and movement completely invisibly in the background. If it detects a stress spike while you are sitting still, it will push a silent, native notification directly to your watch's system tray (like a text message) that says "Stress Spike Detected" so you can review it on your own time.

🧠 Smarter Algorithms
True Deep Sleep Tracking: We rebuilt the sleep math. The app now cross-references our custom sleep-boundary logic with your watch's native OS movement masks, resulting in highly accurate "Deep" vs "Light" sleep chunking.

True Morning Heart Rate: Your Readiness score now specifically isolates your lowest heart rate during the critical 2-hour window right after you wake up, heavily penalizing your score if you wake up highly stressed.

⚙️ Under The Hood
Battery Saver: Data is now fetched "on-demand" rather than constantly draining your battery in the background. (Pro-tip: Long-press the [UP] button on the main Hub to force a manual data sync!).

Fixed a critical CPU bug that could cause the watch backlight to stay on indefinitely.

Added custom [BACK] button safety controls so you never get trapped in a breathing or scanning session.

Version 1.3.12026-05-30T12:50:40.393

Added Age, Height and Weight inputs for more accurate BMR for body battery

Version 1.32026-05-30T11:46:53.426

Changed the formatting to be cleaner
Added a body battery feature. Should get a good initial number after you go to sleep and wake back up. (Experimental)
60sec readings triggered by high BPM are done in the background and stress events take into account your current activity level.
High stress event messages are now pushed as a notification and can be retrieved under all your notification list.

Version 1.12026-05-26T21:06:45.604

Added continuous heart rate reading while doing box breathing.
Added color edging which will tell you how you are doing.
Removed vibration when sound is off to remove reading misreads.

Version 1.02026-05-17T01:17:22.385

First release 
Main screen provides a history of hear rate
Pressing up takes you to a screen for measuring your heart rate and stress level. EKG simulator using your actual BPM. 
Scrolling down take you to box breathing exercise with visual and voice guidance. If volume set to 0%, guidance will include vibration. 
Will work in the background and when watch take a regular measurement, if the rate is high, will trigger a 60sec read and should notify you if there is an issue and recommend breathing exercises. If everything is good, should return to watch face.