--- type: entity tags: [parking, stack] sources: [parking-system-architecture] updated: 2026-06-14 --- # Technology Stack The standing stack for the parking system. Every choice is **MIT/Apache/BSD** — a deliberate constraint to avoid vendor lock-in and license rug-pulls (see [[payload-cms]] for the cautionary case). (See [[parking-system-architecture]] §2.) | Layer | Choice | License | | --- | --- | --- | | Monorepo | [[turborepo]] | MIT | | Backend | [[fastify]] (Node.js) | MIT | | Frontend | [[react-vite-spa]] | MIT | | Local database | [[sqlite]] (`better-sqlite3`) | Public domain / BSD | | ORM | [[drizzle-orm]] (+ Drizzle Kit) | Apache 2.0 | | Remote sync target | PostgreSQL (when implemented) | PostgreSQL License | | Auth | [[local-jwt-auth]] (`@fastify/jwt` + bcrypt + roles) | MIT | ## Why these One language end-to-end (Node), a mature ecosystem for device I/O (`serialport`, `node-hid`, `escpos`), and a database whose only real limit (single-writer) a parking workload never approaches. The stack is shaped by [[offline-first]]: nothing depends on a network at runtime. See [[standing-decisions]] for the full list of settled decisions.