deploy-prototype
Generate a small app or tool and deploy it live to Vercel via API
git clone --depth 1 https://github.com/aeonfun/aeon /tmp/deploy-prototype && cp -r /tmp/deploy-prototype/skills/deploy-prototype ~/.claude/skills/deploy-prototypeSKILL.md
<!-- autoresearch: variation B — sharper output via prototype quality bar + self-check + signal-anchored record -->
> **${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
1. **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.
2. **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.
3. **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.
4. **Write the files.**
```bash
rm -rf .pending-deploy # clear stale state from prior runs
mkdir -p .pending-deploy/files
```
Write all project files into `.pending-deploy/files/`. This directory is the repo root — everything here is pushed to GitHub and deployed to Vercel.
**Quality bar — every prototype must meet these:**
- **Self-contained** — no external build step where avoidable. Prefer one `index.html` with inline `<style>` and `<script>`; fall back to a `main.css` / `main.js` only when size justifies it.
- **Loads in <1s on a cold visit.** No jQuery, no CDN UI libraries for a single-page tool. Vanilla JS or a ~10KB util max. No `<link rel="stylesheet">` to a CDN font unless it's one font.
- **Mobile-first, works on a phone.** Viewport meta set, tap targets ≥40px, no horizontal scroll at 360px wide.
- **Share-friendly.** Include `<title>`, `<meta name="description">`, `<meta property="og:title">`, `<meta property="og:description">`, `<meta property="og:type" content="website">`. Skip OG image unless you generate one.
- **Real content, not lorem.** If the prototype shows data, fetch it from a public no-auth endpoint at load time (CoinGecko, GitHub public API, public RSS, public JSON feeds) — or hardcode a recent, realistic snapshot with the timestamp visible. Never ship placeholder `[example data]`.
- **One visible CTA or primary surface.** Clear hierarchy: what does the visitor look at first?
- **Works with JS disabled to at least show the tagline** (progressive enhancement — not required for interactive tools, but the title and description must render server-free).
- **Light + dark via `prefers-color-scheme`** — 4 CSS vars is enough.
- **No secrets.** No API keys, tokens, or env vars embedded anywhere. If the idea requires auth, redesign around a public endpoint or drop the idea.
- **Include a `README.md`** in `.pending-deploy/files/` with: what it is (1 line), how to run locally (1 line), signal source (1 line link to the article/log/topic from step 2).
For **API endpoints**: place handlers in `api/` (e.g. `api/index.js` exporting `export default function handler(req, res) { ... }`).
For **Next.js**: keep it one page — `package.json` + `pages/index.js`. Only if the idea genuinely needs SSR.
5. **Write deploy metadata.** Create `.pending-deploy/meta.json`:
```json
{
"name": "aeon-prototype-<slug-from-step-3>",
"description": "One-sentence description, matches the OG description on the page",
"framework": null,
"tagline": "≤90 chars — matches <title> on the page",
"signal_source": "path or URL of the article/log/topic that triggered this prototype",
"primary_action": "what the visitor does in the first 10 seconds"
}
```
- `framework`: `null` for static; `"nextjs"`, `"svelte"`, etc. when used.
- The extra fields (`tagline`, `signal_source`, `primary_action`) are for the prototype record and downstream dashboards; the deploy step may ignore them.
6. **Build the Vercel deploy payload.** Write `.pending-deploy/payload.json`:
```json
{
"name": "aeon-prototype-<slug>",
"files": [
{ "file": "index.html", "data": "<!DOCTYPE html>...", "encoding": "utf-8"Set up and run an Aeon agent instance — get started from scratch, pick which skills to turn on or install more from packs, reschedule or change what runs, edit what an existing skill does, fix a skill that isn't firing, set the STRATEGY.md north star and soul/ voice, turn a coding-agent chat into a scheduled Aeon skill, and mine past coding-agent conversations for recurring work worth automating as a skill. Use when the user mentions Aeon, aeon.yml, an Aeon skill / instance / routine / pack, asks to schedule, enable, edit, or debug an agent that runs on a cron, or asks what of their repeated/manual work Aeon could take over.
Mention/keyword sweep on social platforms for [REPLACE: KEYWORDS] — trends, sentiment, top posts
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
Static config-correctness linter for this instance - catches the silent-failure class (unquoted schedules, duplicate keys, unconfigured skills, mode typos, broken requires/MCP refs) that no run-based health skill can see. Notifies only on problems.
Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.
Write a publication-ready article in one of three angles - a trending long-form piece, a watched-repo thesis, or a project-through-a-lens essay. Optional Replicate hero image with --visual.
Automatically merge open PRs that have passing CI, no blocking reviews, and no conflicts
Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.