public/sw.js: network-falling-back-to-cache for RainViewer radar tile requests specifically (nothing else — the app itself is served by the same local server that's already the offline resource in the van, so there's no app-shell to precache). Registered from layout.erb, a no-op where it can't register (insecure context) rather than an error. Verified: registers and controls the page, tiles get cached on a normal fetch, cache.match() correctly retrieves them by the same request. CDP's network-blocking simulation doesn't interact cleanly with Service Worker fetch interception (a known tooling quirk, not specific to this), so the actual offline fallback path is the standard try/catch pattern, verified by code review rather than a simulated-offline screenshot.
4.7 KiB
TODO — implementation ideas
Ideas for offline use in a camper van. Implement incrementally, grouped by topic.
The local server has access to both the vehicle’s hardware and offline data — the vision is to grow it into a complete offline control center: resources, data, and independence from connectivity.
Offline data and cartography
-
❏ Offline vector tiles (PMTiles/MBTiles) for Europe/world via Planetiler or MapTiler
-
✓ Shaded relief / DEM layer — hillshade toggle in the sidebar, sourced from public Terrarium tiles online; reads
data/terrain.pmtilesfor offline if one’s been generated (see docs/development.adoc), otherwise the toggle is online-only for now-
❏ Terrain slope readout for parking (numeric, not just visual shading)
-
-
❏ Contour lines from OSM for hikes and mountain passes
-
❏ Overpass/OSM scripts to extract POIs (drinking water, dump stations, LPG, public toilets, laundromats, shops, springs)
-
❏ Import Park4Night / iOverlander / Freecampsites data
-
❏ Kiwix/ZIM offline Wikipedia linked to POI GPS coordinates
-
✓ Cache weather forecast when temporarily connected — Open-Meteo 3-day forecast in the Radar flyout, last successful fetch cached in localStorage as a fallback when offline
-
✓ Cache the radar tile images too —
public/sw.js, network-falling-back-to-cache for RainViewer tile requests, registered from layout.erb
-
NPS visual style
-
❏ Map Park4Night/OSM place types to NPS pictograms (campground, primitive camp, drinking water, dump station, viewpoint, picnic table) for instant recognition without reading text
-
❏ Restyle popovers, side panels, and point detail views after the NPS Unigrid layout system (Massimo Vignelli) with Frutiger/Rawlinson Roadside-style typography
-
✓ Top black banner (full width): "MAPTOOL" on the left, live map-center coordinates in the center, offline-data status dot on the right, white sans-serif type — DEM elevation and a hamburger menu skipped (no DEM layer yet; sidebar isn’t mobile-collapsed, so nothing for a hamburger to reveal)
-
❏ Point detail/sidepanel: black header banner with white location name and an NPS pictogram in the corner; amenities (water, waste, power, slope) shown as a pictogram grid, no extra text; action buttons for "route here" (Valhalla), "start leveling", "save offline"
-
✓ Filter panel as a "Unigrid Matrix" — an icon grid to toggle categories on/off, styled like the legend on an official NPS paper map, instead of plain dropdowns
-
-
❏ Custom vector style (MVT/MapLibre) using the NPS color palette — muted natural tones for forests, water, and contours — so POIs and routes stand out at high zoom
-
❏ Landuse & protections: distinct styling for national parks, nature reserves (translucent green/gray-green), military zones, and private land (important for wild camping)
-
✓ Elevation-tinted terrain — a
color-relieflayer (hypsometric tint, this app’s own green→brown→gray palette) under the hillshade layer, same "Terrain shading" toggle -
✓ Road hierarchy: clearly distinguish paved roads from unpaved/gravel/track — critical for knowing if the camper can get there
-
Main menu reorganization (4 modules)
-
❏ Explorer: place filters (Park4Night + OSM layers: water, waste, LPG, showers); map layers (contours, hillshade, satellite cache)
-
❏ Navigation & route: offline router (Valhalla) with vehicle dimensions (height, weight, width); route elevation profile and isochrones
-
❏ Offline hub: manager for downloaded PMTiles (country vector maps); downloaded Wikipedia archives; cached radar and weather
-
❏ Camper & HW: level gauge (wheel-chock leveling); solar calculator (sun path on the map); telemetry (Victron / Home Assistant)
Custom layers & data
-
✓ GPX/GeoJSON drag-and-drop import (Wikiloc, Komoot, own GPX tracks — also FIT), auto-styled by category with a generated elevation profile — KML not supported (only GPX/FIT/GeoJSON/.zip)
-
❏ User overlay: offline drawing of custom points/polygons with notes (e.g. "turning space for a long vehicle", "narrow gate", "good swimming spot")
-
❏ Offline satellite tile caching (e.g. ESRI) for a selected route area — key for judging surface quality and obstacles when wild camping
Nice to have (later)
Deprioritized for now — revisit after the sections above land.
Vanlife features
-
❏ Offline routing (Valhalla/OSRM) with vehicle parameters (height, weight, width)
-
❏ Solar calculator — sun path for location/date, shadows from surroundings, camper orientation
HW integration
-
❏ Level gauge from IMU (ESP32/RPi) — camper tilt, wheel-chock leveling calculation
-
❏ Victron/Home Assistant via MQTT or WebSocket — battery SoC, tank levels, temperatures
-
❏ Plot GPS track with historical battery/speed data