Files
bab-app/docs/summaries/handoff-2026-03-19-nuxt-migration-phases-1-2.md

107 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
1. Framework analysis (React Native vs Flutter vs Next/Nuxt) → decision: Nuxt 3 + Capacitor (deferred) + FullCalendar
2. Migration plan created → `docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md` (now the active plan reference)
3. Phase 1 — Foundation complete → `/home/ptoal/Dev/mobile-projects/bab-app-nuxt/`
4. Phase 2 — Appwrite plugin + types complete → `app/utils/`, `app/plugins/`
5. Integration tests written and passing (11/11) → `tests/appwrite-connection.test.ts`
6. 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 12 marked complete. Phase 3 (Auth) is next.
- **New project**: `/home/ptoal/Dev/mobile-projects/bab-app-nuxt/` — scaffolded and running. Dev server confirmed clean on `localhost: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-NoDerivatives` confirmed 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`, `skillTags` absent from `bab_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`, `skillTags` return 404 from `bab_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`, `skillTags` in Appwrite dashboard first, THEN migrate `stores/task.ts`, `components/task/*`, `pages/task/*`
- IF Capacitor is added later, THEN change `nuxt.config.ts` `webDir` to `.output/public` and run `npx 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 (3050 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
1. **First**: Read `docs/summaries/handoff-2026-03-18-nuxt-migration-plan.md` for the full 10-phase plan and current state
2. **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-login` from `bab-app-nuxt/package.json`
- Create `app/middleware/auth.global.ts` (replaces old router navigation guard in `src/router/index.ts`)
- Create `app/pages/auth/callback.vue` — handles magic link redirect `?userId=&secret=` params
- Wire `authStore.init()` call into `app/plugins/appwrite.client.ts`
3. **Then**: Execute **Phase 4 — Remaining Stores** (all are near-verbatim Pinia ports)
- `stores/boat.ts` — import `Boat` from `~/utils/boat.types` instead of defining inline
- `stores/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`/`skillTags` collections** — will these ever be created in `bab_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.vue` exists in `src/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 above
- `src/utils/misc.ts`, `src/utils/schedule.ts`, `src/stores/schedule.types.ts` — fully migrated; summarized above
- `templates/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 phases
- `bab-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 3
- `src/stores/auth.ts` — source for Phase 3 migration (read once, then discard)
- `src/router/index.ts` — source for middleware logic (read once, then discard)