What your team gets
- A board with one lane per stage: blockout, art, lighting, playtest, done. One card per level, with its owner and its blocker or playtest score. Drag a card to move the level.
- At the top: levels done, a progress bar, levels blocked and the average playtest score.
- Click a card to edit the level: owner (from your team), blocker, score.
- Your agent moves levels and writes blockers by asking (“Lantern Bridge is fixed, move it to playtest”), and gives you a stand-up report.
Ask your agent
Level progress tracker. Your agent builds, seeds and checks the app.
The manifest
Seed the data
owner, so the cards show the right initials.
An agent edit: “Lantern Bridge is fixed, move it to playtest”
Read the levels:lantern-bridge has "stage": "lighting", a blocker and a revision, here 1. Move it and clear the blocker. In a patch, null removes a key:
conflict means someone changed the level: read again and retry. For the stand-up, call summer_app_call with { "tool": "status_report" } while the person has the app open, or read the levels and count them yourself.
Check the look
After every publish:summer_app_screenshot { "appId": "<app id>", "fullPage": true }: the whole board, all five lanes.summer_app_screenshot { "appId": "<app id>", "width": 390, "fullPage": true }summer_app_screenshot { "appId": "<app id>", "theme": "dark" }
summer.team.members() is a read, so it works in the screenshot and fills the owner list. A drag is a write, so test moves with summer_app_data instead.
What it uses
SDK:summer.ready; summer.data.collection("levels") with .list(), .get(), .patch() and .subscribe(); summer.team.members() (team:read) for the owner list; summer.agent.send("level.moved"); summer.agent.tool("status_report"); summer.page.declare() with an Add level action.
Kit: summer-page; summer-stats and summer-stat (done, blocked with tone="warn" when above 0, average score); summer-progress (value from 0 to 1); summer-board with one summer-lane per stage (lane-id is the stage) and a summer-board-card per level (card-id is the record id, heading, person, meta, done); summer-dialog with summer-form, summer-select (owner, stage), summer-text-input (blocker, and type="number" for the score); summer-empty-state for a board with no levels.
Saving a move and the stand-up report:

