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

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