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

  • 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

With the next Summer Engine update, the app can also write res://data/weapons.json; check summer.engine.status() first.

Seed the data

One summer_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:
In the answer, the bow record has "damage": 40 and a revision, here 1. Write 10% less damage, only if nobody changed the bow since the read:
The bow’s DPS goes from 48 to 43.2. A 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" }
Fix every entry in 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: