docs: update PLAN.md phase 23.5, README features/hardware/status, new screenshots

- PLAN.md: Phase 23.5 documents all work from this session
- README: hardware table adds T3U, features add geocoding/offline maps/T3U, status updated
- pics/ui.png: desktop + mobile side-by-side screenshot (updated)

Co-authored-by: Copilot <[email protected]>
This commit is contained in:
Mathieu Moran
2026-08-10 03:43:09 -04:00
co-authored by Copilot
parent 58faded602
commit 51c6be3a94
2 changed files with 74 additions and 9 deletions
+27 -9
View File
@@ -28,7 +28,7 @@ i have a dream
Dashboard — mobile (390 px) and desktop (1280 px):
![Mobile dashboard](pics/ui.png)
![Mobile and desktop dashboard](pics/ui.png)
## Features
@@ -65,8 +65,13 @@ Dashboard — mobile (390 px) and desktop (1280 px):
storage pressure, upload backlog, temperature/power faults, and GPS loss while moving. Optional
ntfy delivery is available but remains disabled until configured
- 🛣️ **Trip history and route replay** — detects motion from OBD wheel speed with sustained GPS
displacement as a fallback, summarizes distance and speed in metric/imperial units, and replays
each route as a line on the offline map with a timestamped play/pause timeline and moving marker
displacement as a fallback, summarizes distance and speed in metric units (km / km/h), and replays
each route as a line on the offline map with a timestamped play/pause timeline, moving marker, and
live reverse-geocoded location name during scrubbing. Tap any trip row on mobile to load the route
- 🗺️ **Offline reverse geocoding** — a `/api/geocode` route on the Pi uses the `reverse_geocoder`
library (20 MB world dataset, no internet needed) for city/region, and upgrades to Nominatim
street-level when an internet uplink is available. Results are LRU-cached in-process. The browser
never calls any external geocoding service
- 🖥️ **Offline web UI** built with Flask, Jinja, Bootstrap 5, Socket.IO, Chart.js, and Leaflet,
all served locally with a shared responsive page shell
- 🔌 **Headless Pi deployment** as a self-restarting `systemd` service with a 10-second BCM2835
@@ -79,6 +84,7 @@ Dashboard — mobile (390 px) and desktop (1280 px):
| Raspberry Pi 3 Model B Rev 1.2 | Web UI host, logger, uploader, and WiFi hotspot |
| Waveshare SIM868 HAT | GNSS (GPS) + optional GSM/GPRS uplink, unused Bluetooth |
| USB OBD-II adapter | PL2303-based, ELM327-compatible (originally Bluetooth, switched to USB) |
| TP-Link Archer T3U (RTL8812BU) | USB WiFi dongle — AC1300 dual-band, replaces onboard wlan0 for hotspot + uplink |
| USB dashcam | Any brand — detected as generic USB mass storage |
| 2013 Toyota Yaris | The patient |
@@ -103,12 +109,24 @@ For the remote server (receives trip logs + dashcam uploads), see [server/README
## Project status
Phases 1–13, 15–23 are complete. The full responsive web UI redesign (Phase 23) is done:
desktop sidebar with collapse, mobile bottom tab bar, 6 live OBD stat cards, Overview stats
card (trips, distance, drive time, top speed, video count, active DTC), merged GPS+coords card,
reworked speed history chart (gradient, rolling window, session stats, auto-expand on desktop),
collapsible dashcam sections with mobile-friendly icon-only action buttons, compact trip history
with short mobile date format and icon-only Replay button, and live-wired DTC page.
Phases 1–13, 15–23, and 23.5 are complete. The full responsive web UI redesign (Phase 23) is done,
followed by a major polish and hardware upgrade pass (Phase 23.5):
- **Async dashcam import** with progress polling — no more mobile timeouts
- **Per-file Convert button** with real ffmpeg progress (reads `out_time_ms` via `-progress pipe:1`)
- **Odometer tracking** from OBD in every trip row and the overview dashboard
- **Separate upload toggles** for trips/logs vs dashcam videos
- **Download button** on Pi video files
- **Offline reverse geocoding** — `/api/geocode` route on the Pi uses `reverse_geocoder` (20 MB,
no internet needed); falls back to Nominatim for street-level accuracy when online. Browser never
calls any external service
- **Live location name** on dashboard GPS card (updates every ~50 m) and trip scrubber timeline
- **Recenter button** on dashboard and history maps
- **Imperial units removed** — metric only (km / km/h)
- **Mobile trip replay** — tap any trip row to load the route; Replay button kept on desktop only
- **TP-Link Archer T3U WiFi dongle** — RTL8812BU DKMS driver installed; all WiFi traffic moved to
`wlan1` (AC1300, dual-band). `wlan0` onboard stays silent as automatic fallback if dongle is
absent. Consistent phone-hotspot IP via `dhcp-client-id`
Phase 14 is partially complete: the Pi's hardware watchdog is deployed and reboot-verified.
Read-only-root storage hardening is deferred until persistent storage is moved off the SD root