Migrate WeddIn client to Quasar Vite and restore authenticated app initialization #7

Merged
jonathan merged 51 commits from chore/quasar-webpack-v4-migration into master 2026-08-27 14:50:57 +02:00
Owner

Summary

This PR migrates the WeddIn client build toolchain from the legacy Quasar/Webpack setup to Quasar CLI with Vite.

It also restores the application initialization, Vuex integration, authentication flow, and authenticated data loading so that the client works consistently after login and after a browser reload.

Changes

Build and tooling

  • Replace the legacy Quasar Webpack app package with @quasar/app-vite
  • Add and align the active Vite-compatible Quasar configuration
  • Add the Vite HTML entry point
  • Update Quasar, Vue, Vue Router, Vuex, Axios, ESLint, PostCSS, Sass, and related dependencies
  • Migrate ESLint to flat config
  • Update and regenerate the npm lockfile
  • Remove obsolete tooling and stale lockfiles
  • Update the Docker build image to Node 22
  • Keep the static production build served through nginx
  • Improve branch-specific container image tagging in CI

Application migration

  • Migrate Axios, i18n, Lodash, color, router, and Vuex boot integration to Quasar Vite
  • Restore Vite-compatible path aliases and extension resolution for legacy imports
  • Replace browser-incompatible CommonJS require() usage in Vuex modules with ES module imports
  • Replace browser-side process.env usage with Vite-compatible runtime/build configuration access
  • Resolve Quasar language packs with import.meta.glob

Authentication and initialization

  • Explicitly install and expose the Vuex store for the Vite application
  • Restore router access to the store singleton
  • Restore authenticated API requests by applying the JWT as an Axios authorization header
  • Keep the JWT available after browser reloads
  • Load authenticated content after an existing session is restored
  • Remove redundant initialization code that prevented authenticated post-login data from loading after reload

Google Maps

  • Modernize Google Maps script loading with asynchronous loading
  • Migrate away from deprecated classic map markers
  • Add safer handling for missing location data or API keys
  • Use custom marker content for location pins
  • Update marker interaction handling for AdvancedMarkerElement

Validation

Manually verified in the test environment:

  • Client production container builds and starts successfully
  • Application initializes successfully
  • Login with an invitation code works
  • JWT-authenticated API requests succeed
  • Authenticated content remains available after a browser reload
  • Guest, header, footer, sections, and preference data load again after session restoration
  • Google Maps renders with the migrated marker implementation

Notes

  • The Google Maps Map ID must have its visual style configured in Google Cloud Console; local styles cannot be combined with a mapId.
  • Runtime client configuration remains injected by nginx through config.js, allowing environment-specific API and media endpoints without rebuilding the image.
## Summary This PR migrates the WeddIn client build toolchain from the legacy Quasar/Webpack setup to Quasar CLI with Vite. It also restores the application initialization, Vuex integration, authentication flow, and authenticated data loading so that the client works consistently after login and after a browser reload. ## Changes ### Build and tooling - Replace the legacy Quasar Webpack app package with `@quasar/app-vite` - Add and align the active Vite-compatible Quasar configuration - Add the Vite HTML entry point - Update Quasar, Vue, Vue Router, Vuex, Axios, ESLint, PostCSS, Sass, and related dependencies - Migrate ESLint to flat config - Update and regenerate the npm lockfile - Remove obsolete tooling and stale lockfiles - Update the Docker build image to Node 22 - Keep the static production build served through nginx - Improve branch-specific container image tagging in CI ### Application migration - Migrate Axios, i18n, Lodash, color, router, and Vuex boot integration to Quasar Vite - Restore Vite-compatible path aliases and extension resolution for legacy imports - Replace browser-incompatible CommonJS `require()` usage in Vuex modules with ES module imports - Replace browser-side `process.env` usage with Vite-compatible runtime/build configuration access - Resolve Quasar language packs with `import.meta.glob` ### Authentication and initialization - Explicitly install and expose the Vuex store for the Vite application - Restore router access to the store singleton - Restore authenticated API requests by applying the JWT as an Axios authorization header - Keep the JWT available after browser reloads - Load authenticated content after an existing session is restored - Remove redundant initialization code that prevented authenticated post-login data from loading after reload ### Google Maps - Modernize Google Maps script loading with asynchronous loading - Migrate away from deprecated classic map markers - Add safer handling for missing location data or API keys - Use custom marker content for location pins - Update marker interaction handling for `AdvancedMarkerElement` ## Validation Manually verified in the test environment: - Client production container builds and starts successfully - Application initializes successfully - Login with an invitation code works - JWT-authenticated API requests succeed - Authenticated content remains available after a browser reload - Guest, header, footer, sections, and preference data load again after session restoration - Google Maps renders with the migrated marker implementation ## Notes - The Google Maps Map ID must have its visual style configured in Google Cloud Console; local `styles` cannot be combined with a `mapId`. - Runtime client configuration remains injected by nginx through `config.js`, allowing environment-specific API and media endpoints without rebuilding the image.
ci: build and tag container images per branch
Some checks failed
Build and publish container image / build (push) Failing after 19s
6d033ede80
chore: update lockfile
Some checks failed
Build and publish container image / build (push) Failing after 18s
3dfbcd39e6
chore: remove obsolete yarn.lock
Some checks failed
Build and publish container image / build (push) Failing after 7s
da053da67c
chore: ignore quasar temp files
Some checks failed
Build and publish container image / build (push) Failing after 7s
14040865fb
fix: bump build image to Node 22 for @quasar/app-vite
All checks were successful
Build and publish container image / build (push) Successful in 15s
0767adae5c
fix: allow non-root nginx user to write cache and html dirs
All checks were successful
Build and publish container image / build (push) Successful in 43s
de027ede52
fix: export Vuex store singleton (no longer auto-injected by app-vite)
All checks were successful
Build and publish container image / build (push) Successful in 11s
550ee2b207
fix: import store singleton directly in i18n boot
All checks were successful
Build and publish container image / build (push) Successful in 11s
4520712823
fix: import store singleton directly in router
All checks were successful
Build and publish container image / build (push) Successful in 11s
9974848457
fix: resolve Quasar lang packs via import.meta.glob
All checks were successful
Build and publish container image / build (push) Successful in 12s
502afe2a03
debug: add trace logging to initApp
All checks were successful
Build and publish container image / build (push) Successful in 13s
14837100ec
debug: add trace logging to init.vue created hook
All checks were successful
Build and publish container image / build (push) Successful in 12s
8d941cee92
fix: update configuration retrieval to use build environment variables
All checks were successful
Build and publish container image / build (push) Successful in 13s
57aaee3753
chore: migrate to Quasar Webpack v4 and update store integration
All checks were successful
Build and publish container image / build (push) Successful in 13s
2bac16246c
- Add Vuex store integration in the application.
- Update boot configuration to include Vuex.
- Modify router history management for improved routing.
- Refactor state management in various store modules.
- Enhance initialization logic for the application.
- Update .gitignore to include public configuration files.
fix: enhance request interceptor to include authorization token and logging
All checks were successful
Build and publish container image / build (push) Successful in 13s
8b5b09e11b
fix: enhance login action with additional logging and consistent URL formatting
All checks were successful
Build and publish container image / build (push) Successful in 12s
68a72db55e
fix: enhance login action to include token handling and authorization header
All checks were successful
Build and publish container image / build (push) Successful in 12s
78491a9f9a
fix: update authorization handling for token management
All checks were successful
Build and publish container image / build (push) Successful in 13s
8e2a815a01
fix: enhance Google Maps integration with improved error handling and custom marker support
All checks were successful
Build and publish container image / build (push) Successful in 13s
acc4264818
- Add checks for locations and API key availability to prevent runtime errors.
- Implement custom marker content for better visual representation.
- Update Google Maps script loading to include async loading for improved performance.
fix: update initApp action to improve authentication state handling
All checks were successful
Build and publish container image / build (push) Successful in 13s
14a07411d5
refactor: remove redundant code from initApp action
All checks were successful
Build and publish container image / build (push) Successful in 12s
d4c3281e68
fix: google maps warnings
All checks were successful
Build and publish container image / build (push) Successful in 13s
feef9b18b7
jonathan left a comment

Passt

Passt
jonathan merged commit 497ff54679 into master 2026-08-27 14:50:57 +02:00
jonathan deleted branch chore/quasar-webpack-v4-migration 2026-08-27 14:50:57 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jonathan/weddin-client!7
No description provided.