A mobile-first health tracking PWA for symptoms and supplements with cloud sync.
- Open
index.htmlin Safari (iOS) or any browser - iOS: Tap Share → "Add to Home Screen" for app-like experience
- Sign in with Google or Email to enable cloud sync
- Data persists locally and syncs automatically when signed in
- 2D gesture interface: Hold 200ms → drag to set severity (0-5)
- Rapid Entry mode: Quick logging with keyboard shortcuts (desktop: 0-5 keys)
- Quick copy button: Tap to copy recent days, long-press to change days (1/3/7/14)
- Calendar navigation with entry indicators
- Pin symptoms to top of list (⊙ icon)
- Daily notes: Add notes for each day
- 2 tracking modes: Simple (once daily) or AM/PM (morning/evening)
- Track daily supplements with checkboxes
- Multiplier buttons: ½×, 2×, 3× dose adjustments (right side)
- Swipe to delete with smooth animation
- Drag to reorder
- Tap dose to edit
- 30/60/90 day trend analysis
- Symptom clustering detection
- Copy data for AI analysis
- Cloud Sync: Google Sign-In or Email/Password authentication
- History: View and sort all entries
- Export: Markdown tables, CSV download, or copy for AI
- Manage Symptoms/Supplements: Add, edit, hide, restore
- Backup: Manual save/load via Files app (iCloud)
- Check for Updates: Force refresh to get latest version
- Password Reset: For email accounts
When deployed to GitHub Pages or a web server:
- Go to Settings
- Sign in with Google or create an Email account
- Data syncs automatically every 5 seconds
- Works across all devices signed into the same account
Note: Cloud sync requires HTTPS. Not available when running from local file.
For offline backup or when cloud sync isn't available:
- Settings → Backup → Save Backup
- Save to Files → iCloud Drive
- On other device: Load Backup → select file
| Key | Action |
|---|---|
| 0-5 | Log severity |
| Space / → | Skip to next |
| Z | Undo last |
| Esc | Close |
- React 18 (via CDN)
- Firebase Auth + Firestore
- Single HTML file, no build step
- Works offline after initial load
- PWA-capable
- Push
index.html,manifest.json,apple-touch-icon.png, andfavicon.svgto repo - Enable GitHub Pages in repo settings
- Add your domain to Firebase authorized domains
python3 -m http.server 8080
# or
npx serve .- Explosion animation: Completion celebration changed from party streamers to radial explosion
- 24 particles burst outward in all directions from center
- Inner ring of 12 smaller, faster particles
- Center flash effect
- Faster, more impactful animation (0.8s vs 2s)
- Rapid Entry redesigned:
- Back button now navigates to previous symptom (not undo)
- Current selection shown with distinctive border + checkmark + glow
- Tap current selection to clear it, tap different value to change
- Progress bar shows current position (purple) and completion status (green)
- Counter shows "X of Y" position
- Skip at end closes rapid entry instead of looping
- Can freely navigate back/forward through all symptoms
- Z key or ← Back button goes to previous symptom
- Removed full-screen completion modal: All completions now use toast notifications only
- Prevents app from hanging when completion triggers
- Shows "✓ Morning complete!" or "✓ All symptoms logged!" toast
- Check for Updates feedback fix: Now stays on Settings page and shows toast after reload
- Last recorded fix (complete): Now correctly shows this morning's value when logging PM
- PM logging: shows AM from today if exists, else most recent before today
- AM logging: shows most recent from before today
- Check for Updates feedback: Shows spinning loader while checking, toast confirmation after reload
- Last recorded fix: When logging past dates, shows entries from BEFORE that date (not today's data)
- Copy dropdown fix: Long-press on mobile now stays open properly
- Swipe-to-delete animation: Items smoothly collapse, others slide up
- Mode switching data preservation: Switching between AM/PM and Simple modes no longer loses data
- AM/PM → Simple: Shows averaged severity
- Simple → AM/PM: Shows daily entries as morning entries
- Consistent page widths: All pages use 600px max-width on desktop
- Check for Updates: Now force-refreshes the app (clears caches, reloads)
- Empty by default: App starts with no pre-populated symptoms or supplements
- High-res icon: 180x180 PNG for Safari homescreen bookmarks
- Haptic feedback: Added to swipe-to-delete
- Quick copy button redesign: Shows days count (3d), long-press for dropdown
- Configurable copy days: Choose 1, 3, 7, or 14 days (persists in localStorage)
- Symptom tile fix: Consistent height when selecting severity
- Unified toast notifications: All copy actions show consistent feedback
- Stack multiplier repositioned: Moved to far right of item row
- Rapid Entry improvements: Separate Skip and Close buttons
- Undo shortcut changed: Now uses Z key instead of Backspace
- Markdown table export: Copy data as formatted tables for AI
- Quick copy button: One-tap copy on Symptoms page
- Animated toast: Feedback when copying to clipboard
- Midnight detection fix: Render-based date check for reliable day switching
- Stack auto-copy: Automatically copies yesterday's checked items
- Multiple event triggers: visibilitychange, pageshow, focus, touchstart
- Keyboard shortcuts for Rapid Entry: Space to skip, Backspace to undo, Esc to close
- Desktop shortcut labels: Subtle key hints shown on desktop only
- Navigation fixes: All settings sub-pages return to Settings when closed
- Consistent page layouts: All pages now use 28px titles with "Done" button
- Export redesign: Full-screen layout matching other pages, iOS-style sections
- iOS-styled Settings: Complete redesign with grouped sections and rounded cards
- Section headers: DATA, MANAGE, TRACKING MODE, BACKUP, DANGER ZONE, ABOUT
- Cleaner UI: Removed 3D icons, flat design throughout
- Simplified buttons: Text-only "Done" buttons, chevron arrows for navigation
- Password reset debugging: Alert popup confirms email sent
- Console logging: Debug output for password reset flow
- Better error messages: Shows error codes for troubleshooting
- UI spacing fixes: "Create one" and "Forgot password?" properly separated
- Tablet support: Increased max-width (800px symptoms/stack, 600px settings)
- Forgot password: Password reset link for email accounts
- Firebase integration: Uses sendPasswordResetEmail()
- Email auth in browser: Email/password available in all modes (not just PWA)
- Email/Password authentication: Sign up and sign in with email
- Smart error messages: Helpful feedback for auth errors
- Sign-up/Sign-in toggle: Easy switching between modes
- PWA auth fix: Fixed standalone mode detection for auth
- Hidden item management: Removed delete from hidden items (restore only)
- Pin UX improvements: Closes overlay immediately, no special styling
- Auto-sync optimization: Reduced sync delay to 5 seconds
- Removed manual sync button: Sync is now fully automatic
- Popup auth fix: Fixed Google Sign-In reliability with popup-first approach
- Environment detection: Auth checks for supported environments
- Firebase Cloud Sync: Real-time sync with Firestore
- Google Sign-In: One-tap authentication
- PWA detection: Different auth flows for browser vs installed app
- Offline persistence: Firestore cache for offline access
- Rapid Entry mode: Fast symptom logging with progress bar
- Undo support: Back button in rapid entry
- Period switching: Switch AM/PM when current period complete
- Major refactor: Consolidated codebase
- Pinned symptoms: Pin frequently-used symptoms to top
- Daily notes: Add text notes for each day
- Search: Find symptoms quickly (hidden by default)
- Completion celebration: Animation when all symptoms logged
- Drag to reorder: Hold and drag symptoms/supplements
- Swipe to delete: Swipe left on items (active items only)
- Multiplier buttons: Quick dose adjustments (½×, 2×, 3×)
- Error boundary: Graceful error handling
- Settings in tab bar
- History & Export in Settings
- Copy for AI export
- iCloud Backup/Restore
- Full-screen views
- Initial release through Stack mode additions
MIT