docs: Update backlog tasks with session progress

- task-3 (Push notifications): Marked Done, added implementation notes
- task-4 (PWA offline): Marked In Progress, documented partial impl
- task-6 (c3nav indoor): Added note about removing indoor button
- task-12 (Stale participants): Added greyed-out locations feature

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-01-02 15:30:13 +01:00
parent c34a84672a
commit cf8bd63298
4 changed files with 81 additions and 4 deletions

View File

@ -4,7 +4,7 @@ title: Fix stale participant sessions showing on map
status: Done
assignee: []
created_date: '2025-12-19 18:00'
updated_date: '2025-12-19 18:20'
updated_date: '2026-01-02 14:29'
labels:
- bug
- ux
@ -46,4 +46,12 @@ Fix: Clean up stale participants on room load and use a persistent participant I
- Same user returning to a room gets the same participant ID
- Prevents creating duplicate ghost entries on each page reload
- Falls back to temporary ID if localStorage unavailable
## Update (2026-01-02)
Added visual indicator for stale locations:
- Locations older than 5 minutes are greyed out (#6b7280) with 60% opacity
- Hover tooltip shows "[name] - last seen X min ago"
- Dynamically updates existing markers when they become stale
- Helps users distinguish fresh vs old location data
<!-- SECTION:NOTES:END -->

View File

@ -1,9 +1,10 @@
---
id: task-3
title: Add push notifications
status: To Do
status: Done
assignee: []
created_date: '2025-12-15 19:37'
updated_date: '2026-01-02 14:27'
labels: []
dependencies: []
priority: medium
@ -14,3 +15,39 @@ priority: medium
<!-- SECTION:DESCRIPTION:BEGIN -->
Implement web push notifications for friend arrivals, proximity alerts, and group activity. Include battery-friendly polling options.
<!-- SECTION:DESCRIPTION:END -->
## Implementation Notes
<!-- SECTION:NOTES:BEGIN -->
## Implementation
Implemented comprehensive push notification system:
1. **Web Push with VAPID** (`sync-server/server.js`)
- VAPID key authentication for secure push
- Push subscriptions stored per room
- Silent push for location requests
- Notification push for friend joins/meeting points
2. **Service Worker** (`public/sw.js`)
- Handles push events
- Silent push triggers location update via postMessage
- Notification push shows native notifications
- Click handling opens room URL
3. **Push Hooks** (`src/hooks/usePushNotifications.ts`)
- Subscribe/unsubscribe to push notifications
- Auto-subscribes when joining room
- Handles VAPID public key fetching
4. **Location Request System**
- "Ping all" button with bell icon in friends list header
- Individual ping button per participant
- Deduplicates by name (only pings one session per user)
- WebSocket for online clients, push for offline
5. **Background Location Sync**
- Automatic periodic location requests (60s interval)
- Service worker messages for location sync
- Background Sync API integration
<!-- SECTION:NOTES:END -->

View File

@ -1,9 +1,10 @@
---
id: task-4
title: PWA offline support
status: To Do
status: In Progress
assignee: []
created_date: '2025-12-15 19:37'
updated_date: '2026-01-02 14:28'
labels: []
dependencies: []
priority: high
@ -14,3 +15,30 @@ priority: high
<!-- SECTION:DESCRIPTION:BEGIN -->
Implement service worker for offline caching. Store map tiles, venue data, and room state in IndexedDB. Sync when reconnected.
<!-- SECTION:DESCRIPTION:END -->
## Implementation Notes
<!-- SECTION:NOTES:BEGIN -->
## Partial Implementation
PWA basics implemented:
1. **Service Worker** (`public/sw.js`)
- Push notification handling
- Location request messaging
- Basic caching setup
2. **Install Banner** (`src/components/room/InstallBanner.tsx`)
- Detects installable PWA state
- Shows "Add to Home Screen" prompt
- iOS-specific instructions
- Dismissible with localStorage persistence
3. **PWA Manifest** - App manifest with icons and theme colors
## Still Needed
- Offline map tile caching (IndexedDB)
- Room state persistence for offline viewing
- Sync queue for offline location updates
- Background sync when reconnected
<!-- SECTION:NOTES:END -->

View File

@ -4,7 +4,7 @@ title: c3nav indoor integration
status: Done
assignee: []
created_date: '2025-12-15 19:37'
updated_date: '2025-12-17 00:44'
updated_date: '2026-01-02 14:28'
labels: []
dependencies: []
priority: high
@ -27,4 +27,8 @@ Implemented c3nav indoor map integration:
- Tap-to-set indoor position
- Position sync between participants
- Easter egg: 'The Underground of the Underground'
## Update (2026-01-02)
Removed indoor map button from UI because c3nav blocks iframe embedding (X-Frame-Options: deny). The C3NavEmbed component now shows a fallback UI with an 'Open c3nav' button that opens in a new tab. Indoor map functionality is effectively deprecated in favor of direct c3nav usage.
<!-- SECTION:NOTES:END -->