7.4 KiB
7.4 KiB
Session Handoff: Nuxt Migration — Phases 1 & 2 Complete
Date: 2026-03-19 Session Duration: ~2 hours Session Focus: Framework selection, migration planning, and execution of Phases 1 & 2 of Quasar → Nuxt 3 migration Context Usage at Handoff: ~60%
What Was Accomplished
- Framework analysis (React Native vs Flutter vs Next/Nuxt) → decision: Nuxt 3 + Capacitor (deferred) + FullCalendar
- Migration plan created →
docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md(now the active plan reference) - Phase 1 — Foundation complete →
/home/ptoal/Dev/mobile-projects/bab-app-nuxt/ - Phase 2 — Appwrite plugin + types complete →
app/utils/,app/plugins/ - Integration tests written and passing (11/11) →
tests/appwrite-connection.test.ts - Task feature parked → removed from AppwriteIds and tests
Exact State of Work in Progress
- Migration plan: 10-phase plan in
docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md. Phases 1–2 marked complete. Phase 3 (Auth) is next. - New project:
/home/ptoal/Dev/mobile-projects/bab-app-nuxt/— scaffolded and running. Dev server confirmed clean onlocalhost:3000. - Old project:
/home/ptoal/Dev/mobile-projects/bab-app/— untouched, still operational. Do not delete until Phase 6 is complete.
Decisions Made This Session
- Nuxt 3 + nuxt-quasar-ui — keeps all Quasar (
q-*) components working; avoids big-bang UI rewrite. CONFIRMED. - FullCalendar non-commercial license — key
CC-Attribution-NonCommercial-NoDerivativesconfirmed valid. OYS is Ontario not-for-profit #000082982. CONFIRMED. - PWA only initially — Capacitor deferred until native camera/GPS features are actively needed. CONFIRMED.
- Static output —
nuxt generate→.output/public/served via nginx. Consistent with existing Ansible deploy. CONFIRMED. - TestFlight/App Store deferred — revisit when PWA hits UX or capability limits. CONFIRMED.
- Auth: magic link + email OTP only — password auth and Google (
vue3-google-login) removed. CONFIRMED. - Task feature parked — collections
task,taskTags,skillTagsabsent frombab_prod. Not migrated until Appwrite collections are created. CONFIRMED.
Key Numbers Generated or Discovered This Session
- 11/11 tests passing — backend connection verified
- 4 collections confirmed reachable —
boat,reservation,interval,intervalTemplate(return 401 unauthenticated = exist and require auth) - 3 collections absent —
task,taskTags,skillTagsreturn 404 frombab_prod - Appwrite project ID:
65ede55a213134f2b688 - Appwrite endpoint:
https://appwrite.toal.ca/v1 - Database ID:
bab_prod - ~12 days total estimated migration effort (unchanged)
- Nuxt version: 4.4.2 (installed as
nuxt@^4.4.2) - nuxt-quasar-ui version: 3.0.1
- fontIcons config must be an array
['material-icons'], not a string — bug if passed as string (iterates characters)
Conditional Logic Established
- IF task feature is needed, THEN create collections
task,taskTags,skillTagsin Appwrite dashboard first, THEN migratestores/task.ts,components/task/*,pages/task/* - IF Capacitor is added later, THEN change
nuxt.config.tswebDirto.output/publicand runnpx cap add ios && npx cap add android - IF App Store publishing is pursued, THEN use TestFlight (iOS) + Play Store internal testing track, NOT full public store listing (30–50 user club app)
Files Created or Modified
| File Path | Action | Description |
|---|---|---|
/home/ptoal/Dev/mobile-projects/bab-app-nuxt/ |
Created | New Nuxt 4.4.2 project root |
bab-app-nuxt/nuxt.config.ts |
Created | ssr:false, nuxt-quasar-ui, @pinia/nuxt, @vite-pwa/nuxt, PWA manifest, runtimeConfig |
bab-app-nuxt/.env.local |
Created | NUXT_PUBLIC_APPWRITE_ENDPOINT, NUXT_PUBLIC_APPWRITE_PROJECT_ID |
bab-app-nuxt/public/icons/ |
Created | Copied from old project — all PWA icon sizes |
bab-app-nuxt/app/utils/appwrite.ts |
Created | Appwrite client + services + AppwriteIds (task collections excluded) |
bab-app-nuxt/app/utils/boat.types.ts |
Created | Boat interface (extracted so schedule.ts can depend on it without the store) |
bab-app-nuxt/app/utils/schedule.types.ts |
Created | Interval, Reservation, IntervalTemplate, TimeTuple |
bab-app-nuxt/app/utils/misc.ts |
Created | getNewId(), LoadingTypes |
bab-app-nuxt/app/utils/schedule.ts |
Created | Schedule utilities; date from quasar kept; imports updated to ~/utils/* |
bab-app-nuxt/app/plugins/appwrite.client.ts |
Created | Stub plugin; auth store init wired in Phase 3 |
bab-app-nuxt/vitest.config.ts |
Created | Vitest with loadEnv to pick up .env.local |
bab-app-nuxt/tests/appwrite-connection.test.ts |
Created | 11 integration tests verifying backend connectivity |
bab-app-nuxt/package.json |
Modified | Added test and test:watch scripts |
docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md |
Modified | Added confirmed decisions, updated Phase 1 complete, task parked in Phase 7 |
What the NEXT Session Should Do
- First: Read
docs/summaries/handoff-2026-03-18-nuxt-migration-plan.mdfor the full 10-phase plan and current state - Then: Execute Phase 3 — Auth
- Migrate
src/stores/auth.ts→bab-app-nuxt/app/stores/auth.ts - Strip password auth methods; keep magic link + email OTP only
- Remove
vue3-google-loginfrombab-app-nuxt/package.json - Create
app/middleware/auth.global.ts(replaces old router navigation guard insrc/router/index.ts) - Create
app/pages/auth/callback.vue— handles magic link redirect?userId=&secret=params - Wire
authStore.init()call intoapp/plugins/appwrite.client.ts
- Migrate
- Then: Execute Phase 4 — Remaining Stores (all are near-verbatim Pinia ports)
stores/boat.ts— importBoatfrom~/utils/boat.typesinstead of defining inlinestores/reservation.ts,interval.ts,intervalTemplate.ts,reference.ts,realtime.ts,memberProfile.ts- Skip
stores/task.ts(parked)
Open Questions Requiring User Input
- Appwrite
task/taskTags/skillTagscollections — will these ever be created inbab_prod? Determines whether task feature gets migrated at all, or is permanently dropped.
Assumptions That Need Validation
- ASSUMED:
nuxt generate(static) is sufficient — no SSR/server-side rendering needed. Validate: all Appwrite calls are client-side only (no server routes needed). - ASSUMED:
LeftDrawer.vueexists insrc/components/(referenced in codebase exploration but not confirmed by direct file read). Verify before Phase 6.
What NOT to Re-Read
src/boot/appwrite.ts— fully migrated; summarized abovesrc/utils/misc.ts,src/utils/schedule.ts,src/stores/schedule.types.ts— fully migrated; summarized abovetemplates/claude-templates.md— not needed next session
Files to Load Next Session
docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md— active migration plan with all phasesbab-app-nuxt/app/utils/appwrite.ts— current AppwriteIds shape (needed for store migration)bab-app-nuxt/app/plugins/appwrite.client.ts— needs auth init wired in Phase 3src/stores/auth.ts— source for Phase 3 migration (read once, then discard)src/router/index.ts— source for middleware logic (read once, then discard)