Jeppe B
4f26ddd2cc
Remove manual Stripe payment actions ( #233 )
...
## Summary
- remove hosted email-payment/payment-link creation from POS and order
management
- automatically capture authorized card payments instead of exposing a
manual capture action
- replace provider-specific Stripe wording with card-terminal
terminology
- retain ordinary terminal payment, receipts, order completion, and
navigation
- add focused unit and Playwright regression coverage
Paired API change: https://github.com/copenhagentruckwash/api/pull/327
## Verification
- focused frontend unit tests: 8/8 passed
- desktop card-payment Playwright: 4/4 passed
- mobile card-payment Playwright: 15/15 passed
- admin order action rail Playwright: 3/3 passed
- ESLint, translation generation/checks, build, and diff checks passed
- all 18 visual states passed their relevant DOM assertions
## Visual change previews
### View: Regular POS card-payment view
**Description:** The hosted email-payment action is removed and
provider-specific wording becomes generic card-terminal wording.
#### Mobile
**Before:** 
**After:** 
#### Tablet
**Before:** 
**After:** 
#### Desktop
**Before:** 
**After:** 
### View: Authorized payment capture
**Description:** The manual capture action is replaced by an
automatically initiated capture and its in-progress state.
#### Mobile
**Before:** 
**After:** 
#### Tablet
**Before:** 
**After:** 
#### Desktop
**Before:** 
**After:** 
### View: Order-dashboard action rail
**Description:** The hosted Stripe invoice/payment-link action is
removed while normal order actions remain.
#### Mobile
**Before:** 
**After:** 
#### Tablet
**Before:** 
**After:** 
#### Desktop
**Before:** 
**After:** 
## Residual risk
No live Stripe Terminal hardware or production Stripe account was used.
Browser behavior is verified with repository-owned mocks; the API suite
verifies route and payment-intent lifecycle wiring.
2026-07-27 19:09:40 +02:00
Jeppe B and Jeppe Bundgaard
b7859d4ede
Add subuser access and recovery flows ( #231 )
...
## Summary
- add chauffeur/subuser password recovery by SMS and authenticated
password changes
- add a read-only pre-authorized access-request preview with explicit
approve/deny actions
- replace duplicate customer grants with one deduplicated Buefy dropdown
- show colored vehicle, toolbox, calendar, order, and driver permission
indicators
- add localized copy across all supported locale sources and generated
catalogs
## Verification
- ESLint passed
- grant deduplication/icon unit tests: 2 passed
- authentication Playwright coverage: 3 passed
- authorized subuser management Playwright coverage: 1 passed
- mocked direct approval browser flow passed
- i18n source/runtime checks passed
- production build passed (2,034 modules transformed)
- `git diff --check` passed
## Paired delivery
Paired API PR: https://github.com/copenhagentruckwash/api/pull/325
## Visual change previews
### View: Forgot-password account selection
**Description:** Visitors can now choose customer or chauffeur recovery;
chauffeur recovery requests the country code and phone number used for
the SMS reset link.
#### Mobile (390 x 844)
**Before:**

**After:**

#### Tablet (768 x 1024)
**Before:**

**After:**

#### Desktop (1440 x 900)
**Before:**

**After:**

### View: Pre-authorized customer access decision
**Description:** The SMS destination now previews the exact chauffeur
and customer request and requires an explicit approve or deny action
before mutating access.
#### Mobile (390 x 844)
**Before:**

**After:**

#### Tablet (768 x 1024)
**Before:**

**After:**

#### Desktop (1440 x 900)
**Before:**

**After:**

---------
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-27 18:40:43 +02:00
Jeppe B
7387a2b56e
fix(i18n): unblock Truckwash iOS release catalog checks ( #225 )
...
Fix the location-permission source catalog nesting and regenerate all active v2 locale files so the App Store release matrix resolves the new compatibility aliases correctly.
2026-07-23 20:22:47 +02:00
Jeppe B
9ff103d4d0
fix(ios): respect status area and persist location consent ( #224 )
...
Keep the iOS status bar outside the Capacitor web view and replace startup geolocation watching with silent permission checks plus an explicit location action.
Verified by full unit, App Store readiness, Qodana, production build, Capacitor sync, and Playwright mobile suites.
2026-07-23 19:29:54 +02:00
Jeppe B
eeec725f08
Restore complete privacy-policy locale coverage ( #203 )
...
## Summary
- add the privacy-policy compatibility source to German, Norwegian, and
Swedish so every active locale has the same runtime key set
- reuse existing English and German glossary tokens so the raw v2
catalog keeps its word-deduplication invariant
- regenerate the affected runtime locale catalogs
## Verification
- `playwright test tests/e2e/i18n-v2-integrity.spec.ts
--project=chromium-mobile` (12 passed)
- `vitest run tests/unit/app-store-product-readiness.spec.js` (5 passed)
- i18n source compile check and all three catalog audits
- Prettier, encoding, and `git diff --check`
2026-07-20 20:51:32 +02:00
Jeppe B
88eda43560
Automate signed iOS App Store releases ( #192 )
...
## What changed
- adds production iOS identity, localized storefront metadata, native
privacy declarations, App Store-safe artwork, and account-deletion UX
- mirrors the live Danish Google Play title, short description, and long
description in the App Store metadata source
- generates Android launcher/store icons from the opaque iOS marketing
master so both platforms use the same white background
- adds guarded GitHub Actions workflows for storefront readiness,
credential health, signed TestFlight uploads, and App Store candidate
preparation
- adds pinned Fastlane configuration with a committed dependency lock,
release manifest tooling, and an operational App Store runbook
- preserves the upstream iOS safe-area implementation while retaining
opaque App Store icon assets
## Why
The repository previously supported development-signed device bundles
but had no production App Store identity, reproducible storefront source
of truth, or protected signed-release pipeline. Apple also requires
in-app account deletion for apps that support account creation. The
Android icon master was transparent, which rendered as black on dark
store/device surfaces.
## Impact
Automation remains fail-closed behind
`APP_STORE_AUTOMATION_ENABLED=false`. No build can upload to TestFlight
or change App Store metadata until the switch is deliberately enabled
after merge and the remaining release gates are satisfied.
## Validation
- focused App Store, iOS icon, and cross-platform icon-background tests
pass
- every generated Android store/launcher icon is opaque with pure-white
corners; iOS marketing artwork is checked the same way
- Android icon drift check passes for all 19 generated files
- production Vite build and the broader focused release checks completed
successfully
- storefront metadata is valid; only the two expected screenshot-set
warnings remain
- App Store Readiness is green at head `4445fecc`
- Apple Distribution certificate and App Store profile were
independently verified for `HP3FJ4GVL7.io.truckwash.app`
- live App Store Connect API authentication succeeded for app
`6792777794`
- App Store record, free Denmark-only availability, and automatic
`Internal QA` TestFlight group are configured
- EU trader status, Content Rights, 4+ age rating, and the published App
Privacy label are completed in App Store Connect
- iPhone and iPad accessibility declarations are configured honestly as
pre-release drafts
## Remaining external gates
- reviewed iPhone and iPad screenshot sets are still required
- an App Review login must be supplied without creating or exposing
customer credentials
- the first signed TestFlight candidate must run after merge and
deliberate automation enablement
2026-07-20 17:59:43 +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
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
77a0c4e018
Add customer rule product restrictions
2026-07-16 11:51:42 +02:00
Jeppe B
6d96d64811
Improve invoicing period tree and POS restrictions
2026-07-15 17:04:51 +02:00
Jeppe B
4fbb0b98c3
Improve superuser invoicing and system status views
2026-07-14 15:41:05 +02:00
Jeppe Bundgaard
acec2a694a
Add loading screen for session confirmation and enhance vehicle management labels
2026-07-13 22:11:51 +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 Bundgaard
443f50c144
Enhance subuser management contact and action flows
2026-07-13 15:11:49 +02:00
Jeppe Bundgaard
54e59b4b3e
Add system status displays for Minio and Redis, and enhance backup configuration
2026-07-13 10:07:56 +02:00
Jeppe Bundgaard
042e477252
Add invoice collection bulk actions and table header preferences functionality
2026-07-08 15:43:14 +02:00
Jeppe B
73a71e5262
Sync i18n v2 generated runtime files
2026-07-08 14:01:10 +02:00
Jeppe Bundgaard
e399c9f974
Add bulk action preview and apply functionality for invoice collections
2026-07-08 13:51:54 +02:00
Jeppe Bundgaard
d03f4d9aae
Add subusers management features and enhance department navigation
2026-07-08 12:27:45 +02:00
Jeppe Bundgaard
1123b34e10
Enhance UI components and improve date selection functionality
2026-07-07 20:52:14 +02:00
Jeppe Bundgaard
8c12fce187
Add customer pricing labels and update date selection components
2026-07-07 18:16:45 +02:00
Jeppe Bundgaard
7180bbd6d4
Add limited backoffice role template actions
2026-07-07 03:23:32 +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 Bundgaard
b58c1eb9ec
Add daily report product target controls
2026-07-06 19:10:50 +02:00
Jeppe Bundgaard
9d6978e9c7
Merge remote-tracking branch 'origin/master' into codex/superuser-user-overview-hub
...
# Conflicts:
# .github/workflows/tests.yml
2026-07-06 18:38:40 +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 Bundgaard
6c1c1def78
Add limited backoffice employee QR login links
2026-07-06 17:32:58 +02:00
Jeppe Bundgaard
cfa7d5be69
Merge remote-tracking branch 'origin/master' into codex/superuser-user-overview-hub
...
# Conflicts:
# .github/workflows/tests.yml
# scripts/playwright-pr-mapping.mjs
# src/views/dashboards/userDashboard/wash/MyWashStart.vue
# tests/unit/playwright-pr-mapping.spec.js
2026-07-06 17:12:45 +02:00
Jeppe Bundgaard
e58372a190
Merge remote-tracking branch 'origin/master' into codex/pr157-merge-resolve-692380
...
# Conflicts:
# scripts/playwright-pr-mapping.mjs
# src/i18n/generated/da-v2.json
# src/i18n/generated/de-v2.json
# src/i18n/generated/en-v2.json
# src/i18n/generated/no-v2.json
# src/i18n/generated/sv-v2.json
# src/i18n/source/da/phrases/index.json
# src/i18n/source/de/phrases/index.json
# src/i18n/source/en/phrases/index.json
# src/i18n/source/no/phrases/index.json
# src/i18n/source/sv/phrases/index.json
# src/views/dashboards/userDashboard/wash/MyWashStart.vue
# tests/unit/playwright-pr-mapping.spec.js
2026-07-06 16:59:00 +02:00
Jeppe Bundgaard
19d44b8666
Add limited backoffice user ID translations
2026-07-06 16:53:41 +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
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 Bundgaard
6002f97fb6
Finish superuser user overview hub
2026-07-06 14:42:23 +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
a4b9d2f04d
Add superuser vehicle creation flow ( #152 )
...
Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk >
2026-07-06 13:59:40 +02:00
Jeppe Bundgaard
0e9292d6d9
Merge remote-tracking branch 'origin/master' into codex/custom-pricing-only-departments
...
# Conflicts:
# scripts/playwright-pr-mapping.mjs
2026-07-06 12:48:54 +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
Jeppe Bundgaard
02ddb99000
Add custom-only department pricing toggle
2026-07-06 10:21:06 +02:00
Jeppe Bundgaard
94036a31e5
Fix limited backoffice i18n integrity
2026-07-01 17:42:11 +02:00
Jeppe Bundgaard
90cdc55574
Add limited backoffice functionality with employee management and department pricing
2026-07-01 16:37:25 +02:00
Jeppe Bundgaard
8e9e66f846
Add endpoint and functionality to test Slack internal department goal progress webhook
2026-06-29 11:32:43 +02:00
Jeppe Bundgaard
220013c4f0
Refactor input value handling and improve validation in ObjectsGlobal component
2026-06-29 11:08:47 +02:00
Jeppe Bundgaard
02c31c8bb0
Fix i18n catalog compatibility
2026-06-11 21:45:48 +02:00
Jeppe Bundgaard
968587d847
Fix mobile GPS department auto-selection
2026-06-11 17:32:28 +02:00
Jeppe Bundgaard
73fc89557b
Add Slack test webhook button
2026-06-11 15:06:43 +02:00
Jeppe Bundgaard
8d01ca1363
Implement move collected invoice to customer feature with API integration and tests
2026-06-09 13:16:05 +02:00
Jeppe Bundgaard
71a073ebf9
Add hidden frontend maintenance refresh
2026-06-09 12:32:58 +02:00