-
v1.2.0
Stablereleased this
2026-06-13 17:21:26 +02:00 | 1 commits to main since this releaseReplaces the server-side Jinja pages with a same-origin React single-page app,
backed by a new JSON API. Same container, same origin (no CORS); auth still
rides the existing Argon2 + server-side session cookie.Added
- React SPA (Vite + TypeScript + Mantine + TanStack Query + React Router),
served same-origin from FastAPI as static build output. - JSON API for the SPA:
GET/PUT /api/config— config read/writePOST /api/config/smtp/test— SMTP test action- read-only data query endpoints (location / poo)
- single-record CRUD (
PATCH/DELETE) - session/auth endpoints (
/api/session, login, logout, forced password change)
- Data visualization: Leaflet heatmap home page (viewport-normalized
intensity, dark basemap) + records-management UI (paginated lists, edit/delete
modals) — takes over what Grafana used to do. - Typed OpenAPI client generated from
scripts/export_openapi.pyoutput. - Multi-stage Dockerfile (node build → python runtime) + frontend CI workflow.
- Explicit
docker-compose.dev.ymldev stack (port 8001,-devcontainer
names, prod-copy./dataDB). - Dark-mode toggle, Feather-icon nav, Grafana-style quick time-range presets.
Changed
- Browser endpoints reuse the existing session-cookie auth with presence-only
CSRF (X-CSRF-Token). - README + architecture-overview updated for the SPA reality; retire the
"no frontend/backend split" and "Grafana as visualization" constraints.
Removed
- Jinja templates (
base/config/home/login.html) and the oldauth.py/
pages.pypage routers. docker-compose.override.yml(renamed to the explicitdocker-compose.dev.yml).
Fixed
- Logout no longer floods
GET /api/sessionwith 401s — the session probe and
the login endpoint own their 401s, breaking the redirect→refetch loop. - Heat-layer white-screen crash on first load after login.
Notes
- The device ingestion endpoint stays on bare API until M3 (token auth).
- TOTP 2FA for the now public-facing dashboard is recorded under
Future Ideas — not scheduled.
Downloads
- React SPA (Vite + TypeScript + Mantine + TanStack Query + React Router),