What your team gets
- Two tabs, Items and Quests, each a searchable, sortable table. Click a row to edit it in a dialog.
- Quest status as badges: draft, in review, done. Filter by status with one click.
- A reference check: quests that reward an item that does not exist are flagged.
- Your agent adds and changes items and quests by asking (“make the Iron Sword cost 120 gold”, “add a fetch quest in Mossbank”).
Ask your agent
Item and quest database. Your agent builds, seeds and checks the app.
The manifest
Seed the data
rope, which is not an item. The app flags it, and check_references returns it.
An agent edit: “make the Iron Sword cost 120 gold”
Read the items:iron-sword has "price": 100 and a revision, here 1. Write the change, and add the missing rope item in the same revision. "ifRevision": 0 adds the rope only if no record rope exists yet:
conflict means a record changed or already exists: read again and retry. The flag on “Supplies for the Ferry” goes away for everyone with the app open.
Check the look
After every publish:summer_app_screenshot { "appId": "<app id>" }summer_app_screenshot { "appId": "<app id>", "width": 390 }: badge columns fold under the name, rows stack only if they still do not fit.summer_app_screenshot { "appId": "<app id>", "theme": "dark" }summer_app_screenshot { "appId": "<app id>", "steps": [{ "click": "summer-table >>> tbody tr" }] }: clicks the first item, so the capture shows the edit dialog with the item’s values.summer_app_screenshot { "appId": "<app id>", "params": { "tab": "quests" } }if the app opens a tab from launch params.
steps, the screenshot shows the first tab and no open dialog. Check that declared.actions lists Add item and Add quest.
With the next Summer Engine update, the app can also write res://data/items.json and res://data/quests.json; check summer.engine.status() first.
What it uses
SDK:summer.ready; summer.data.collection("items") and summer.data.collection("quests") with .list(), .put(), .patch(), .remove() and .subscribe(); summer.agent.send("record.saved") after a dialog save; summer.agent.tool("check_references"); summer.page.declare() with Add item and Add quest actions.
Kit: summer-page with Add item or Add quest (for the open tab) in slot="actions"; summer-tabs (labels ["Items", "Quests"]); summer-toolbar with summer-search and summer-segmented (status, with counts); summer-table (row-key="id", sortable, clickable; a status column with badges { "draft": "quiet", "review": { "tone": "info", "label": "In review" }, "done": "ok" }; a reference column of type: "badge" filled only on broken rows); summer-dialog with summer-form, summer-text-input, summer-select and a type="number" input; summer-empty-state; summer-notice for a failed load.
The reference check, used by the table and by the tool:

