Releases: nash87/parkhub-php
v5.1.0
What's Changed
🔒 Security
- fix: reconcile PHP release preflight and admin updates by @nash87 in #446
- build(deps): bump the actions group with 3 updates by @dependabot[bot] in #445
📚 Documentation
- test: full-route v5 design-smoke gate + mobile shell + admin polish by @nash87 in #450
- docs: refresh ParkHub handoff status + nix gate progress by @nash87 in #451
🤖 CI
- ci: default PHP VEX metadata to GitHub by @nash87 in #448
- ci: preserve fop local failure status by @nash87 in #449
- build(deps-dev): bump vite from 7.3.2 to 8.0.10 in /parkhub-web by @dependabot[bot] in #444
- ci: widen diff-aware design-smoke gate regex by @nash87 in #452
- ci: Nix/Garnix baseline + flake.lock for release-grade reproducibility by @nash87 in #453
- ci: switch nix-contract gate to --strict (--require-lock) by @nash87 in #455
- ci: port image-scan lefthook gate (fleet parity with fop-web-ui#171, fop-web-backend#62) by @nash87 in #456
- fix(ci): parameterize NODE_BASE+WOLFI_BASE build-args for cloud CI by @nash87 in #457
- fix(ci): use real Docker Hub digest for node:22-slim by @nash87 in #458
📦 Dependencies
- build(deps): bump the npm-tooling-deps group with 4 updates by @dependabot[bot] in #441
- build(deps-dev): bump globals from 16.5.0 to 17.6.0 by @dependabot[bot] in #442
- build(deps): bump the npm-deps group in /parkhub-web with 6 updates by @dependabot[bot] in #443
Other Changes
- ci: refresh PHP Gitea workflow mirror host by @nash87 in #447
- feat(image-security): SOTA-2026 Wolfi runtime rebase (closes T-2774, T-2749) by @nash87 in #454
- chore(release): bump to v5.1.0 by @nash87 in #459
Full Changelog: v5.0.4...v5.1.0
v5.0.3
What's Changed
- chore(release): bump version to 5.0.3 + version-drift guards by @nash87 in #398
- fix(ci): fop-local-ci.sh auto-fallback to direct mode when fop missing by @nash87 in #399
- fix(ci): define skip_step in fop-local-ci.sh (was undefined → exit 127 on GHA) by @nash87 in #401
Full Changelog: v5.0.2...v5.0.3
ParkHub PHP v5.0.1
What's Changed
- ci(deploy): unblock Render demo deploy by @nash87 in #327
- feat(i18n): translate v5 onboarding tour — 10 locales + tour.* namespace by @nash87 in #328
- feat(ui): port Buchungen, Fahrzeuge, Credits to v5 + TanStack Query by @nash87 in #329
- sync(tests+a11y): cherry-pick Gitea fixes for parity with parkhub-rust by @nash87 in #330
- feat(v5): Wave 2 — port Buchen/Kalender/Karte/Profil main screens by @nash87 in #331
- fix(v5): check ApiResponse.success across all mutations + queries by @nash87 in #332
- feat(v5): Wave 3 — port 7 Fleet screens by @nash87 in #333
- build(deps): bump library/composer from
b148074todc292c5by @dependabot[bot] in #334 - fix(v5): calendar uses from/to params + Buchen guards invalid datetime by @nash87 in #335
- feat(v5): Wave 4+5 — final 11 admin screens (26/26 parity) by @nash87 in #337
- fix(v5): mirror rust #374 fleet-screen fixes to PHP Wave 3 by @nash87 in #336
- fix(v5): admin-nav screens use admin APIs (mirror rust #376) by @nash87 in #338
- feat(v5): upgrade Analytics bar chart to uPlot canvas by @nash87 in #339
- perf(v5): lazy-load UPlotChart on Analytics to protect LCP budget by @nash87 in #340
- fix(v5): lazy-load UPlotChart (mirror #379 fix) by @nash87 in #341
- test(analytics): regression guard for uPlot data-ref stability by @nash87 in #342
- test(v5): 100% happy-path + visual coverage for 26 screens (T-1948) by @nash87 in #343
- chore(v5): retire PlaceholderV5 + add Playwright mobile-chrome project by @nash87 in #344
- test(a11y): axe-core audit + WCAG 2.1 AA fixes for v5 (T-1974) by @nash87 in #346
- feat(v5): Tier-1 2026 UX quick-wins (T-1977) by @nash87 in #347
- chore(storybook): catalog v5 primitives with Storybook 10 + a11y + test-runner by @nash87 in #345
- build(deps): bump postcss from 8.5.8 to 8.5.10 in /resources/js in the npm_and_yarn group across 1 directory by @dependabot[bot] in #349
- build(deps): bump postcss from 8.5.9 to 8.5.10 in /parkhub-web by @dependabot[bot] in #350
- docs(marketing): v5 design showcase in README by @nash87 in #351
- test(a11y): Dashboard/Profil regression guards + PWA OfflineIndicator wire-up by @nash87 in #352
- feat: local-first CI workflow (Lefthook + drift gates + Biome) by @nash87 in #356
- feat(ux): Tier-2 polish — conflict check, iCal, PDF export, undo, filter persist by @nash87 in #348
- feat(v5): full customization framework — settings + sidebar variants + density + fonts + feature toggles by @nash87 in #353
- feat(v5/assistent): Lokal badge + Vorschläge eyebrow + privacy footer by @nash87 in #354
- build(deps): bump the npm-tooling-deps group with 6 updates by @dependabot[bot] in #357
- build(deps-dev): bump tailwindcss from 3.4.19 to 4.2.4 by @dependabot[bot] in #361
- build(deps-dev): bump @types/node from 24.10.13 to 25.6.0 by @dependabot[bot] in #359
- build(deps): bump the actions group with 5 updates by @dependabot[bot] in #363
- ci(codeql): add actions language analysis by @nash87 in #364
- ci(deps): pin past tailwind 4.2.4 vite regression by @nash87 in #366
- build(deps): bump @tanstack/react-query from 5.100.1 to 5.100.3 in the npm-tooling-deps group by @dependabot[bot] in #368
- fix(branding): remove KI/AI from v5 user-facing strings by @nash87 in #355
- fix(deps): override uuid to ^14.0.0 (close GHSA-w5hq-g745-h8pq) by @nash87 in #367
- ci(security): swap trufflehog (AGPL) for gitleaks (MIT) by @nash87 in #365
- fix(v5/policies): only re-init draft on activeId change by @nash87 in #370
- fix(v5/analytics): wait for lazy UPlotChart canvases (mirrors parkhub-rust) by @nash87 in #376
- ci(deps): Dependabot cooldown + tailwind 4.2.3 ignore + align github-actions group with rust by @nash87 in #371
- docs: post-merge-train drift cleanup by @nash87 in #372
- docs(web): replace parkhub-web/README boilerplate with real overview by @nash87 in #373
- chore(web): install @astrojs/check, exclude stories from tsc (Phase 1) by @nash87 in #374
- test(api/client): kill 87 tsc errors via firstCall/nthCall helpers (Phase 2) by @nash87 in #375
- test(hooks/useWebSocket): kill 42 tsc errors via wsAt() helper (Phase 3) by @nash87 in #377
- ci(lefthook): close silent-pass holes (lint-ts, typecheck-ts, vitest) by @nash87 in #378
- test(views): kill 37 tsc errors in Visitors+AdminUpdates (Phase 4a) by @nash87 in #379
- test(views,components): -41 tsc errors in admin/EV test suites (Phase 4b) by @nash87 in #380
- chore(version): bump to 4.14.0 — parkhub-rust parity baseline by @nash87 in #381
- test(web): Phase 4c — kill 8 file-level tsc errors with mixed patterns by @nash87 in #382
- chore(web): bump parkhub-web/package.json to 4.14.0 (parity with VERSION) by @nash87 in #383
- chore(version): bump to 4.15.0 — parkhub-rust 4.15.0 parity catch-up by @nash87 in #384
- ci: pilot fop local-first PR attestation by @nash87 in #385
- refactor(web): mirror useDraftFromActive hook (parkhub-rust parity) by @nash87 in #386
- ci(security): add typos + zizmor as advisory CI checks (Wave 5c) by @nash87 in #387
- release: cut v5.0.1 by @nash87 in #388
Full Changelog: v5.0.0...v5.0.1
ParkHub v5.0.0 — Design System
ParkHub v5.0.0 — Design System
The v5 release of ParkHub. New flagship design system, 3-step transparency onboarding, global command palette.
Highlights
🎨 v5 Design System
- 3 canonical themes in OKLCH: Marble Light (flagship default), Marble Dark, Void (dark-first editorial). One
<html>attribute flip re-skins the entire app — no remount. - Shared primitives:
Badge,Card,StatCard,SectionLabel,Row,Toggle(role=switch, ARIA),LiveDot,Divider,V5Icon,HelpTip. All tokenized, all accessible, 40+ unit tests. - Self-hosted fonts: Inter Variable (all weights in one ~48KB woff2) + DM Mono. CSP-safe — no external font fetches.
- Bento Dashboard (
/v5): reference implementation with animated KPIs via@number-flow/react, live zone heatmap, quick-actions.
⌘K Command Palette
- Powered by
cmdk— the 2026 standard (Linear, Vercel). - Works on every route (not just
/v5). Maps v5 nav → existing v4 paths via react-router. - Sections grouped by main / fleet / admin, fuzzy search across label/number/id.
- ESC closes, keyboard focus and ARIA delegated to cmdk.
🎓 3-Step Onboarding Tour (/tour)
Post-Welcome, pre-Login experience that builds trust before first use:
- Privacy & Data — self-hosted, TLS 1.3 + Argon2, GDPR Art. 15/17/20 as self-service, data minimization.
- Feature toggles — 8 modules (Bookings = required, Credits/EV/Swap/Waitlist/Guest Pass/Analytics/AI opt-in). Preferences saved locally; users change anytime.
- Trust & Compliance — 2160+ tests, GDPR, TLS 1.3, Lighthouse CI, OpenAPI 99% + drift-gate, audit-log badges.
Skip and Back both respected. Standalone mount — wraps own V5ThemeProvider + toast provider.
💡 HelpTip primitive
Inline contextual help — small "i" button that reveals a popover with explanatory text. Escape / click-outside closes, role=tooltip, aria-expanded/controls, focus restore. Used throughout the onboarding tour, available for any surface.
New 2026 dependencies
| Dep | Purpose |
|---|---|
cmdk |
⌘K command palette primitive |
@tanstack/react-query |
Server-state layer (wired at app root) |
@number-flow/react |
Counter animations for KPIs |
@fontsource-variable/inter + @fontsource/dm-mono |
Self-hosted fonts |
Quality gates
- 2160/2160 unit + integration tests pass (parkhub-php)
- Lighthouse CI green — LCP under 3.5s budget via Inter Variable
- All existing CI checks green (Frontend builds, Backend tests, Integration tests, E2E smoke, CodeQL, PHPStan, OpenAPI drift, Security, Secret scan, Composer/npm Audit)
Migration notes
- Marble is now the default theme. Existing users with
classicor any other theme persisted inlocalStoragekeep their preference. Fresh installs land on Marble. /v5coexists with the main app — no behavior change for existing routes.- Navigation never dead-ends: placeholder screens in the v5 shell link back to their v4 routes during the per-screen migration.
What's next (follow-ups)
- 25 remaining screens ported to v5 primitives (Buchungen, Buchen, Karte, EV-Laden, etc.) — one PR per screen, all consuming the primitives established here.
- Tour strings translated to all 10 locales (currently DE with i18n fallback).
HelpTipwoven into existing forms (Book, Settings, Admin).- parkhub-rust ThemeContext registry: add Marble/Void as first-class entries (required for Marble-default flip there).
v4.13.4
Full Changelog: v4.13.3...v4.13.4
v4.12.0
Full Changelog: v4.11.0...v4.12.0
v4.11.0
Full Changelog: v4.10.0...v4.11.0
v4.10.0
Full Changelog: v4.9.0...v4.10.0
v4.9.0
Full Changelog: v4.8.0...v4.9.0
v4.8.0
Full Changelog: v4.7.0...v4.8.0
What's Changed
- chore(deps): bump the npm-tooling-minor-patch group with 8 updates by @dependabot[bot] in #294
Full Changelog: v4.7.0...v4.8.0