What your team gets
- Every weapon in one table: damage, attacks per second, DPS, range, price and tier. Edit a number in place and save.
- A DPS chart. Weapons over the DPS budget turn red, with a dashed budget line.
- Your agent changes weapons by asking (“nerf the bow by 10%”), with or without the app open. Everyone with the app open sees it live.
Ask your agent
Weapon balance table. Your agent builds, seeds and checks the app.
The manifest
res://data/weapons.json; check summer.engine.status() first.
Seed the data
Onesummer_app_data call writes every starter row in one revision. "as": "seed" marks the rows as the team’s, with no author.
put replaces, so running the seed again does not make duplicates.
An agent edit: “nerf the bow by 10%”
Read the bow first, to get its damage and its revision:"damage": 40 and a revision, here 1. Write 10% less damage, only if nobody changed the bow since the read:
conflict means someone changed it: read again and retry. When the person has the app open, summer_app_call with { "tool": "nerf_weapon", "input": { "id": "bow", "percent": 10 } } does the same through the app’s own formula.
Check the look
After every publish:summer_app_screenshot { "appId": "<app id>" }summer_app_screenshot { "appId": "<app id>", "width": 390 }: on a phone, secondary columns hide and the table stays readable.summer_app_screenshot { "appId": "<app id>", "theme": "dark" }
errors and console, and every refused call that is not a write. The screenshot is read-only, so saves are refused there; they work in Studio.
What it uses
SDK:summer.ready; summer.data.collection("weapons") with .list(), .patch(), .get() and .subscribe(); summer.data.collection("settings").get("rules"); summer.data.commands() to save all table edits in one revision; summer.agent.send("weapons.saved") after a save; summer.agent.tool("nerf_weapon"); summer.page.declare() with a Save action.
Kit: summer-page; summer-stats and summer-stat (weapons, median DPS, over budget); summer-section; summer-chart (kind="bar", x="name", y ["dps"], highlight { "above": 60, "tone": "bad", "label": "Over budget", "otherLabel": "In budget" }, reference { "value": 60, "label": "Budget" }); summer-table (row-key="id", sortable, editable number columns, a DPS column with type: "bar" and over: 60); summer-save-bar; summer-notice for a failed load.
The save path, from the table’s edits to one data revision:

