Files
walkup/PLAN.md
2026-04-24 08:30:09 -05:00

51 lines
2.9 KiB
Markdown

# WalkUp Implementation Plan
## Scope
- React PWA frontend.
- FastAPI backend.
- TeamSnap JavaScript SDK on the client.
- Server-side TeamSnap OAuth code exchange and refresh.
- Backend stores only app-owned data and TeamSnap external IDs.
## Initial Deliverables
- Thin TeamSnap auth/session backend.
- Media upload and clip registration flow.
- Game assignment and gameday APIs.
- Installable React PWA shell with offline-ready game prep scaffolding.
- Docker-based local development stack.
## Completed UI Cleanup
- Home page now acts as a lightweight landing page with direct links to Library and Gameday.
- Removed the old game-list-heavy dashboard content that was not useful as a landing surface.
- Game titles in the UI now include a day parenthetical such as `(sun 5/3)` wherever the shared formatter is used.
- TeamSnap gameday lineup reads now prefer the SDK `bulkLoad` path for `eventLineup` and `eventLineupEntry`, with rel-based fallback for accounts where bulk results are incomplete.
## Completed Offline Cache Work
- Client-side clip and assignment reads now persist locally and revalidate against server ETags.
- Normalized playback media is cacheable for offline clip playback.
- Auth and session responses remain `no-store` so cached data is limited to app-owned clip state.
- TeamSnap read queries now use cached-first stale-while-revalidate behavior on the client.
## Completed V1 Hardening
- Media and gameday mutations now stay within the authenticated session's selected team and player scope.
- Upload and clip-creation failures now clean up orphaned files before bubbling errors back to the client.
## Completed Asset Source Cleanup
- Editable artwork sources now live in `frontend/assets/design/`, while the exported web-ready images remain in `frontend/public/`.
- The splash artwork in `frontend/public/splash-art.svg` still serves as the editable vector source for the startup images in `frontend/public/`.
- The existing `frontend/public/icon.svg` already covers the app icon artwork, so no separate raster-to-vector conversion was needed there.
## Completed Ops Helpers
- Added a detached production compose launcher at `scripts/prod-up.sh` so the stack can be started without attaching the terminal to container output.
- Added a Traefik compose override sample at `compose.traefik.yml.sample` for production routing and proxy-network attachment.
- The production launcher now targets only `db`, `backend`, and `frontend`, keeping the dev Caddy proxy out of the production path.
- The Caddy proxy service now runs only under the `dev` compose profile, and `scripts/dev-up.sh` enables that profile automatically.
## Storage Status
- Backend media persists in the `backend-media` named Docker volume.
## Known Constraints
- TeamSnap entities should not be durably mirrored on the backend.
- Gameday lineup changes are local state in v1.
- Browser clip editing is first-class; backend finalizes playback assets.