refactor: everything to nuxt.js
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# 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 1–4 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
|
||||
Reference in New Issue
Block a user