Commit Graph

16 Commits

Author SHA1 Message Date
Jeff Emmett 8554a4cb1a feat: Add WebSocket sync server for real-time location sharing
- Add sync-server/ with Node.js WebSocket relay server
- Server handles join/leave/location/waypoint messages
- Auto-cleans stale participants (1hr) and empty rooms (24hr)
- Dockerized with Traefik labels for easy deployment
- Update .env.example with NEXT_PUBLIC_SYNC_URL
- Mark task-5 as Done in backlog

Deployed to https://sync.rmaps.online

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 22:00:55 -05:00
Jeff Emmett 39f8c83ba9 fix: Add coordinate validation to prevent Invalid LngLat errors
- Add isValidCoordinate() helper to validate lat/lng ranges
- Validate viewport center on map initialization
- Skip participants and waypoints with invalid coordinates
- Add validation to auto-center and fitToParticipants

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 21:28:34 -05:00
Jeff Emmett eeab19ceac fix: Clean up stale participant sessions from map
- Add cleanupStaleParticipants() to remove participants not seen in last hour
- Use persistent participant ID per browser/room to prevent ghost duplicates
- Fixes issue where old versions of yourself appeared on map reload

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 13:28:35 -05:00
Jeff Emmett 760e27564c feat: Add c3nav indoor map integration with floor selector
- Add c3nav tile proxy API route with session handling
- Add c3nav data API proxy for locations/bounds
- Create IndoorMapView component with MapLibre GL
- Add floor level selector (Level 0-4)
- Tap-to-set-position on indoor map
- Sync indoor positions between participants
- Easter egg: Triple-click Level 0 for "The Underground of the Underground"
- Fix race condition in useRoom when no user data

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 19:44:33 -05:00
Jeff Emmett 50e1feb62c Improve Meeting Point UX: add address search, fix Indoor Map
- Indoor Map now opens c3nav in new tab (iframe blocked by X-Frame-Options)
- Meeting Point modal now has:
  - "Use My Location" button that fetches GPS position on demand
  - Address search using OpenStreetMap Nominatim API
  - Search results dropdown with clickable options
  - Manual coordinates entry (hidden by default)
  - Selected location preview with coordinates

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 16:38:14 -05:00
Jeff Emmett 0a234f902a Fix Indoor Map button, add Meeting Point functionality, render waypoints
- Fix Indoor Map button being covered by participant panel (z-30)
- Implement Set Meeting Point modal with emoji selection
- Add waypoint markers rendering on the map
- Pass waypoints from room through DualMapView to MapView
- Fix TypeScript types for WaypointType

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 16:31:19 -05:00
Jeff Emmett 1a996931b5 Fix location sharing: opt-in by default, stop button clears location from map 2025-12-15 15:47:31 -05:00
Jeff Emmett 6d55e1c5a9 Reduce maxAge to 5 seconds for fresher location updates 2025-12-15 15:45:09 -05:00
Jeff Emmett d8e21b8cdf Fix location sharing: increase timeout, prevent auto-start cycling, graceful error handling 2025-12-15 15:44:34 -05:00
Jeff Emmett 45c4ebc602 Add auto-center on user location when first acquired 2025-12-15 14:44:40 -05:00
Jeff Emmett 3e5437fb14 Fix stale closure in location update callback + add debug logging 2025-12-15 14:42:32 -05:00
Jeff Emmett ff8dead7f2 Initialize backlog with feature tasks 2025-12-15 14:38:46 -05:00
Jeff Emmett 0a74de533d Simplify Traefik labels for compatibility 2025-12-15 14:33:28 -05:00
Jeff Emmett 23cbe6caa8 Replace Automerge with simple WebSocket sync
- Remove Automerge dependencies (WASM incompatible with Next.js)
- Add lightweight WebSocket-based sync layer
- Works in local-only mode until sync server deployed
- State persisted in localStorage for reconnection

Ready for deployment - sync server can be added later.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 12:59:22 -05:00
Jeff Emmett 530979978d Add real-time sync, c3nav integration, and PWA icons
Features:
- Automerge-based real-time room sync with CRDT
- c3nav indoor map integration for CCC events
- DualMapView component (auto-switches indoor/outdoor)
- useRoom hook for room state management
- PWA icons and manifest

Infrastructure:
- DNS configured for rmaps.online, www, and *.rmaps.online
- Cloudflare tunnel updated for wildcard subdomains
- Fixed Next.js security update to 14.2.28

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 12:50:28 -05:00
Jeff Emmett dc0661d58a Initial scaffold for rMaps.online
Collaborative real-time friend-finding navigation for events:
- Next.js 14 with TypeScript and Tailwind CSS
- MapLibre GL for outdoor OpenStreetMap rendering
- c3nav API client for CCC indoor navigation
- Zustand for state management
- Location sharing hook with privacy controls
- Room system with subdomain routing middleware
- Docker + docker-compose with Traefik labels

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 12:23:13 -05:00