Skip to main content
Draft. Summer Apps is in a closed test. This page goes live after the end-to-end test on production.

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

Use your team members’ names for owner, so the cards show the right initials.

An agent edit: “Lantern Bridge is fixed, move it to playtest”

Read the levels:
In the answer, 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:
The card moves to the playtest lane for everyone with the app open, and the blocked count drops to 0. A 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: