Instead of waiting on navigator.serviceWorker.ready (which may never
resolve if registration hasn't completed), explicitly register the
service worker and wait for it to activate.
This fixes the "service worker not ready" error on iOS Safari PWAs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 10s timeout for service worker ready state
- Add 15s timeout for push subscription
- Check for PushManager support early (shows unsupported on incompatible devices)
- Provide specific error messages for different failure modes
This prevents the enable button from spinning forever on iOS devices
where push subscription may hang silently.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The Content-Disposition header was including the workspace name directly,
causing a "Cannot convert argument to ByteString" error when workspace
names contained smart apostrophes or other non-ASCII characters (e.g.,
"Grace's Plan" with curly apostrophe U+2019).
Sanitize filename by removing non-ASCII characters before using in header.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create appointment edit page at /appointments/[id]/edit
- Fix iCal calendar timezone handling:
- Add VTIMEZONE block for Australia/Perth
- Use TZID parameter for DTSTART/DTEND
- Properly format local times without Z suffix
- Appointments now appear correctly in Google Calendar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features added:
- Emergency Info Card: Full-screen emergency view with patient info
- Refill Tracker: Track pill counts with auto-decrement on dose
- Activity Feed: View caregiver activity with filtering
- Symptom Tracker: Log symptoms with severity and offline sync
- Print Views: Daily meds, appointments, doctor visit summaries
- iCal Export: Calendar subscription for appointments
- PDF Export: Medical summary for doctor visits
- Calendar View: Monthly calendar for appointments
- Appointment Preparation: Checklist for upcoming appointments
- Medication Reminders: PWA push notifications with quiet hours
Bug fixes:
- Fix invite workflow: Register/login now properly redirect back
- Add undo for doctor questions (can unmark "asked" questions)
- Fix API route type annotations for Next.js 14 compatibility
- Add Suspense boundary for useSearchParams in login/register
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix argon2 native module build in Docker (add build-essential, python3)
- Switch Docker base image from Alpine to Debian-slim for OpenSSL compatibility
- Fix session cookies for HTTP access (COOKIE_SECURE env var)
- Fix TypeScript type errors in sync routes and middleware
- Fix CSS circular dependency in globals.css
- Fix Map iteration in rate-limit cleanup
- Add createdAt field to LocalNote interface
- Configure Tailscale Funnel on port 10000
- Update NEXT_PUBLIC_APP_URL for public funnel access
- Add initial Prisma migration
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
A calm, reliable app to help manage appointments, medications, and notes
for chemo patients and their families.
Features:
- Today dashboard with next appointment and medications due
- Medication tracking with multiple schedule types (fixed times, interval, weekdays, PRN)
- One-tap dose logging with 5-minute undo window
- Questions for doctor tracking
- Family sharing with workspace model and invite links
- Offline-first with IndexedDB and sync
- Docker Compose deployment with Tailscale Funnel support
Tech stack:
- Next.js 14 (App Router) + TypeScript + Tailwind CSS
- PostgreSQL + Prisma
- Argon2 password hashing + session cookies
- Dexie.js for IndexedDB
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>