Initial implementation of the public trips dashboard: - db/migrations/001..005: read-only viz_anon role + thin trips_viz_v1 view + three SECURITY DEFINER RPCs (trips_for_day, trips_for_range, list_cost_centres). Builds path on demand from position_history; coalesces missing cost_centre to 'Unassigned'. Smoke-tested against staging: 982 trips / 13 cost centres for 2026-04-29. - compose/: PostgREST v12 service + trips_web Caddy service. CORS allow-listed to the web FQDN; viz_anon role is the only authorization. - web/: Vite + React + TS SPA. deck.gl TripsLayer animated over PathLayer (whole route in low opacity), Mapbox GL dark base map, Zustand store, TanStack Query for fetching. Sidebar = date controls + cost-centre multi-select + vehicle drilldown. Timebar = scrubber with 1x/10x/60x/600x speeds. tsc + vite build clean. - README + design doc updated to match the verified schema (path lives in tracksolid.position_history, vehicle key is imei, no down-sampling needed at observed volume).
33 lines
844 B
JSON
33 lines
844 B
JSON
{
|
|
"name": "deckgl-tracksolid-web",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc -b && vite build",
|
|
"preview": "vite preview --host 0.0.0.0 --port 8080",
|
|
"typecheck": "tsc -b --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@deck.gl/core": "^9.0.27",
|
|
"@deck.gl/geo-layers": "^9.0.27",
|
|
"@deck.gl/layers": "^9.0.27",
|
|
"@deck.gl/react": "^9.0.27",
|
|
"@tanstack/react-query": "^5.51.0",
|
|
"date-fns": "^3.6.0",
|
|
"mapbox-gl": "^3.5.2",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-map-gl": "^7.1.7",
|
|
"zustand": "^4.5.4"
|
|
},
|
|
"devDependencies": {
|
|
"@types/mapbox-gl": "^3.4.0",
|
|
"@types/react": "^18.3.3",
|
|
"@types/react-dom": "^18.3.0",
|
|
"@vitejs/plugin-react": "^4.3.1",
|
|
"typescript": "^5.5.3",
|
|
"vite": "^5.3.4"
|
|
}
|
|
}
|