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 status: Done
assignee: [] assignee: []
created_date: '2025-12-19 18:00' created_date: '2025-12-19 18:00'
updated_date: '2025-12-19 18:20' updated_date: '2026-01-02 14:29'
labels: labels:
- bug - bug
- ux - 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 - Same user returning to a room gets the same participant ID
- Prevents creating duplicate ghost entries on each page reload - Prevents creating duplicate ghost entries on each page reload
- Falls back to temporary ID if localStorage unavailable - 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 --> <!-- SECTION:NOTES:END -->

View File

@ -1,9 +1,10 @@
--- ---
id: task-3 id: task-3
title: Add push notifications title: Add push notifications
status: To Do status: Done
assignee: [] assignee: []
created_date: '2025-12-15 19:37' created_date: '2025-12-15 19:37'
updated_date: '2026-01-02 14:27'
labels: [] labels: []
dependencies: [] dependencies: []
priority: medium priority: medium
@ -14,3 +15,39 @@ priority: medium
<!-- SECTION:DESCRIPTION:BEGIN --> <!-- SECTION:DESCRIPTION:BEGIN -->
Implement web push notifications for friend arrivals, proximity alerts, and group activity. Include battery-friendly polling options. Implement web push notifications for friend arrivals, proximity alerts, and group activity. Include battery-friendly polling options.
<!-- SECTION:DESCRIPTION:END --> <!-- 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 id: task-4
title: PWA offline support title: PWA offline support
status: To Do status: In Progress
assignee: [] assignee: []
created_date: '2025-12-15 19:37' created_date: '2025-12-15 19:37'
updated_date: '2026-01-02 14:28'
labels: [] labels: []
dependencies: [] dependencies: []
priority: high priority: high
@ -14,3 +15,30 @@ priority: high
<!-- SECTION:DESCRIPTION:BEGIN --> <!-- SECTION:DESCRIPTION:BEGIN -->
Implement service worker for offline caching. Store map tiles, venue data, and room state in IndexedDB. Sync when reconnected. Implement service worker for offline caching. Store map tiles, venue data, and room state in IndexedDB. Sync when reconnected.
<!-- SECTION:DESCRIPTION:END --> <!-- 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 status: Done
assignee: [] assignee: []
created_date: '2025-12-15 19:37' created_date: '2025-12-15 19:37'
updated_date: '2025-12-17 00:44' updated_date: '2026-01-02 14:28'
labels: [] labels: []
dependencies: [] dependencies: []
priority: high priority: high
@ -27,4 +27,8 @@ Implemented c3nav indoor map integration:
- Tap-to-set indoor position - Tap-to-set indoor position
- Position sync between participants - Position sync between participants
- Easter egg: 'The Underground of the Underground' - 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 --> <!-- SECTION:NOTES:END -->