# 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. ## 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.