🌸Spring 2026 Pebble App Contest — View the entries!

Changelog

Version 1.2.52026-05-31T12:37:04.268

Fixed the math for people east of UTC that was causing a 1 hour and 1 day shift.

Version 1.2.32026-05-30T12:20:54.383

Fixed bug where every event on that day for every year was displayed.

Version 1.2.22026-05-30T12:03:12.242

✨ New Features & UI Enhancements
Manual Force-Sync: Users can now long-press the Select (middle) button on any event to bypass the cache timer and instantly fetch fresh data from Google.

"Toast" Notifications: Added a sleek, non-intrusive status bar at the bottom of the screen to provide real-time feedback (e.g., "Syncing data...", "Network Error", "Bad URL?").

Smart Error Handling: The app no longer hangs on "Loading..." if a URL is incorrect or the network drops. It gracefully displays the exact point of failure directly on the watch face.

Visual Polish: Restored the native Pebble Cyan highlighting for selected rows and ensured the Detail View properly wraps and displays full event titles without cutting them off.

šŸ› Critical Bug Fixes
The "Ghost Event" Fix: Eliminated the race condition where the watch would briefly display "Wed Dec 31" (Epoch 0) during a sync. The UI now remains perfectly stable until the new data is 100% ready.

The 256-Byte Persistence Wall: Solved a hardware limitation where only the first 4 events were saved when the app closed. Implemented "Data Sharding" to seamlessly split the calendar across multiple memory blocks, ensuring all events survive a reboot.

Double-Free Crash Resolved: Restructured the C memory management and .unload handlers so the app no longer faults or crashes when backing out of menus or closing the app mid-sync.

Ongoing Events Restored: Fixed a server-side logic flaw where meetings currently in progress were dropped from the list. The app now accurately tracks events by their end time rather than their start time.

āš™ļø Under the Hood (Performance & Battery)
Battery-Saving Cache: The JavaScript bridge now acts as a strict gatekeeper, only waking up the phone's Bluetooth radio to poll Google if the local data is older than 30 minutes (unless manually overridden).

Double-Buffered Memory: The watch now downloads incoming Bluetooth chunks into a hidden background buffer. The main screen continues to display the old data flawlessly until the final byte of the new sync arrives, allowing for "seamless" swapping.

"Help Signal" Boot Sequence: If the watch's internal memory is completely empty on launch, it instantly pings the phone with an emergency request to bypass all timers and fetch data immediately.

Industrial-Strength iCal Parser: Completely rewrote the Google Apps Script backend to handle massive calendar files (up to 1MB+). It now features:

RRULE Fast-Forwarding: Safely processes recurring events (like weekly meetings) even if their original start date was 5 years ago.

Line-Unfolding: Properly merges long, wrapped descriptions that normally break naive parsers.

European DST Support: Dynamically calculates Daylight Saving Time offsets for complex timezones (like Europe/Paris) to ensure the watch displays the exact local time.

Version 1.2.12026-05-30T00:38:37.152

Added error handling

Version 1.22026-05-25T15:13:06.912

Added notification that data is being synced.
Fixed issue where current events were being dropped because current time was after start time.

Version 1.12026-05-08T04:46:03.16

Fixes an issue where only the first 4 events were saved and all future were dumped causing a refresh and delay upon entering the app. It should remember up to 20 events and only update every 30min.

Version 1.02026-05-08T04:04:54.38

No release notes available