# volleyboard

## Project Info
- Type: custom
- Port: 3131
- Created by: rian
- Created: 2026-07-19

## Description

**Volleyboard** — project management / issue tracking gamified as volleyball.
A shell of game-feel (serve/pass/spike/resolve, sound + motion, perspective-
relative courts) wrapped around the proven machinery of the review app
(/srv/apps/review). Read these IN ORDER before doing anything:

1. `docs/idea.md` — founding vision (napkin sketch)
2. `docs/review-learnings.md` — what to inherit from the review app (stack,
   mechanics, hard-won UX rules)
3. `docs/fleshout-2026-07-19.md` — Rian's refinements: locked decisions,
   the perspective model worked example, the experience bar. **Where docs
   conflict, this one wins.**
4. `docs/plan-v1.md` — the build plan (once it exists)

## Current state (2026-07-19, v0.7.0 — the overnight build SHIPPED)

- **The game is built**: all milestones M0-M7 of docs/plan-v1.md. Board on
  real Brentwood seed data (4 declarative courts incl. Warm-up), the rally
  loop with sound + motion, realtime SSE + presence, comments/attachments/
  mentions, notifications bell, **perspective-relative courts** (the soul:
  rep()/courts_of projected server-side through every surface; 26/26
  walkthrough assertions), autopass (one hop, honest bolt), View As with
  middleware-enforced read-only. Backend suite: 179 tests.
- Stack (standards): FastAPI + Vite React SPA, one Python process on
  172.17.0.1:3131 (NEVER 0.0.0.0), Postgres 17 sidecar on the
  project-internal network only, Alembic 0001-0004. Deploy:
  `srv-gw deploy --project volleyboard --build`. Seed (idempotent):
  `docker compose exec app python tools/load-seed.py` (in-container) or
  tools/load-seed.py against a dev DB.
- Auth: BW Auth Pattern B (OAuth2/PKCE vs auth.bowden.works), default-deny
  middleware. Dev bypass: APP_ENV=dev + AUTH_DEV_USER (refused in prod).
- Docs: plan-v1.md (design truth) · review-patterns-ref.md (ported vocab/
  colors/UX) · OVERNIGHT-PROGRESS.md (build log + dev/screenshot recipes) ·
  fleshout-2026-07-19.md (the experience bar — still wins conflicts).
- No scoring in v1 (deliberate).

## Getting Started
1. Add files to `./public/` directory
2. Deploy: `srv-gw deploy --project volleyboard`
3. Visit: https://volleyboard.bowden.works

## Managing the Container
Use `srv-gw` commands (NOT docker/podman directly):
```bash
srv-gw deploy --project volleyboard     # Deploy/redeploy (reads docker-compose.yml)
srv-gw status --project volleyboard     # Check status
srv-gw logs --project volleyboard       # View logs
srv-gw restart --project volleyboard    # Restart
srv-gw stop --project volleyboard       # Stop
srv-gw start --project volleyboard      # Start
```

## Customizing
Edit `docker-compose.yml` to change the container setup (e.g., different image,
build from Dockerfile, add environment variables). Then run `srv-gw deploy`.
