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:
parent
c34a84672a
commit
cf8bd63298
|
|
@ -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 -->
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
||||||
|
|
|
||||||
|
|
@ -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 -->
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue