• v1.2.0 1a3aaea933

    v1.2.0
    frontend / frontend (push) Successful in 1m19s
    pytest / test (push) Successful in 1m31s
    docker-image / build-and-push (push) Successful in 3m55s
    Stable

    tliu93 released this 2026-06-13 17:21:26 +02:00 | 1 commits to main since this release

    Replaces 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/write
      • POST /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.py output.
    • Multi-stage Dockerfile (node build → python runtime) + frontend CI workflow.
    • Explicit docker-compose.dev.yml dev stack (port 8001, -dev container
      names, prod-copy ./data DB).
    • 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 old auth.py /
      pages.py page routers.
    • docker-compose.override.yml (renamed to the explicit docker-compose.dev.yml).

    Fixed

    • Logout no longer floods GET /api/session with 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