Files
parking_solution/wiki/index.md
T
julian 7de5c74500 wiki: record JWT key open question; defer ESP32 controller
- open-questions #7: symmetric vs. asymmetric JWT signing key (from the
  commit security review). Prefer RS256/EdDSA so verifying hosts hold only a
  public key — mirrors the ATECC608 / challenge-response "public key only"
  property. Decide before multi-host/multi-lane deployment.
- Mark esp32-custom-controller status: deferred per decision not to build
  device-level auth now; access control stays on UHPPOTE + network isolation
  (noted in open-questions #6).
- local-jwt-auth: document hardened secret handling + 8h expiry and the
  asymmetric-key pointer.
- Update index.md and append a log.md entry.
2026-06-14 07:45:14 +02:00

3.6 KiB

type, tags, updated
type tags updated
overview
parking
index
2026-06-14

Index

Content catalog for the wiki. Start at overview. Maintained on every ingest. Counts: 1 source · 14 entities · 10 concepts · 2 decision records.

Overview & navigation

  • overview — the top-level synthesis and entry point.
  • index — this catalog.
  • log.md — chronological record of ingests/queries/lints.

Sources

Entities — technology stack

  • technology-stack — the full stack table; all MIT/Apache/BSD, chosen to avoid lock-in.
  • fastify — Node backend; hosts device-driver plugins + auth; serves the SPA.
  • sqlite — local single-writer DB (WAL); limits & why it fits.
  • drizzle-orm — ORM; schemas port to PostgreSQL for remote sync.
  • turborepo — monorepo tool.
  • react-vite-spa — React/Vite frontend served by Fastify.
  • local-jwt-auth — fully local auth (JWT + bcrypt + role guard); forced by offline-first.

Entities — rejected alternatives

  • payload-cms — strong, but rejected over BSL license shift (the rug-pull cautionary case).
  • refine — dropped for plain React; UI too simple to justify a framework.
  • logto-zitadel-oidc — OIDC providers ruled out by offline-first.

Entities — hardware & devices

  • uhppote-controller — current access controller; cheap, tamper-evident, open-UDP, fixed firmware.
  • esp32-custom-controller — prevention-grade upgrade; device-level auth.
  • atecc608 — secure element; non-extractable signing key (host events + controller auth).
  • wiegand — reader standard feeding the controller directly (autonomous permit-holder path).
  • lpr-camera — edge-AI plate recognition; host-side casual-identity source.
  • bom — reference bill of materials (barrier, loops, controller, readers, payment, host, network).

Concepts — foundational forces

  • offline-first — no network dependency in core operation; what it forces (and doesn't).
  • threat-model — the operator-at-the-booth reframing; why encryption defends the wrong threat.

Concepts — integrity & anti-fraud

Concepts — device architecture & safety

Concepts — access control

Decisions

  • standing-decisions — settled decisions (stack, platform, integrity, access control, readers).
  • open-questions — 7 open items (6 procurement + JWT key choice); ESP32 device auth deferred.