Jeppe B
133e53cfa6
Fix iPhone mobile header safe-area spacing
...
Add iOS safe-area viewport support and inset-aware mobile header/spacer
sizing so controls clear the notch or Dynamic Island. Desktop and tablet
headers remain unchanged. Includes focused unit and mobile browser
regression coverage.
2026-07-20 16:16:56 +02:00
Jeppe B
c69f4f7fc7
Run cPanel recovery and deploy from stable runner ( #189 )
...
Use the stable self-hosted runner for cPanel API calls and install lftp job-locally without sudo.
2026-07-20 15:54:45 +02:00
Jeppe B
10f993e686
Support direct cPanel UAPI responses ( #188 )
2026-07-20 15:47:52 +02:00
Jeppe B
a02ddfbfbc
Normalize cPanel success results ( #187 )
2026-07-20 15:41:15 +02:00
Jeppe B
7a85c93631
Use Android artwork for iOS app icon
...
Replace the iOS AppIcon variants with the exact Android launcher artwork
from `public/favicons/web-app-manifest-512x512.png`, so the physical
iPhone home-screen icon matches Android. Verified all declared icon
dimensions and focused iOS icon test.
2026-07-20 15:41:02 +02:00
Jeppe B
a3d11cfca3
Use relative account home in cPanel audit ( #186 )
2026-07-20 15:36:14 +02:00
Jeppe B
74279fc443
Address cPanel deployment review findings ( #183 )
2026-07-20 15:30:54 +02:00
Jeppe B
7e3a72961f
Add complete iOS app icon asset set ( #184 )
...
Add standard iPhone, iPad, and marketing AppIcon variants with asset regression coverage.
2026-07-20 15:23:39 +02:00
Jeppe B
ca2179352c
Fix customer booking product restrictions and responsive layout ( #182 )
...
## What changed
- load customer product rules for the booking customer and keep
selection fail-closed while they resolve
- prevent restricted products, add-ons, pickup, and wash certificates
from remaining selected or being submitted
- improve product-grid containment, selected add-on styling, unavailable
messaging, and tablet/mobile rendering
- preserve booking details when the API rejects stale restricted items
- add unit and Playwright coverage for loading, retry, exact
restrictions, automatic products, layout, and stale backend recovery
## Why
The customer booking flow could use stale or unrelated POS customer-rule
state, expose restricted items, and lose useful form state after a
server rejection. The desktop product area also overflowed and switched
to an inconsistent compact layout after selection.
## Validation
- desktop booking Playwright suite: 12 passed
- mobile booking Playwright suite: 4 passed, 8 expected desktop-only
skips
- relevant unit tests: 35 passed
- ESLint and i18n checks
- production Vite build
## Related backend PR
The coordinated API PR enforces the same rule at the write boundary.
2026-07-20 14:41:47 +02:00
Jeppe B
8ddac065c6
Guard iOS debug signing with live CORS ( #181 )
...
Verify the stable API and exact Capacitor iOS CORS contract before signing device-debug IPAs, with regression coverage and troubleshooting guidance.
2026-07-20 14:37:17 +02:00
Jeppe B
a930bd35a5
Add atomic cPanel frontend deployment ( #178 )
...
Build and archive the tested frontend, upload it through dedicated FTPS credentials, and atomically activate it through cPanel after CI succeeds.
2026-07-20 13:53:49 +02:00
Jeppe B
6b8f3ff806
Avoid Xcode version broken pipe in iOS debug workflow ( #180 )
...
Capture the full Xcode version output before selecting its first line so Xcode 26 cannot abort on a closed pipe.
2026-07-20 12:37:42 +02:00
Jeppe B
3323f392e3
Add signed iOS device debug workflow ( #179 )
...
Add a protected development-signing workflow, isolated debug app identity, Linux USB device tooling, documentation, and focused validation coverage.
2026-07-20 12:07:10 +02:00
Jeppe B
f8f2b80641
Align restricted POS add-on controls and registration label ( #177 )
...
Align restricted desktop and mobile POS controls, scope the Danish primary registration label to POS, and preserve generic registration wording across shared surfaces and other locales.
2026-07-20 10:57:17 +02:00
Jeppe B
1729443cc3
Resolve frontend Qodana critical and high findings ( #176 )
...
Resolve recommended-profile Critical and High findings, update vulnerable dependencies, restore invoice queue E2E authentication setup, and clear the remaining frontend Qodana findings.
2026-07-17 06:22:51 +02:00
Jeppe B
6b5ac8a8b3
Document frontend branch protection activation ( #175 )
...
## Purpose
After-activation canary for repository ruleset `19051697`.
## Evidence before activation
- preparation PR #172 established stable `Required CI`
- strict-current-base remediation PR #174 passed `Required CI` and
Qodana
- merged master run `29501928124` completed with 43 successful jobs and
one intentional skip
- effective master rules were audited after activation
## Canary acceptance
- merge is blocked while `Required CI` is pending
- the exact `Required CI` check comes from GitHub Actions integration
`15368`
- only squash merge is accepted
- the branch is deleted automatically after merge
2026-07-16 20:45:00 +02:00
Jeppe B
b12aca2757
Fix customer-rule i18n coverage gate ( #174 )
...
* fix: make customer rule translations statically auditable
* test: scope draft filter coverage to desktop layouts
2026-07-16 15:22:35 +02:00
Jeppe B
39cc3a780a
Configure advisory Qodana analysis ( #173 )
2026-07-16 14:21:02 +02:00
Jeppe B
18302723e8
Prepare frontend master branch protection ( #172 )
...
Add stable Required CI, repair E2E ownership, make Qodana optional-state handling explicit, and document the desired protection policy.
2026-07-16 13:12:57 +02:00
Jeppe B
20c383d22d
Format customer rule tests
2026-07-16 12:11:06 +02:00
Jeppe B
77a0c4e018
Add customer rule product restrictions
2026-07-16 11:51:42 +02:00
Jeppe B
9a5c8b193d
style: format admin order filter test
2026-07-16 11:50:41 +02:00
Jeppe B
0562ba8ab0
feat: add admin order filters
2026-07-16 11:45:08 +02:00
Jeppe B
516e1fb58d
Expose invoicing flag badge translations
2026-07-15 22:47:11 +02:00
Jeppe B
7da1307cf6
Restore i18n locale compatibility keys
2026-07-15 21:37:21 +02:00
Jeppe B
ea4893d815
Ignore warm prefetches in month selection E2E
2026-07-15 20:50:02 +02:00
Jeppe B
f2e0079b59
Stabilize invoicing period E2E scenarios
2026-07-15 20:26:49 +02:00
Jeppe B
47d8baa496
Format frontend test files
2026-07-15 19:42:27 +02:00
Jeppe B
6d96d64811
Improve invoicing period tree and POS restrictions
2026-07-15 17:04:51 +02:00
Jeppe B
92fb998e5a
Fix customer additional-service restrictions ( #171 )
2026-07-15 15:08:01 +02:00
Jeppe B
bed6030e2b
Stabilize invoicing period date fixtures
2026-07-15 02:45:02 +02:00
Jeppe B
328a85bad1
Review object tree dynamic i18n helper
...
Add the invoicing period object tree translation wrapper to the reviewed non-literal call list; it mirrors the existing flag-list helper pattern.
2026-07-15 01:30:18 +02:00
Jeppe B
394375e429
Fix user profile two-factor test id
...
Keep the profile two-factor wrapper test id stable and move spacing tokens to class so the mobile profile security E2E can find the status element.
2026-07-15 00:17:34 +02:00
Jeppe B
ca744adfd9
Link security status filter i18n label
...
Reuse the canonical system status label for the security incident status filter so the v2 duplicate raw phrase gate stays green.
2026-07-14 23:35:53 +02:00
Jeppe B
5e42f55570
Fix invoicing period object-tree flag handling
...
Keep expanded period rows on InvoicingPeriodObjectTree while rendering order-scoped flags in a compact expanded flag list. Update the invoicing-period E2E fixtures and source contract for the object-tree path.
2026-07-14 22:39:33 +02:00
Jeppe B
021da1a074
Fix invoicing period expanded order details ( #170 )
2026-07-14 21:02:22 +02:00
Jeppe B
0e55f45e91
Fix invoicing queue-state unit spec
2026-07-14 16:05:04 +02:00
Jeppe B
9749837506
Format frontend test files
2026-07-14 15:55:17 +02:00
Jeppe B
4fbb0b98c3
Improve superuser invoicing and system status views
2026-07-14 15:41:05 +02:00
Jeppe B
0edf8afcaf
Regenerate Danish i18n runtime
2026-07-14 13:52:23 +02:00
Jeppe B
26266e724b
Stabilize customer booking and i18n checks
2026-07-14 10:34:29 +02:00
Jeppe B
6ccfea9eb4
Limit security nav assertion to desktop layout
2026-07-14 02:15:44 +02:00
Jeppe B
d4349c20a7
Format subuser management spec
2026-07-14 00:59:12 +02:00
Jeppe B
f15d7224e0
Make failover wiring source check formatter tolerant
2026-07-13 21:50:28 +02:00
Jeppe B
236f552a22
Stabilize subuser QR auth smoke assertion
2026-07-13 20:57:30 +02:00
Jeppe B
321b6f2c64
Format auth smoke session bootstrap test
2026-07-13 20:36:03 +02:00
Jeppe B
218ead9a31
Fix subuser QR session bootstrap
2026-07-13 20:33:48 +02:00
Jeppe B
60b6e82c88
Dedupe cron worker target i18n key
2026-07-13 20:32:03 +02:00
Jeppe B
bbe4ad938a
Add cron worker controls and align superuser specs
2026-07-13 19:47:08 +02:00
Jeppe B
9e27380a10
Fix i18n v2 catalog integrity drift
...
Fill missing backup compatibility keys for Danish and Norwegian and centralize repeated shared/support labels through existing i18n links.
2026-07-13 17:59:51 +02:00
Jeppe B
8a0ea6cae5
Fix cron status translation literals
2026-07-13 08:48:45 +02:00
Jeppe B
1bbd816e83
Fix session bootstrap heading assertion
...
Target the system status heading in the delayed session bootstrap test so Playwright strict mode does not match both the navigation link and page heading.
2026-07-09 16:17:33 +02:00
Jeppe B
4e56191b7e
Fix cron due i18n link target
...
Add locale glossary entries for the cron due label and link the source alias through terms.glossary.due so generated runtime links resolve across active locales.
2026-07-09 14:51:17 +02:00
Jeppe B
4404fb49d3
Fix cron i18n duplicate aliases
...
Link repeated cron labels through existing cron/shared i18n aliases and regenerate global-v2.json so i18n integrity checks pass.
2026-07-09 13:00:25 +02:00
Jeppe B
fd4db442e4
Add Playwright component test quarantine flow
2026-07-09 11:29:44 +02:00
Jeppe B
416f392108
Classify superuser cron Playwright spec
2026-07-09 11:26:59 +02:00
Jeppe B
dbe9f6b0b2
Redirect QR signups to kundeoprettelse
...
Redirect legacy QR signup routes for new customers and drivers to the shared /kundeoprettelse customer creation page.
Validated with focused eslint and QR Playwright coverage for mobile and desktop.
2026-07-09 11:19:30 +02:00
Jeppe B
18f06f7a63
Format POS visual e2e spec
2026-07-09 11:19:23 +02:00
Jeppe B
fb75ddc3e9
Format superuser cron e2e spec
2026-07-09 11:15:29 +02:00
Jeppe B
1326a40033
Add superuser cron operations UI
2026-07-09 11:12:02 +02:00
Jeppe B
dabe0c13ef
Format mobile POS addon quantity update
2026-07-08 18:52:23 +02:00
Jeppe B
a5dbfb5cba
Fix mobile POS additional item product selection
2026-07-08 18:48:44 +02:00
Jeppe B
75c4700ac6
Fix mobile POS addon quantity updates
2026-07-08 18:47:08 +02:00
Jeppe B
19ce60fd0a
Fix orders table formatting and unit expectation
2026-07-08 17:02:59 +02:00
Jeppe B
30dfe2c0c0
Stabilize frontend E2E selectors
2026-07-08 16:53:52 +02:00
Jeppe B
fbc1dc9406
Update view i18n dynamic key allowlist
2026-07-08 15:54:41 +02:00
Jeppe B
4a4b82c8b6
Format invoice bulk actions changes
2026-07-08 15:52:06 +02:00
Jeppe B
d1d7b72441
Format duplicate-date E2E assertion
2026-07-08 14:56:29 +02:00
Jeppe B
48d8d7f527
Stabilize mobile superuser E2E assertions
2026-07-08 14:54:17 +02:00
Jeppe B
73a71e5262
Sync i18n v2 generated runtime files
2026-07-08 14:01:10 +02:00
Jeppe B
cab779e403
Align Danish vehicle action unit expectation
2026-07-08 13:54:09 +02:00
Jeppe B
acd46e5f2a
Fix i18n locale integrity coverage
2026-07-08 13:43:37 +02:00
Jeppe B
59af8453f3
Fix i18n word dedupe casing variants
2026-07-08 13:04:41 +02:00
Jeppe B
4cc2c3310c
Fix frontend test gate expectations
2026-07-07 22:16:25 +02:00
Jeppe B and Jeppe Bundgaard
96ccc01d08
Add limited backoffice employee migration ( #164 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-07 00:14:05 +02:00
Jeppe B and Jeppe Bundgaard
ca2003f2d6
Allow hosted runners for manual frontend tests ( #161 )
...
* Allow hosted runners for manual frontend tests
* Fix hosted full E2E i18n failures
* Stabilize release assignment E2E selection
* Gate full E2E on focused regressions
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 22:38:29 +02:00
Jeppe B and Jeppe Bundgaard
acbbac588f
[codex] disable invoice downloads until invoices exist ( #158 )
...
* disable invoice downloads until invoices exist
* enable github-hosted frontend ci runners
* Update POS invoice download visual expectations
* Fix full E2E i18n and self-serve coverage
* Review dynamic view i18n keys
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 22:35:58 +02:00
Jeppe B
f75ff97042
Merge pull request #139 from copenhagentruckwash/codex/backoffice-title-department-selector
...
[codex] Move backoffice department selector into title
2026-07-06 22:35:13 +02:00
Jeppe B and Jeppe Bundgaard
d2682da3cc
[codex] Improve admin notifications page UI ( #145 )
...
* Improve admin notifications page UI
* Stabilize notifications page E2E bootstrap wait
* Fix PR Playwright diff head ref
* Guard MyWashStart timers after test teardown
* Stabilize self-serve wash E2E timing
* Refresh edge gateway fixture runtime state
* Run Playwright E2E on GitHub-hosted runners
* Run all frontend CI on GitHub-hosted runners
* Increase hosted full E2E parallelism
* Stabilize full E2E validation
* Preserve superuser gateway navigation label
* Add targeted Playwright dispatch workflow
* Integrate targeted Playwright dispatch into tests workflow
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 22:33:40 +02:00
Jeppe B
d2cbf823d8
Fix action wheel menu placement stability
...
Stabilizes the action settings wheel dropdown placement so the menu does not flip above/below after opening, and adds regression coverage plus hosted full-matrix workflow support.
2026-07-06 22:15:46 +02:00
Jeppe B
c237fce38d
Fix null product query parameters
...
Fixes product detail requests so null optional query params are omitted while final_price=false is preserved.
2026-07-06 20:14:45 +02:00
Jeppe B
63149b7597
Merge pull request #162 from copenhagentruckwash/codex/daily-report-product-targets-ui
...
[codex] Add daily report product target controls
2026-07-06 19:36:03 +02:00
Jeppe B
27994d6ac6
Merge pull request #159 from copenhagentruckwash/codex/superuser-user-overview-hub
...
[codex] Finish superuser user overview hub
2026-07-06 18:57:04 +02:00
Jeppe B
c2ce6a859b
Merge pull request #150 from copenhagentruckwash/codex/customer-product-fixed-price-overrides
...
Add customer product fixed price UI
2026-07-06 18:15:31 +02:00
Jeppe B and Jeppe Bundgaard
aa5e0a5507
Add EAN to customer registration flows ( #147 )
...
* Add EAN to economic customer registration
* Focus EAN PR Playwright mapping
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 18:12:05 +02:00
Jeppe B
bb375eb149
Merge pull request #144 from copenhagentruckwash/codex/fix-invoicing-period-selfwash
...
Fix invoicing period Selvvask counts
2026-07-06 17:08:06 +02:00
Jeppe B
7e5e6ce680
Enforce only tankcleaning POS product rules ( #151 )
2026-07-06 17:07:03 +02:00
Jeppe B
744a56c8b2
Merge PR #157 : Cleanup superuser dashboard tabs
...
Cleanup superuser dashboard tabs
2026-07-06 16:59:27 +02:00
Jeppe B and Jeppe Bundgaard
db1c0e25c0
Move limited backoffice shortcut into header ( #140 )
...
* Move limited backoffice shortcut into header
* Use shared Playwright port locks in CI
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 16:47:33 +02:00
Jeppe B
d8d67301ed
Add autosave for limited backoffice prices ( #143 )
2026-07-06 16:26:46 +02:00
Jeppe B and Jeppe Bundgaard
da86b69b2c
Warn before invoicing multiple months together ( #155 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 16:02:10 +02:00
Jeppe B
44e3167278
Build superuser department overview page ( #156 )
...
Build the superuser department overview page and align PR changed-E2E selection with the PR head ref.
2026-07-06 16:01:26 +02:00
Jeppe B
5cc22f14bc
Fix date-only selection handling
...
Use local date-only parsing and formatting across date inputs and filters so clicked dates persist exactly.\n\nVerified with local format, lint, i18n, build, full unit tests, PR E2E, focused date E2E, broad smoke reruns, and GitHub PR checks.
2026-07-06 15:52:19 +02:00
Jeppe B
8519af5cbb
Merge pull request #141 from copenhagentruckwash/codex/custom-pricing-only-departments
...
Add custom-only department pricing toggle
2026-07-06 15:31:41 +02:00
Jeppe B and Jeppe Bundgaard
3fc4be8335
Update limited backoffice employee form ( #146 )
...
* Update limited backoffice employee form
* Map limited backoffice changes to focused E2E
---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 15:31:16 +02:00
Jeppe B and Jeppe Bundgaard
278298ecd2
Submit error reports without screenshots ( #153 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 14:28:24 +02:00
Jeppe B and Jeppe Bundgaard
dec90bbbbf
Block restricted mobile additional items ( #148 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 14:07:04 +02:00
Jeppe B and Jeppe Bundgaard
a4b9d2f04d
Add superuser vehicle creation flow ( #152 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 13:59:40 +02:00
Jeppe B and Jeppe Bundgaard
22f8b5f203
Improve superuser role permissions page ( #149 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 12:43:03 +02:00
Jeppe B
987acc5b0f
Add role permission help modal ( #142 )
...
Adds the Rolle help icon and grouped permissions modal for limited backoffice employees, plus i18n and Playwright coverage.
2026-07-06 12:25:01 +02:00