51 lines
2.9 KiB
Markdown
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.
|