3.0 KiB
3.0 KiB
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
bulkLoadpath foreventLineupandeventLineupEntry, 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-storeso 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 infrontend/public/. - The splash artwork in
frontend/public/splash-art.svgstill serves as the editable vector source for the startup images infrontend/public/. - The existing
frontend/public/icon.svgalready 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.shso the stack can be started without attaching the terminal to container output. - Added a Traefik compose override sample at
compose.traefik.yml.samplefor production routing and proxy-network attachment. - The production launcher now targets only
db,backend, andfrontend, keeping the dev Caddy proxy out of the production path. - The Caddy proxy service now runs only under the
devcompose profile, andscripts/dev-up.shenables that profile automatically. - The Traefik production override now builds the frontend into a static Nginx image and clears the dev-facing published ports.
Storage Status
- Backend media persists in the
backend-medianamed 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.