feat: add remote device settings portal and Pi hot reload

- add /settings/device portal page and portal device-config GET endpoint
- add portal navigation and client-side device settings editor UI
- hot-reload Account/Car display config after local saves and server syncs
- document portal workflow and Phase 25.5b completion
- add runtime reload tests for account, car, and sync callback

Co-authored-by: Copilot <[email protected]>
This commit is contained in:
Mathieu Moran
2026-08-10 17:34:22 -04:00
co-authored by Copilot
parent c4ccc3efb9
commit 585da18225
12 changed files with 383 additions and 22 deletions
+9 -6
View File
@@ -55,12 +55,15 @@ Dashboard — mobile (390 px) and desktop (1280 px):
Dashcam videos upload in resumable 40MB chunks (works around tunnel body-size limits and keeps
the Pi's memory footprint flat regardless of file size); a UI toggle can pause dashcam uploads
independently while trip logs keep syncing
- 🌐 **Remote web portal** — a full read-only browser portal at the same server URL (Phase 24):
login-protected (Flask-Login + bcrypt), trip history with OSM/CARTO live map and route replay,
dashcam archive browsing with inline video player and Range-request seeking, overview stats
dashboard, and delete buttons for trips and clips. Shared `history.js` code runs on both the
Pi and the server — tile source and zoom limits are configured per-deployment via HTML data
attributes. Accessible at `https://your-cloudflare-tunnel-url/`
- 🌐 **Remote web portal** — a login-protected browser portal at the same server URL (Phase 24+):
trip history with OSM/CARTO live map and route replay, dashcam archive browsing with inline
video player and Range-request seeking, overview stats dashboard, delete buttons for trips and
clips, and a device-settings page for editing the synced owner/car/avatar values that the Pi
pulls from the server. When the Pi has **Sync with server** enabled, those identity changes hot-
reload into the running local UI on the next successful sync instead of waiting for a manual
restart. Shared `history.js` code runs on both the Pi and the server — tile
source and zoom limits are configured per-deployment via HTML data attributes. Accessible at
`https://your-cloudflare-tunnel-url/`
- 📡 **Optional cellular fallback** through the SIM868 for small trip-log uploads when normal
WiFi/Ethernet is unavailable (dashcam video stays off cellular)
- 🗄️ **Motion-aware local-first SQLite logging** — five-second motion checks without five-second