From cf8bd632985db09cc3154c33698a9bfdc5abbc10 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Fri, 2 Jan 2026 15:30:13 +0100 Subject: [PATCH] docs: Update backlog tasks with session progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- ...ale-participant-sessions-showing-on-map.md | 10 ++++- .../tasks/task-3 - Add-push-notifications.md | 39 ++++++++++++++++++- backlog/tasks/task-4 - PWA-offline-support.md | 30 +++++++++++++- .../task-6 - c3nav-indoor-integration.md | 6 ++- 4 files changed, 81 insertions(+), 4 deletions(-) diff --git a/backlog/tasks/task-12 - Fix-stale-participant-sessions-showing-on-map.md b/backlog/tasks/task-12 - Fix-stale-participant-sessions-showing-on-map.md index 07bb1cc..57e39c8 100644 --- a/backlog/tasks/task-12 - Fix-stale-participant-sessions-showing-on-map.md +++ b/backlog/tasks/task-12 - Fix-stale-participant-sessions-showing-on-map.md @@ -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 diff --git a/backlog/tasks/task-3 - Add-push-notifications.md b/backlog/tasks/task-3 - Add-push-notifications.md index a3391a8..59dc4de 100644 --- a/backlog/tasks/task-3 - Add-push-notifications.md +++ b/backlog/tasks/task-3 - Add-push-notifications.md @@ -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 Implement web push notifications for friend arrivals, proximity alerts, and group activity. Include battery-friendly polling options. + +## Implementation Notes + + +## 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 + diff --git a/backlog/tasks/task-4 - PWA-offline-support.md b/backlog/tasks/task-4 - PWA-offline-support.md index eaaceca..0632c22 100644 --- a/backlog/tasks/task-4 - PWA-offline-support.md +++ b/backlog/tasks/task-4 - PWA-offline-support.md @@ -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 Implement service worker for offline caching. Store map tiles, venue data, and room state in IndexedDB. Sync when reconnected. + +## Implementation Notes + + +## 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 + diff --git a/backlog/tasks/task-6 - c3nav-indoor-integration.md b/backlog/tasks/task-6 - c3nav-indoor-integration.md index 44ec385..b6b279a 100644 --- a/backlog/tasks/task-6 - c3nav-indoor-integration.md +++ b/backlog/tasks/task-6 - c3nav-indoor-integration.md @@ -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.