v0.9.5
What's new
iOS PWA
- Safe area fix — bottom navigation no longer overlaps the home indicator / gesture pill
- Top bar fix — mobile topbar no longer hides behind the Dynamic Island or Android status bar; height accounts for
env(safe-area-inset-top) - Install prompt — first-time iOS Safari visitors see a medium-detent bottom sheet with a 3-step "Add to Home Screen" guide. App icon shown in header. Dismissed state saved to localStorage
viewport-fit=cover— both pages render edge-to-edge in standalone mode
Content gap fix
The blank gap below the topbar on all three screens (Overview, Dashboard, Settings) is fixed. Root cause: #appWrap padding-top was creating dead space in the layout flow (~84px total). Fixed by zeroing the page top padding on mobile.
Favicons & icons
- Login/signup page was missing all favicon and PWA meta tags — now fixed
- Theme-aware favicon swap wired into
applyTheme()on the login page - All favicon and apple-touch-icon links use root-relative paths
- Replaced SVG apple-touch-icon with a real 180×180 PNG raster
Sign-in loader
- Fixed: success screen showed "Signed in!" and "Signing in with Google" simultaneously
- OAuth sub-text now correctly reads "Signed in with {provider}"
Notification system
- Added Forgot to stop tracking — fires 90 min past daily target while still logged in
- Added Early leave achieved — fires on checkout when target is hit before 4 PM
- Added Morning reminder — fires at 9 AM on workdays if no login yet that day
- Updated notification banner copy: "Notifications are disabled." / "You may miss work hour alerts."
Node.js
- Pinned to
20.xinpackage.jsonto prevent auto-upgrades on Vercel