bfe64032d8
Turborepo (pnpm workspaces) with all dependencies pinned to latest mutually-compatible versions: turbo 2.9, TypeScript 6, Fastify 5, React 19, Vite 8, better-sqlite3 12 + Drizzle ORM 0.45. Layout: - apps/server Fastify backend (local JWT auth + role guard, /health) - apps/web React 19 + Vite 8 operator SPA - packages/db Drizzle schema on SQLite/WAL; append-only events + users - packages/devices reader/printer/relay adapter interfaces (intent-only relay) - packages/shared shared domain types Architecture constraints from the design wiki are encoded in the scaffold: append-only hash-chained + signed event log, device-agnostic adapters, "a barrier is not a door" (relay expresses intent only), fully-local offline-first auth. wiki/ is an LLM-maintained Obsidian knowledge base (28 pages) ingested from the architecture & design notes, with its own maintenance schema. Verified: pnpm install, full turbo build (5/5), server boots and serves /health, drizzle-kit generates the initial migration.
29 lines
1.6 KiB
Markdown
29 lines
1.6 KiB
Markdown
---
|
|
type: entity
|
|
tags: [parking, hardware, bom, reference]
|
|
sources: [parking-system-architecture]
|
|
updated: 2026-06-14
|
|
---
|
|
|
|
# Reference BOM (recommended devices)
|
|
|
|
Reference bill of materials. Models to **verify for local availability (Albania/EU)**; the
|
|
payment terminal is dictated by the acquiring bank. (See [[parking-system-architecture]] §9.)
|
|
|
|
| Subsystem | Recommendation | Why |
|
|
| --- | --- | --- |
|
|
| Barrier operator | Magnetic Autocontrol / FAAC / CAME / Nice | Owns physical safety in firmware ([[barrier-not-a-door]]) |
|
|
| Induction loops | Feig / BEA / EMX | Safety + free-exit detection |
|
|
| Access controller | [[uhppote-controller]] now → ZKTeco later | Reader + relay; **isolate the VLAN** ([[network-isolation]]) |
|
|
| Permit readers | Nedap/Kathrein UHF, or Mifare → [[wiegand]] | Hands-free, or autonomous offline decisions |
|
|
| Casual identity | [[lpr-camera]] (Milesight, edge AI) | Plate = ticket + independent record |
|
|
| Ticket dispenser | Custom VKP80 | Parking-grade thermal/ESC-POS |
|
|
| Booth printer | Epson TM / Citizen (USB or network) | ESC/POS; one adapter covers both transports |
|
|
| Payment | Bank-certified P2PE standalone terminal + cash drawer | Keeps the app out of **PCI-DSS scope** |
|
|
| Host machine | Fanless industrial PC + UPS + [[atecc608]] | Reliability, power-loss safety, offline signing |
|
|
| Network | Managed VLAN switch, PoE+ | Isolate the open control protocol |
|
|
|
|
Open procurement-driving decisions live in [[open-questions]] (esp. lane topology, payment
|
|
subsystem). Payment subsystem detail: a standalone certified terminal keeps PCI scope out of
|
|
the application — [[open-questions]] #3.
|