feat: add caching for backend objects
This commit is contained in:
90
docs/summaries/00-project-brief.md
Normal file
90
docs/summaries/00-project-brief.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Project Brief: OYS Borrow a Boat (oysqn.app)
|
||||
**Created:** 2026-04-21
|
||||
**Owner:** Patrick Toal
|
||||
|
||||
---
|
||||
|
||||
## Identity
|
||||
|
||||
- **App name:** OYS Borrow a Boat (oysqn.app)
|
||||
- **Previous app:** bab-app (Appwrite backend — retired)
|
||||
- **Purpose:** Manage a Borrow a Boat program for a Yacht Club (OYS = Oakville Yacht Squadron)
|
||||
- **Club:** Oakville Yacht Club, Oakville, ON Canada
|
||||
- **Target users:** Club members enrolled in the Borrow a Boat program
|
||||
|
||||
---
|
||||
|
||||
## Personas
|
||||
|
||||
| Persona | Description |
|
||||
|---------|-------------|
|
||||
| BAB Member | Enrolled club member; can browse boats and make reservations |
|
||||
| Certified Skipper | Credentialed to take boats without supervision |
|
||||
| Program Administrator | Manages boats, intervals, rules, and member access |
|
||||
| Boatswain | Responsible for boat maintenance and readiness |
|
||||
| Volunteer | Assists with program logistics |
|
||||
| Instructor | Delivers sailing instruction; may certify members |
|
||||
|
||||
---
|
||||
|
||||
## Stack
|
||||
|
||||
| Layer | Technology |
|
||||
|-------|-----------|
|
||||
| Framework | Nuxt 4 (SSR=false, SPA mode) |
|
||||
| UI | Ionic Vue (@ionic/vue) + PrimeVue 4 |
|
||||
| Language | TypeScript |
|
||||
| Backend | Supabase (Auth, DB, Edge Functions, Storage) |
|
||||
| Testing | Vitest (unit), Vitest (integration, hits real Supabase), Playwright (E2E) |
|
||||
| Package manager | Yarn |
|
||||
|
||||
---
|
||||
|
||||
## Architecture Highlights
|
||||
|
||||
- `app/app.vue` — IonApp + IonMenu + IonRouterOutlet (no NuxtLayout/NuxtPage)
|
||||
- Auth: magic link + OTP only; no password auth; no self-service signup; admin-only invite
|
||||
- Edge Functions: Bearer JWT → `adminClient.auth.getUser(token)` pattern; all DB ops via service role
|
||||
- Icons: Ionicons only (`ionicons/icons`)
|
||||
|
||||
---
|
||||
|
||||
## CI/CD Pipeline
|
||||
|
||||
- **Source control:** Gitea
|
||||
- **CI:** Gitea Actions (unit tests + build on PR)
|
||||
- **Deploy (dev):** EDA (Event-Driven Ansible) → AAP → nginx artifact swap on bab1
|
||||
- **Deploy (prod):** EDA → AAP (manual approval gate) → S3 sync
|
||||
- **E2E:** Playwright, run post-deploy via AAP
|
||||
- **Supabase environments:** Two projects — dev and prod (project IDs in Vault)
|
||||
- **Secrets:** HashiCorp Vault at `http://nas.lan.toal.ca:8200`, path `kv/oys/`
|
||||
|
||||
---
|
||||
|
||||
## Current Phase
|
||||
|
||||
[FILL: e.g., "Active development — reservations UI", "Beta testing", "Production"]
|
||||
|
||||
---
|
||||
|
||||
## Key Constraints
|
||||
|
||||
- Deadline: April 30th (Launch Day)
|
||||
- Four boats in the program
|
||||
- Between 20 - 30 Members
|
||||
|
||||
---
|
||||
|
||||
## Booking Rules (known so far)
|
||||
|
||||
- Weekly pre-booking limit enforced (exact number: 2)
|
||||
- Overlap constraint: same boat cannot be double-booked
|
||||
|
||||
---
|
||||
|
||||
## Open Items
|
||||
|
||||
- [ ] Are cancel-reservation and admin Edge Functions planned?
|
||||
- [ ] What is the full set of admin pages needed?
|
||||
- [ ] What is the club name for display in the app?
|
||||
- [X] What is the season start date / go-live target?
|
||||
Reference in New Issue
Block a user