Files
bab-app/docs/archive/handoffs/handoff-2026-03-19-nuxt-migration-phases-3-4.md

83 lines
5.1 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 3 & 4 Complete
**Date:** 2026-03-19
**Session Focus:** Auth store, middleware, callback page, and remaining Pinia stores
**Context Usage at Handoff:** ~50%
## What Was Accomplished
1. Phase 3 — Auth complete
2. Phase 4 — All remaining stores complete (except `task.ts`, still parked)
## Exact State of Work in Progress
- **Migration plan**: 10-phase plan. Phases 14 marked complete. Phase 5 (Pages/Components) is next.
- **New project**: `/home/ptoal/Dev/mobile-projects/bab-app-nuxt/` — stores and middleware in place. No pages migrated yet (other than `auth/callback.vue`).
- **Old project**: `/home/ptoal/Dev/mobile-projects/bab-app/` — untouched. Do not delete until Phase 6.
## Decisions Made This Session
- **Magic link redirect URL**: changed from `/login` to `/auth/callback` — dedicated handler, cleaner separation. CONFIRMED.
- **realtime.ts generic type**: changed from `RealtimeResponseEvent<Interval>` (incorrect) to `RealtimeResponseEvent<unknown>` — original typed the callback fn parameter too narrowly since multiple channels use the same store. CONFIRMED.
- **Boat interface not re-exported from boat.ts**: `boat.ts` re-exports `Boat` from `~/utils/boat.types` via `export { type Boat }` to preserve import compatibility with components that do `import { Boat } from '~/stores/boat'`. CONFIRMED.
## Key Numbers
- **7 stores created**: `auth`, `boat`, `reservation`, `interval`, `intervalTemplate`, `reference`, `memberProfile`
- **2 middleware/pages created**: `middleware/auth.global.ts`, `pages/auth/callback.vue`
- **1 plugin updated**: `plugins/appwrite.client.ts`
- **Task stores**: still 0 — `task`, `taskTags`, `skillTags` collections not in `bab_prod`
## Files Created or Modified
| File Path | Action | Description |
|-----------|--------|-------------|
| `bab-app-nuxt/app/stores/auth.ts` | Created | Magic link + OTP only; `register()`/`login()` removed; boat/reservation init wired |
| `bab-app-nuxt/app/stores/boat.ts` | Created | Re-exports `Boat` from `~/utils/boat.types`; near-verbatim port |
| `bab-app-nuxt/app/stores/reservation.ts` | Created | Near-verbatim port; imports updated |
| `bab-app-nuxt/app/stores/interval.ts` | Created | Near-verbatim port; `Boat` imported from `~/utils/boat.types` |
| `bab-app-nuxt/app/stores/intervalTemplate.ts` | Created | Near-verbatim port |
| `bab-app-nuxt/app/stores/reference.ts` | Created | Verbatim port (static data, no Appwrite) |
| `bab-app-nuxt/app/stores/realtime.ts` | Created | Generic type corrected to `unknown` |
| `bab-app-nuxt/app/stores/memberProfile.ts` | Created | Verbatim port (static data, no Appwrite) |
| `bab-app-nuxt/app/middleware/auth.global.ts` | Created | Global Nuxt route guard; public via `to.meta.public`; roles via `to.meta.requiredRoles` |
| `bab-app-nuxt/app/pages/auth/callback.vue` | Created | Handles `?userId=&secret=` magic link params; redirects to `/` |
| `bab-app-nuxt/app/plugins/appwrite.client.ts` | Modified | `authStore.init()` wired in |
## What the NEXT Session Should Do
1. **Execute Phase 5 — Pages & Components**
- Identify pages in old `src/pages/` — migrate one at a time
- Key pages: `LoginPage.vue`, `IndexPage.vue`, `BoatPage.vue`, `ProfilePage.vue`, `CertificationPage.vue`, `ChecklistPage.vue`
- Schedule pages: `SchedulePageView.vue`, `ScheduleIndexPage.vue`, `BoatReservationPage.vue`, `BoatScheduleView.vue`, `ListReservationsPage.vue`, `ModifyBoatReservation.vue`, `ManageCalendar.vue`
- Admin pages: `UserAdminPage.vue`, `BoatAdminPage.vue`
- Static pages: `TermsOfServicePage.vue`, `PrivacyPolicyPage.vue`, `ErrorNotFound.vue`
- Add `definePageMeta({ public: true })` to: `login.vue`, `signup.vue`, `pwreset.vue`, `terms-of-service.vue`, `privacy-policy.vue`, `auth/callback.vue` (already done)
- Add `definePageMeta({ requiredRoles: ['Schedule Admins'] })` to `schedule/manage.vue`
- Add `definePageMeta({ requiredRoles: ['admin'] })` to all `admin/*.vue` pages
2. **Execute Phase 6 — Layout**
- Migrate `MainLayout.vue` and `AdminLayout.vue`
- Confirm `LeftDrawer.vue` exists in `src/components/` (ASSUMED — not yet confirmed)
## Open Questions
- [ ] **OPEN**: `task`/`taskTags`/`skillTags` collections — will they ever be created in `bab_prod`?
- [ ] **OPEN**: What pages are in `src/pages/` — exact list not yet read (read on demand per CLAUDE.md rule 6)
## Assumptions
- ASSUMED: `LeftDrawer.vue` exists in `src/components/`. Verify before Phase 6.
- ASSUMED: `nuxt generate` (static) is sufficient. Still unvalidated.
- ASSUMED: `LoginPage.vue` in old app handles both magic link and OTP login UI — new app needs `pages/login.vue` built from scratch with `definePageMeta({ public: true })`.
## What NOT to Re-Read
- All stores in `bab-app-nuxt/app/stores/` — just created, content known
- `src/stores/auth.ts`, `src/stores/boat.ts`, etc. — fully migrated; do not re-read
## Files to Load Next Session
- `docs/summaries/handoff-2026-03-19-nuxt-migration-phases-3-4.md` (this file)
- `src/pages/` — read one page at a time per processing protocol
- `src/layouts/MainLayout.vue` — needed for Phase 6 planning
- `bab-app-nuxt/app/stores/auth.ts` — if login page needs store shape reference