Production Console · visionOS 27 · Native + RealityKit
Six weekly sprints from re-baseline to TestFlight. Nine scenes, one shape-shifting narrator, five part-time specialists — and a hard rule: at least one task closes every single day.
One increment per weekly sprint. Each bar counts closed leaf tasks — subtasks included.
How far each scene and shared system has moved across its involved disciplines.
The open tasks nearest the front of the queue. Close at least one of these today.
Who's carrying what. Defaults to the current sprint — switch sprint or filter to one person; your person choice is remembered on this device.
Every task in the production, grouped by type. Click a checkbox to cycle planned → in progress → done; use a task's ⋯ menu to move it between sprints, rename it, add subtasks, flag it blocked, or delete it. Changes sync to the whole team.
Each sprint's board is grouped by type; the count in the header tallies closed leaves.
The deliverables of the experience. Nothing here is set by hand — each row's progress and sprint range are computed from the backlog tasks linked to it (⋯ menu → Scene, or the scene select when adding a task).
| Scene | Sprints | RCP / Sequencing | Swift / Systems | 3D Art | Motion / Graphics | Sound | Progress |
|---|
Each milestone has a hard exit criterion, verified in a full run-through on device. Click a milestone's chip to cycle planned → active → done → at-risk.
Reviewed every Friday. Click a severity chip to cycle high → medium → low; Edit / Delete on each card.
Shared reference material for the production — scripts, captures, boards, clips. Attach pictures, PDFs, or short videos to an entry; click a file to open it.
Roles come first — the whole console refers to people as "Role — Name". Edits here apply everywhere immediately; a person with assigned tasks can't be removed until their tasks are reassigned.
Newest first. Task closes are logged automatically — this is the drumbeat's paper trail.
/api/state (Cloudflare Pages Function + KV) when deployed; on a plain static host or local file it falls back to this-browser-only storage — the badge in the header tells you which mode you're in. The initial plan ships in js/data.js and seeds the shared board on first load.