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

5.1 KiB
Raw Blame History

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