Commit Graph

  • 0074e82a2a docs(wiki): activity-log explainability, dates/i18n, KP-300H barcode fix julian 2026-06-19 11:41:27 +02:00
  • bbf61c48df fix(ticket): 11-digit IDs — fix KP-300H barcode line-overflow julian 2026-06-19 11:35:13 +02:00
  • 00f3d141b6 feat: human + relative dates; fix language/theme toggle stale-context julian 2026-06-19 11:14:06 +02:00
  • f31e57b4ae feat: explainable activity log — reasons, subscriber names, snapshot gaps julian 2026-06-19 10:57:17 +02:00
  • 040c0ff4ca feat: tabbed setup, user metadata, light theme, scoped shift history julian 2026-06-19 10:09:18 +02:00
  • 8444bf34c3 feat(web): pop-out modal forms for setup/subscriptions/roles julian 2026-06-19 10:08:33 +02:00
  • 808fb26ab6 feat(web): UI component layer + dark-theme reskin julian 2026-06-19 10:07:39 +02:00
  • ef0ecadff9 fix(auth): block privilege escalation via role/user management julian 2026-06-19 01:27:02 +02:00
  • d0841c8601 feat(auth): dynamic RBAC — composable roles + resource×CRUD permissions julian 2026-06-19 01:19:28 +02:00
  • d71ba82999 feat(booth): payment receipt / exit voucher — transparency slip + CP852 fixes julian 2026-06-18 20:46:38 +02:00
  • 9c9f777784 docs(wiki): record the two configured printers (Cashino at lane, Rongta at booth) julian 2026-06-18 20:05:40 +02:00
  • 486f8deae6 fix(shift): update Z-report title to Albanian translation julian 2026-06-18 20:04:13 +02:00
  • 3e6773a6d5 fix(devices): Cashino printer — ping-only driver (no false status) + Albanian role wording julian 2026-06-18 20:00:42 +02:00
  • cf1ff5676d feat(tariff): V2 — legacy-parity pricing (time-of-day, category, seasonal, flat) julian 2026-06-18 20:00:13 +02:00
  • 91cc79b14e feat(web): adopt TRM design-system tokens (tokens only) julian 2026-06-18 19:46:56 +02:00
  • dfa76346d6 feat(tariff): complete the progressive ladder — require open-ended last block, hours-based composer julian 2026-06-18 16:58:47 +02:00
  • c9a2ef81a9 fix(tariff): forbid backdated effectiveFrom — versioning was retroactive julian 2026-06-18 16:58:36 +02:00
  • b8ddda86e7 feat(subscription): RFID enrollment, any-credential exit, prepaid booth handling julian 2026-06-18 16:26:48 +02:00
  • bba988c4e8 feat(subscription): QR credentials — operator-choose (QR-only now), auto-generate, multi-month, printed card julian 2026-06-18 14:48:38 +02:00
  • 5697137c52 feat(subscription): rename permit→subscription + monthly pricing julian 2026-06-18 13:15:04 +02:00
  • ca8c7f2fa2 fix(exit): stuck active session — paid ticket with no vehicle_exit julian 2026-06-18 13:14:45 +02:00
  • f87e4c0d6b feat(devices): live device-status footer across all categories julian 2026-06-18 13:14:36 +02:00
  • 4e2e4feedb feat(shift): site-wide single-open shift + booth money-path gate julian 2026-06-18 12:13:17 +02:00
  • 48660d3ec8 docs(wiki): reconcile with session — booth console, i18n, live WS julian 2026-06-18 11:50:58 +02:00
  • 14c83e182a feat(web): i18n with react-i18next — Albanian default, English second julian 2026-06-18 11:47:39 +02:00
  • 445bca0bf6 feat(auth): per-user UI language preference (sq default, en) julian 2026-06-18 11:47:30 +02:00
  • 062feeae2f docs(wiki): update index + log for booth console, drawer, and tariff research julian 2026-06-18 11:05:43 +02:00
  • 50a3095ef3 feat(shift): cash drawer balance carried across shifts + admin cash movements julian 2026-06-18 11:05:36 +02:00
  • eb3dc18e67 feat(booth): active sessions panel + audited barrier re-open julian 2026-06-18 11:05:26 +02:00
  • 06dab1e790 feat(booth): pay-on-foot at the booth — ticket lookup, pay, exit, voucher, snapshots julian 2026-06-18 11:05:10 +02:00
  • 9956488fd5 chore: removed graphify julian 2026-06-18 11:03:45 +02:00
  • 49df2015c8 feat(web): frontend foundation — Tailwind terminal theme, Query, Router, Zustand + live booth screen julian 2026-06-18 11:00:42 +02:00
  • c2f06a5d2a feat(server): live booth WebSocket feed (/api/ws) julian 2026-06-18 11:00:22 +02:00
  • 58d8f06ba0 docs(wiki): tariff research — legacy ParkSQL2017 schema, time-tiers & validation/sponsorship design julian 2026-06-18 10:59:21 +02:00
  • 71aaad03b9 exit: open free within entry-grace, no pay-station visit julian 2026-06-17 12:17:28 +02:00
  • 727c62da90 ticket: site metadata header + scannable Albanian ticket; widen barcode julian 2026-06-17 12:17:21 +02:00
  • 1efa77bf56 devices: pool-of-spaces model — drop lane, per-relay direction camera-driver-and-wsl-net julian 2026-06-16 20:29:38 +02:00
  • 15d3e1ba08 update .gitignore and CLAUDE.md for graphify integration; add settings.json for pre-tool hooks julian 2026-06-16 14:34:20 +02:00
  • ff3b011fe0 qr-reader: reply Connection: close (fixes ~10s beep delay) julian 2026-06-16 12:56:10 +02:00
  • 5705098054 devices: stub-access driver (bench-test flows without a relay) julian 2026-06-16 12:50:05 +02:00
  • 68d61f2d99 qr-reader: gee-qr-reader driver — assign in wizard, resolve lane by serial julian 2026-06-16 12:36:58 +02:00
  • 04135b27cf qr-reader: register all server-language extensions (reader posts .jsp) julian 2026-06-16 12:30:00 +02:00
  • 392d44d842 server: GEE/Dingtian QR reader endpoint + synchronous ReadOutcome julian 2026-06-16 12:12:09 +02:00
  • f67c1ead87 wiki: ER80 protocol = HTTP GET poll + JSON verdict (from QRCode SDK) julian 2026-06-16 12:05:05 +02:00
  • bf37106c5c wiki: ingest GEE-QR-ER80 QR access reader datasheet julian 2026-06-16 08:22:23 +02:00
  • e579fe5b6e server+web: capacity / FULL gate (occupancy fold + transient refuse) julian 2026-06-16 08:13:06 +02:00
  • 644bfa1462 server+web: shifts — open/close + signed Z-report (manned mode) julian 2026-06-16 08:01:59 +02:00
  • 3429642edb permits: admin CRUD (route + UI) julian 2026-06-15 19:53:03 +02:00
  • c24d99b0f4 server: permit entry/exit branch + read dispatcher julian 2026-06-15 19:47:01 +02:00
  • b4d0dfadd6 tariff composer: admin publishes rate-card versions (pay station now operable) julian 2026-06-15 19:35:33 +02:00
  • f18e28eeca server: pay station + fee calc — full transient loop now passes julian 2026-06-15 19:15:53 +02:00
  • a8c6d6e714 auth: JWT valid until logout (drop 8h expiry) julian 2026-06-15 19:15:53 +02:00
  • 2a36830880 server: exit flow (pay-on-foot validation) julian 2026-06-15 18:57:14 +02:00
  • 2696d281ce server: transient entry flow (button -> ticket -> signed entry -> open) julian 2026-06-15 18:32:40 +02:00
  • 648d3254d6 wiki: valet / over-capacity mode; 'full' is a soft operator policy julian 2026-06-15 18:32:40 +02:00
  • 8c2cf93067 db: business-layer schema — ledger/device event split, tariffs, permits, sessions julian 2026-06-15 18:13:35 +02:00
  • 9a4c7ee27b wiki: split signed business ledger from device telemetry julian 2026-06-15 18:08:56 +02:00
  • 8a8e74561d wiki: design the business layer (session, tariff, permit, vision, shift, ops) julian 2026-06-15 17:41:38 +02:00
  • 2ab5a39a57 Permanent WSL2 dev fix for multi-subnet source-address trap julian 2026-06-15 16:17:59 +02:00
  • fa65b2df86 Real Hikvision/Dahua camera driver; gate Backend-push-IP on capability julian 2026-06-15 16:17:49 +02:00
  • 59bfe2013f Event log: resolve input_received lane from the firing device main julian 2026-06-15 12:51:21 +02:00
  • f5fd61984a Dingtian web password: set the admin's chosen password, verified julian 2026-06-15 12:26:34 +02:00
  • 7db5cfa0e4 Dingtian: close password-less string-protocol relay-fire hole julian 2026-06-15 11:29:55 +02:00
  • add5fc0166 Append-only signed event log; persist Dingtian input pushes julian 2026-06-15 11:29:23 +02:00
  • 39d4bac419 Setup: manage multiple device instances per category (add/remove) julian 2026-06-14 20:39:39 +02:00
  • b2a0471b08 Rongta 80mm printer: driver, role-based failover, live status monitoring julian 2026-06-14 20:26:45 +02:00
  • 2a86e578a8 Dingtian harden(): rotate the admin/admin web login (cosmetic) julian 2026-06-14 19:00:42 +02:00
  • 382c32f2bc Setup wizard: show + override the backend push IP (multi-NIC hosts) julian 2026-06-14 18:47:23 +02:00
  • 7fd407ac82 Harden Dingtian: authenticated binary relay + disable unused channels julian 2026-06-14 18:34:35 +02:00
  • 0375227a16 Setup wizard: Test connection + Save & configure julian 2026-06-14 16:59:36 +02:00
  • 3294f188dd Dingtian input push: HTTP Digest auth + auto-config on assign julian 2026-06-14 16:39:08 +02:00
  • 23919164ee Dingtian input HTTP-push to backend (no polling) julian 2026-06-14 15:10:50 +02:00
  • 355026dcf7 Remove UHPPOTE/ZKTeco; Dingtian is the only access driver julian 2026-06-14 14:28:52 +02:00
  • 1b55e2034d Dingtian relay driver — resolves the ticket-first entry blocker julian 2026-06-14 14:15:00 +02:00
  • 4319fb86dc wiki: Dingtian relay decision, HTTP-over-MQTT, unmanned direction julian 2026-06-14 13:27:01 +02:00
  • dbf1fa17d7 wiki: document dev environment (WSL networking, workflow) julian 2026-06-14 13:09:35 +02:00
  • 6df9927b94 Add root pnpm seed:admin script julian 2026-06-14 11:32:21 +02:00
  • 0a8258a672 seed-admin: prompt for username (default "admin") julian 2026-06-14 11:31:03 +02:00
  • 2d55d40405 Fix dev server hang (broken dev script + IPv6 proxy stall) julian 2026-06-14 11:27:07 +02:00
  • 64d5e45f11 Cookie-based auth/authz with CSRF; remove auth bypass julian 2026-06-14 10:45:38 +02:00
  • 77606da2c9 UHPPOTE hardware bring-up + entry-flow blocker julian 2026-06-14 10:29:43 +02:00
  • a0e0fd9118 Add device discovery (UHPPOTE LAN scan) to setup julian 2026-06-14 08:21:27 +02:00
  • 7438c0bdc2 Add real UHPPOTE access driver via official uhppoted lib julian 2026-06-14 08:12:27 +02:00
  • 72ba4099ea Device-agnostic driver registry + first-run setup julian 2026-06-14 07:59:46 +02:00
  • 7de5c74500 wiki: record JWT key open question; defer ESP32 controller julian 2026-06-14 07:45:14 +02:00
  • 94dd3fcff4 Harden JWT auth: require strong secret, expire tokens julian 2026-06-14 07:42:22 +02:00
  • bfe64032d8 Initial scaffold: Turborepo monorepo + design wiki julian 2026-06-14 00:34:11 +02:00