Skip to content
Merged
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
cec879c
chore(backlog): T-011 done
BrandanBurgess Jul 16, 2026
d0a1e4f
docs(agent): orchestrator state snapshot for session handoff
BrandanBurgess Jul 16, 2026
613cad2
feat(screens): whiteboard page with toolbar, view menu, record/save (…
BrandanBurgess Jul 16, 2026
b5d7160
merge: T-030 whiteboard page into integration
BrandanBurgess Jul 16, 2026
24ccc96
chore(backlog): T-030 done, T-031 + T-033 doing
BrandanBurgess Jul 16, 2026
23e21ff
feat(screens): patterns page with libraries, chips, search, details (…
BrandanBurgess Jul 16, 2026
880efb4
merge: T-031 patterns page into integration
BrandanBurgess Jul 16, 2026
733ac3f
feat(screens): roster page with CRUD, sliders, double-exposure warnin…
BrandanBurgess Jul 16, 2026
598c97a
fix(infra): seed database in e2e boot path so fresh environments pass…
BrandanBurgess Jul 16, 2026
b165909
merge: T-031 seed-on-boot fix into integration
BrandanBurgess Jul 16, 2026
09c9fe2
merge: reconcile main squash history into integration
BrandanBurgess Jul 16, 2026
ea0930f
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
7fd5a3a
merge: T-033 roster page into integration (resolve nav shell, schemas…
BrandanBurgess Jul 16, 2026
add1c38
chore(backlog): T-031 done, T-033 pr, T-032 + T-034 doing
BrandanBurgess Jul 16, 2026
e8926a7
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
f331829
chore(backlog): T-033 done
BrandanBurgess Jul 16, 2026
c634850
feat(screens): formations page with keystones, keycards, rondo map (T…
BrandanBurgess Jul 16, 2026
877ad0d
merge: T-032 formations page into integration
BrandanBurgess Jul 16, 2026
35a07a2
chore(e2e): drop duplicated nav assertion left by merge
BrandanBurgess Jul 16, 2026
ce9695c
feat(screens): identity page with reference teams, pass-risk, cult co…
BrandanBurgess Jul 16, 2026
62c8b24
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
02cf1c3
merge: T-034 identity page into integration (all five nav entries live)
BrandanBurgess Jul 16, 2026
f8fde64
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
4d7ff05
chore(backlog): T-032 + T-034 done, screens phase complete
BrandanBurgess Jul 16, 2026
d1ce7c1
chore(backlog): T-040 + T-041 doing
BrandanBurgess Jul 16, 2026
abb4823
feat(collab): role gating suite, API enforcement audit (T-040)
BrandanBurgess Jul 16, 2026
817df6d
merge: T-040 role gating suite into integration
BrandanBurgess Jul 16, 2026
8732131
chore(backlog): founder decisions recorded, add T-012 + T-043
BrandanBurgess Jul 16, 2026
0151d7b
feat(collab): playstyle suggestion flow (T-041)
BrandanBurgess Jul 16, 2026
27c9211
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
2131cc4
merge: T-041 suggestion flow into integration
BrandanBurgess Jul 16, 2026
0e4cf0c
chore(backlog): T-041 pr, T-012 doing
BrandanBurgess Jul 16, 2026
302040d
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
7f69ea2
chore(backlog): T-041 done
BrandanBurgess Jul 16, 2026
ea71eae
feat(platform): role-scoped join codes, head coach member management …
BrandanBurgess Jul 16, 2026
0282683
merge: T-043 team management into integration
BrandanBurgess Jul 16, 2026
7116ee6
feat(content): identity age_hint column, migration, Bible backfill (T…
BrandanBurgess Jul 16, 2026
335e147
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
c3f273c
merge: T-012 identity age_hint into integration
BrandanBurgess Jul 16, 2026
0fc6f18
merge-fix: re-point T-012 migration to 0005 after T-043's 0004
BrandanBurgess Jul 16, 2026
41763d4
Merge remote-tracking branch 'origin/main' into integration
BrandanBurgess Jul 16, 2026
f23238e
docs(agent): session 2 handoff snapshot, T-012 + T-043 done
BrandanBurgess Jul 16, 2026
be6e74c
feat(collab): sessions draft builder, send, receipts, player view (T-…
BrandanBurgess Aug 7, 2026
52f8113
feat(demo): scripts/seed_demo.py and a `make demo` target
BrandanBurgess Aug 7, 2026
274dda1
feat(screens): phone pass, styled auth screens, shared ghost button (…
BrandanBurgess Aug 7, 2026
6dd1273
feat(verify): demo-path journey, permission gate in CI, one search ma…
BrandanBurgess Aug 7, 2026
8e61cb0
feat(docs): screenshot capture script, docs/screenshots, and the README
BrandanBurgess Aug 7, 2026
08a55a5
feat(platform): deployable image, single-origin serving, Render bluep…
BrandanBurgess Aug 7, 2026
4659426
fix(ci): pin the dev tooling so CI and a checkout cannot drift
BrandanBurgess Aug 7, 2026
1e78386
merge: reconcile squash-merged main back into integration
BrandanBurgess Aug 7, 2026
fa5ca0a
docs(readme): live demo URL and a deployment section
BrandanBurgess Aug 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ Draw a pattern on a live board that shows you which passes are on and which are
covered, record it the way you would draw it on a whiteboard, and send it to the
squad's phones. You see who watched it.

**Try it: <https://patterns-of-play.onrender.com>** . Sign in as
`coach@example.com` / `demo-pass-2026` (or `player@example.com`, same password).
It is a free instance, so the first request after a quiet spell takes about a
minute to wake up, and the demo team is rebuilt on every restart.

![The whiteboard with the live lane graph](docs/screenshots/01-whiteboard-lanes.png)

## Why a coach cares
Expand Down Expand Up @@ -101,6 +106,24 @@ Other targets: `make verify` (copy scan, permission suite, lint, typecheck, unit
and integration tests, and the Playwright journeys on both viewports),
`make screenshots` (rebuilds the demo database and recaptures `docs/screenshots/`).

## Deployment

`render.yaml` describes a single Docker web service that serves the SPA and the
API from one origin (`Dockerfile`, `scripts/start.sh`). Pushing to `main`
redeploys it.

The live instance runs on Render's free plan, which has **no persistent disk**.
The SQLite file is rebuilt on every boot, which is why `POP_SEED_DEMO=true` is
set: the demo team, its content and its logins come back on every restart, so
the credentials above always work and the demo always opens in the same state.
Anything created while poking around does not outlive the instance, and a free
instance sleeps after about fifteen minutes of quiet.

To make it durable for a real club: raise `plan` to `starter`, attach a disk
mounted at `/data`, and set `POP_SEED_DEMO=false`. `DATABASE_URL` already points
there, so nothing else changes. Litestream replication (doc 04 section 2) is the
step after that, not before it.

## Stack and architecture

React 19 + Vite + TypeScript on the front, FastAPI + SQLAlchemy 2 + Alembic over
Expand Down
Loading