-
b1c4109045
docs(wiki): document scripts/booth.sh in container-deployment
julian
2026-06-24 20:38:44 +02:00
-
50dd554b43
feat(deploy): booth.sh wrapper over the compose files + update flow
julian
2026-06-24 20:38:44 +02:00
-
6d7682ab4a
docs(wiki): printer USB transport + open-question for the provisioning
julian
2026-06-24 20:32:24 +02:00
-
793b8d83ee
fix(setup): hide transport-irrelevant printer fields (USB vs Network)
julian
2026-06-24 20:32:17 +02:00
-
7366ad19cb
feat(printer): USB transport behind the ESC/POS render layer
julian
2026-06-24 20:32:10 +02:00
-
5a5fedf4f4
docs(wiki): booth bring-up fixes — relay password, secret re-merge, lamp concurrency
julian
2026-06-24 19:11:49 +02:00
-
830993bcb8
fix(button-light): serialize relay sends + hot-reload the lamp config
julian
2026-06-24 19:04:18 +02:00
-
fd15988a73
refactor(setup): split the controller form into Outputs and Inputs sections
julian
2026-06-24 19:04:05 +02:00
-
420542ce10
fix(setup): add Dingtian relay-password field + secure secret re-merge on test
julian
2026-06-24 19:03:53 +02:00
-
2915d141aa
feat(devices): radar presence input + button-light output on the controller
julian
2026-06-24 11:45:22 +02:00
-
215a3ac405
fix(ci): publish desktop installers via Gitea Release, not upload-artifact
desktop-dev
julian
2026-06-24 10:32:29 +02:00
-
e0cfeb5e71
fix(ci): unsigned desktop build must disable updater artifacts
julian
2026-06-24 10:24:47 +02:00
-
8129b63a8c
feat(profile): self-service name/email/password + desktop installers in CI
julian
2026-06-24 10:15:34 +02:00
-
f9bd586265
docs(wiki): session context — first booth go-live (user split, Docker deploy, web access)
julian
2026-06-23 19:29:36 +02:00
-
aa546235fb
docs(wiki): container-deployment — relative /api + Caddy proxy web-access section
julian
2026-06-23 19:15:44 +02:00
-
c637b2783c
feat(deploy): Caddy reverse proxy — clean port-80 URL, server internal
julian
2026-06-23 19:15:23 +02:00
-
77b2acb1ca
fix(docker): SPA must use same-origin API base in the server image (CORS)
julian
2026-06-23 18:58:53 +02:00
-
10923164ad
fix(compose): pass COOKIE_SECURE, WS_ALLOWED_ORIGINS, EVENT_SIGNING_KEY, VISION_ENABLED
julian
2026-06-23 18:37:52 +02:00
-
0a22eab4a8
fix(ci): install uv via official script, not astral-sh/setup-uv action
julian
2026-06-23 15:59:10 +02:00
-
9d65099d9b
docs(wiki): appliance provisioning runbook — booth unit 1 hardened (LUKS+TPM+SecureBoot+GRUB)
julian
2026-06-23 15:53:56 +02:00
-
8155ff456b
feat(deploy): Docker images for server (API+SPA) and vision + branch-aware build pipeline
julian
2026-06-23 15:07:52 +02:00
-
492a08a079
fix(ci): lint must depend on ^build (resolve workspace dep types)
julian
2026-06-22 20:17:17 +02:00
-
8a437d0c4b
feat(booth): cancel wrongly-printed ticket (signed void) + refused-vs-anomaly display; fix CI uv
julian
2026-06-22 20:13:21 +02:00
-
65328b8c11
feat(anpr): subscriber-entry bridge + admin disable toggle
julian
2026-06-22 19:49:18 +02:00
-
411572511d
docs(camera): lane presence + ANPR subscriber-entry bridge design
julian
2026-06-22 19:12:49 +02:00
-
a2bdf99db2
fix(lane-status): TTL 5s -> 30s after measuring the real re-fire pattern
julian
2026-06-22 18:16:42 +02:00
-
89542d4ab6
fix(lane-status): drop busy TTL 90s -> 5s (camera re-fires ~1s)
julian
2026-06-22 17:58:25 +02:00
-
e0b9442acc
feat(booth): live lane busy/free barrier lights from camera vehicle detection
julian
2026-06-22 17:42:54 +02:00
-
6f4e390c05
feat(dev): bind Vite to 0.0.0.0 for LAN access (phone over wifi)
julian
2026-06-22 17:34:35 +02:00
-
df6a1ca63a
docs(camera): correct the "dead camera" conclusion — root cause was undrawn detection area
julian
2026-06-22 16:53:22 +02:00
-
547061edf9
docs(camera): Hik event-push gotchas + dead-camera diagnostic method
julian
2026-06-22 12:50:44 +02:00
-
b7300ec080
fix(hik-alarm): listen on all methods + skippable source-IP guard (WSL)
julian
2026-06-22 11:02:17 +02:00
-
461275521d
fix(setup): render boolean config fields as a checkbox (not a text box)
julian
2026-06-22 10:39:10 +02:00
-
3db8f517d3
feat(hik-alarm): record rejected pushes + a read endpoint to see arrivals
julian
2026-06-22 10:28:09 +02:00
-
6133923094
feat(camera): Hikvision Alarm Server event-push ingress (discovery-first)
julian
2026-06-22 10:02:35 +02:00
-
7680d9a0ed
feat(recycle-bin): soft delete + restore for master data
julian
2026-06-22 09:33:54 +02:00
-
3527f48d76
refactor(reports): top-level /reports section in the header, not a Setup tab
julian
2026-06-22 00:20:30 +02:00
-
5a5f5c554b
feat(reports): admin Reports dashboard — ledger-first charts
julian
2026-06-22 00:16:07 +02:00
-
742653aefb
feat(setup): "Test ANPR" probe on ANPR-enabled cameras
julian
2026-06-22 00:02:31 +02:00
-
66c1291578
docs(deploy): COOKIE_SECURE=0 runbook for the plain-HTTP appliance
julian
2026-06-21 23:52:21 +02:00
-
7629d5d7b1
fix(auth): make the Secure cookie flag fail-safe (default on)
julian
2026-06-21 23:50:40 +02:00
-
2fb947e908
test(vision): fix stub-mode tests; close the testing-gap wiki note
julian
2026-06-21 16:25:21 +02:00
-
cae900afd2
test(web): Phase 4 — booth formatters + focus-independent scanner hook
julian
2026-06-21 16:23:15 +02:00
-
7e912e193b
test(server): Phase 3 — HTTP route integration (auth + RBAC guards)
julian
2026-06-21 16:20:14 +02:00
-
352c643009
test(devices): Phase 2 — ESC/POS byte stream + printer routing
julian
2026-06-21 16:17:51 +02:00
-
5e9be16f65
test(server): Phase 1 — server-core suites (occupancy, pay, exit, shift)
julian
2026-06-21 16:15:56 +02:00
-
0985b86fa7
test(server): add fresh-SQLite test harness + anti-fraud core suites
julian
2026-06-21 15:20:38 +02:00
-
3ed785c33e
feat(booth): open the pay/exit modal on a hardware scan regardless of focus
julian
2026-06-21 15:03:01 +02:00
-
35c10a7310
feat(shifts): /shift→/shifts, clickable activity log (shared event-detail), booth-style full-height layout
julian
2026-06-21 14:58:50 +02:00
-
2a9e6846a1
fix(nav): header "Turni"→"Turnet" (plural); remove duplicate Setup shifts tab
julian
2026-06-21 14:47:00 +02:00
-
051b440627
feat(nav): promote Subscriptions to a top-level section with its own tabs
julian
2026-06-21 14:43:58 +02:00
-
eb47016ae3
feat(shift): confirm-before-close with X-report + split tickets vs subscriptions; fix dark <select>
julian
2026-06-21 14:30:14 +02:00
-
78d1f6808a
feat(subs): admin can correct a subscription's plan VERSION
julian
2026-06-21 14:08:58 +02:00
-
31f116a068
fix(print): center the out-of-window slip barcode again
julian
2026-06-21 13:52:42 +02:00
-
663bf0e925
fix(print): out-of-window slip Code128 was too wide to print — width 2 + left-align
julian
2026-06-21 13:44:01 +02:00
-
8acef0464c
fix(subs): price out-of-window charge from minutes actually parked, not a fixed entry stamp
julian
2026-06-21 13:34:35 +02:00
-
df5caf8d87
feat(subs): scannable out-of-window slip + two-step booth flow
julian
2026-06-21 13:12:05 +02:00
-
0cbae94842
feat(desktop): wire updater endpoint to self-hosted Gitea + document Tauri WS origin
julian
2026-06-21 12:51:11 +02:00
-
ae5c122980
ci(gitea): CI checks + tag-triggered signed Tauri desktop release
julian
2026-06-21 12:33:20 +02:00
-
d0536da3d7
feat(desktop): Tauri v2 kiosk shell — maximized window, prod right-click block, auto-update + code-signing
julian
2026-06-21 12:21:49 +02:00
-
ae736a9e3e
feat(shift): current shift in the list + modal actions; full-width layout everywhere
julian
2026-06-20 23:44:27 +02:00
-
1b54775b4d
feat(shift): two-pane shift history — list + per-shift activity log, timeframe presets
julian
2026-06-20 21:56:34 +02:00
-
f2734641b2
feat(subs): print an advisory "out-of-window" slip at early entry
julian
2026-06-20 20:47:45 +02:00
-
de858e91f4
i18n: translate sub.refused.unpaidWindow reason (sq + en)
julian
2026-06-20 20:39:53 +02:00
-
294ca85ded
fix(subs): out-of-window charge was a phantom 12h span (4,100 ALL bug)
julian
2026-06-20 20:37:57 +02:00
-
eafbc3ddbb
feat(booth): badge subscriber out-of-window entries in the live feed
julian
2026-06-20 20:32:12 +02:00
-
36f30d39ff
feat(plans): reactivate + delete-when-unused; card layout fixes overlap
julian
2026-06-20 20:27:36 +02:00
-
488dcb5e4e
feat(plans): show hours, period/currency, and subscriber dependencies in the plan list
julian
2026-06-20 20:14:30 +02:00
-
c64457020f
fix(subs): resolve the plan version at the SALE instant, not validFrom
julian
2026-06-20 19:55:29 +02:00
-
ff04ec10be
feat(subs): add a "how many periods" count that drives the end date
julian
2026-06-20 19:46:06 +02:00
-
e0e218fa61
refactor: plan timeframes use a per-day-of-week picker (like the V2 tariff)
julian
2026-06-20 18:43:21 +02:00
-
21bd0f6227
fix(db): point db:migrate at the live appliance DB by default
julian
2026-06-20 18:32:44 +02:00
-
53e1e7b25c
feat: subscription v2 — quantity pricing, plan timeframes (tariff bridge), reserved spots
julian
2026-06-20 18:22:50 +02:00
-
fd4608a8f1
feat: subscription plan catalog — config-defined pricing, dated spans, no typed amounts
julian
2026-06-20 17:13:42 +02:00
-
052da8c3a7
i18n: relabel X/Z report UI to plain language (keep X/Z in code)
julian
2026-06-20 16:51:54 +02:00
-
cb68cbafdb
feat: mid-shift X-report (read-only takings-so-far)
julian
2026-06-20 16:22:55 +02:00
-
2835f78635
feat: re-model drawer cash as directional vouchers (Mandat Arkëtimi / Pagese)
julian
2026-06-20 16:18:26 +02:00
-
a20400c2c5
fix: record subscription sale as a signed payment (close off-book hole)
julian
2026-06-20 15:46:17 +02:00
-
cdb55a8652
feat: show recognized plate in live feed + active sessions
julian
2026-06-20 15:45:57 +02:00
-
b0c9ba0f8c
docs(wiki): per-increment vs per-hour tariff gotcha + composer UX idea
julian
2026-06-20 15:44:12 +02:00
-
9a1feeeb20
fix(tariff): reject stepped base combined with time/seasonal tiers
julian
2026-06-20 14:03:22 +02:00
-
cc507f490f
feat(tariff): stepped ("up-to") pricing mode — total-by-duration
julian
2026-06-20 12:33:27 +02:00
-
3d02134711
feat(tariff): Tariff Lab — pure session-pricing simulator
julian
2026-06-20 12:05:30 +02:00
-
a4712774ab
feat(booth): overstay sessions, top-up pricing, and session/feed filters
julian
2026-06-20 11:48:54 +02:00
-
918f76fbef
fix(booth): make the Active Sessions list scrollable
julian
2026-06-19 17:30:44 +02:00
-
9ec644811a
feat(vision): surface the recognized plate in the booth UI
julian
2026-06-19 17:23:32 +02:00
-
ecaaefd899
refactor(vision): ANPR rides the entry/exit snapshot, drop polling reader
julian
2026-06-19 16:53:43 +02:00
-
4af8b56dda
feat(vision): configurability — SetupWizard ANPR toggle, footer health chip, env docs
julian
2026-06-19 16:41:29 +02:00
-
540b333b06
feat(vision): persist every recognized plate + snapshot as telemetry (non-blocking)
julian
2026-06-19 16:29:10 +02:00
-
7e086ff0d7
feat(vision): wire ANPR into the read bus via VisionReader
julian
2026-06-19 16:21:34 +02:00
-
236cbfecab
feat(vision): add VisionClient Node adapter (advisory, fail-soft, opt-in)
julian
2026-06-19 15:58:43 +02:00
-
17fdf3d482
docs(wiki): vision fitness assessment for entry/exit flows
julian
2026-06-19 15:55:16 +02:00
-
4833b4373d
docs(wiki): Albanian-plate OCR benchmark — keep cct-xs-v2-global default
julian
2026-06-19 15:51:08 +02:00
-
5cedcaefe1
feat(vision): add recognize CLI + verify fast-alpr end-to-end
julian
2026-06-19 15:46:03 +02:00
-
6933406ae3
feat(vision): scaffold apps/vision ANPR microservice (FastAPI, stub recognizer)
julian
2026-06-19 15:37:38 +02:00
-
ee28b7302f
docs(wiki): decide vision service packaging — apps/vision/ in the monorepo
julian
2026-06-19 14:25:31 +02:00
-
e4827c9651
docs(wiki): record fast-alpr as the evaluated ANPR recognizer baseline
julian
2026-06-19 14:19:16 +02:00
-
c0a775818b
docs(wiki): note log:read perm + entry presence/cooldown guard in reference pages
julian
2026-06-19 12:59:06 +02:00
-
30e7fe85de
feat(booth): refusal snapshots, subscriber access medium, one-car-one-ticket entry
julian
2026-06-19 12:54:54 +02:00
-
bfb6ab0b36
feat(logs): app log store — backend pino DB sink + frontend error collection
julian
2026-06-19 12:54:22 +02:00