| type | Skill |
| name | Deploy Prototype |
| category | dev |
| description | Generate a small app or tool and deploy it live to Vercel via API |
| var | |
| tags | ["dev","build"] |
| requires | ["VERCEL_TOKEN?","GH_GLOBAL?"] |
${var} — What to build and deploy.
- Empty → auto-select from recent signals (articles, logs, memory topics).
- Plain text (e.g.
market heatmap) → interpret as a build brief.
- Typed form
type:slug description (e.g. tool:market-heatmap volume heatmap of top-20 tokens, viz:tx-graph, api:summarize, landing:startup-idea) → use type to bias shape and slug as the deployment name.
Today is ${today}. Your task is to ship a small, self-contained prototype that someone could actually use in the browser today.
Steps
-
Read context. Read memory/MEMORY.md and the most recent entries in memory/logs/ for active topics.
If running as part of a chain, scan injected upstream outputs for a concrete artifact worth making interactive.
-
Pick what to build (if ${var} is empty or vague).
Scan these sources, in order, for prototype-worthy signals:
output/articles/ — last 7 entries by mtime: any claim, finding, or dataset that would be more useful as an interactive page?
memory/topics/*.md — running narratives; pick one with a live data source (prices, feeds, markets)
memory/logs/${today}.md and the two prior days — skill outputs flagged as interesting
memory/MEMORY.md → "Next Priorities" and "Recent Articles"
Score each candidate 1-5 on:
- Leverage — does an interactive version beat the static write-up?
- Concreteness — is the spec obvious in one sentence? (if no, reject)
- Novelty — haven't shipped this in the last 14 days (check
output/articles/prototype-*.md by mtime and any memory/topics/prototypes.md)
Pick the highest-total candidate. If no candidate reaches 9/15, skip building and exit as DEPLOY_PROTOTYPE_EMPTY (step 9).
Record the chosen signal — its source file(s) and one-line rationale — you'll use it in steps 6 and 7.
-
Commit to a shape before writing code. Before touching .pending-deploy/, write out (in your reasoning, not a file):
- Slug:
aeon-prototype-<descriptor>, all lowercase, [a-z0-9-], 3–50 chars after prefix (e.g. aeon-prototype-market-heatmap). If ${var} supplied a typed slug, use it; otherwise derive one.
- Tagline (≤90 chars) — the one-liner that appears in the page title and OG tags.
- Primary action — what is the one thing a visitor does in the first 10 seconds? (read a number, click a filter, submit an input, compare two things). If you can't name it, go back to step 2.
- Shape: static HTML+JS / static +
api/ function / Next.js. Default to static single-file HTML unless the idea genuinely needs a serverless function.
Environment Variables
VERCEL_TOKEN — the live Vercel deploy in step 8. Used in-run via ./secretcurl (the {VERCEL_TOKEN} placeholder). Without it, the build succeeds but the deploy is skipped (DEPLOY_PROTOTYPE_NO_TOKEN).
GH_GLOBAL — the optional GitHub source mirror in step 8. Used ambiently by gh (it's the run's GH_TOKEN); a missing token just skips the mirror.
Both are declared optional (?) so the skill degrades gracefully: no VERCEL_TOKEN → build-only; no GH_GLOBAL → deploy without the source mirror. Never read the token values directly and never embed them in any deployed file (step 6 greps for them).
Guidelines
- A prototype is not a PoC. It's a page someone with zero context can load, understand in 10 seconds, and get value from. Hold that bar.
- Single
index.html is almost always the right answer. Resist the urge to add tooling.
- Max ~5 files (enforced at 20 in pre-flight).
- Descriptive slugs.
aeon-prototype-market-heatmap, not aeon-prototype-1.
- Never hardcode secrets. If a public-auth endpoint isn't enough for the idea, drop the idea.
- The Vercel deploy (and the optional GitHub source mirror) happen in-run in step 8 via
./secretcurl / gh — an irreversible side-effect run as the skill's final, fail-closed action. Build the files, metadata, and payload correctly in steps 4–6 so that final call goes clean.
Network note
Steps 1–7 are local — file writes and notify only. Step 8's deploy is the one outbound side-effect and it runs in-run: the Vercel deployment via ./secretcurl with the {VERCEL_TOKEN} placeholder (a bare $VERCEL_TOKEN on the command line is refused by the Bash permission layer, so never use plain curl for it), and the optional GitHub mirror via gh (authenticated ambiently as GH_GLOBAL). There is no deferred/postprocess step — the deploy is the skill's final, fail-closed action: on any non-2xx it exits DEPLOY_PROTOTYPE_DEPLOY_FAILED and keeps .pending-deploy/ for a retry.