One talent. Daily output. Double down on what beats the baseline.
Cadence is a virtual-talent operating system. It runs one original character — not a celebrity mashup — through a locked visual canon, a daily short-form queue, a format lab that freezes a testing baseline, and a fan desk that treats messages as the P&L.
The public case that inspired it went from $870 → $15.7k in 30 days. Sixty-eight percent of month two was messages, not the subscription. The pipeline was right. The asset and the store were not. Cadence keeps the pipeline and replaces both.
CANON → QUEUE → LAB → VARY → DOOR → DESK
face 2–3/day 1.8× one sub messages
voice start locked variable is the + banked
rules frame baseline per take door drops
- Canon — lock identity before you chase outfits. Original IP only.
- Queue — two or three shorts a day. Start frame, then motion, then caption. Never ask a video model to invent the face.
- Lab — the first ten posted takes freeze the baseline. Winners do not get to raise the bar.
- Vary — change one variable. Keep the hook structure. Ship the outlier, not a new girl.
- Door — the profile converts. Membership opens the relationship.
- Desk — reply the same day. Attach a banked drop. Messages should out-earn the sub.
Full argument: docs/PLAYBOOK.md. Operating manual: docs/OPERATING.md. Internals: docs/ARCHITECTURE.md.
| Surface | Route | Job |
|---|---|---|
| Desk | / |
Revenue mix, locked baseline, today's three slots, outlier ranking, editor brief |
| Canon | /canon |
Face, voice, visual law, do / don't |
| Lab | /lab |
Formats vs the frozen baseline. Vary winners. Copy start-frame + motion prompts |
| Queue | /pipeline |
Build a take, draft captions, log views against the bar |
| Fans | /fans |
Threads, LTV, banked drops. Draft replies in-character |
| Playbook | /playbook |
Why this exists |
Seeded talent is Juno Park (@juno.park) — 26, Manchester / Seoul, analog photographer, Contax T2, charcoal coat, cream turtleneck. Original face. Documentary iPhone language. No glamour grade.
Demo books:
| July (test) | August (system) | |
|---|---|---|
| Messages | $540 | $9,620 |
| Memberships | $280 | $2,890 |
| Tips | $100 | $1,240 |
| Prints | — | $460 |
| Total | $920 | $14,210 |
August messages are 68% of the month. That is the number the original thread got right.
Cadence does not use a trailing average. Trailing averages hide winners once you start repeating them.
- Take the first 10 posted pieces. That window is the test.
- Baseline = median views of that window.
- A format is an outlier at ≥ 1.8× that median, quiet below 0.7×, otherwise baseline.
- Status needs at least two posted takes; a single result stays testing.
Juno's seeded bar is 10.4k. Load film sits at 6.8×. Walk-in at 4.5×. Window seat is quiet. The lab will tell you to stop inventing premises and ship film variations.
Implementation: src/lib/stats.ts.
Four user-initiated calls to Grok (grok-4.5) via XAI_API_KEY. Nothing runs on page load. Caps at 700 tokens.
| Action | Where | Returns |
|---|---|---|
| Brief me | Desk | Four bullets: double down, stop, drop to push, today's order |
| Vary this | Lab | One-variable format (prompts + hook + caption) |
| Draft captions | Queue | Three captions in Juno's voice |
| Draft reply | Fans | One DM, drop attached only if it fits |
The editor is instructed to stay SFW, never sexualise, never copy celebrity faces, and never rebuild the identity. If the key is missing, the buttons say so instead of mocking a reply.
- React 19 + TanStack Start / Router
- Tailwind v4
- Zustand +
localStorage(cadence-v1) — no auth, no database - xAI Chat Completions for the editor (server function only)
- Vite 8, Nitro (Vercel preset)
State lives in the browser on purpose. This is a single-operator studio, not a multi-tenant SaaS. Reset from Canon → Restore demo.
Requires Node 22.
git clone https://github.com/anwhelan01/cadence.git
cd cadence
npm install
cp .env.example .env # optional — editor features need XAI_API_KEY
npm run devApp binds 0.0.0.0:8080.
npm run typecheck
npm run buildXAI_API_KEY is server-only. Do not prefix it with VITE_.
src/
routes/ Desk, Canon, Lab, Queue, Fans, Playbook
components/ App shell + UI primitives
lib/
seed.ts Juno Park, formats, posts, fans, drops, months
stats.ts Locked baseline + outlier ranking
store.ts Zustand persist
ai.ts Editor server function
canon.ts Identity block passed into every prompt
public/talent/ Master, PFP, feed, and 9:16 start frames
docs/ Playbook, operating manual, architecture
- Celebrity face references. Juno is original IP.
- A paid-nude factory. Direct fan revenue here is prints, essays, voice notes, locked sets.
- Vibes-based “this one did well.” The lab uses a frozen testing baseline.
- An empty wall. Drops are banked on the fan desk before the queue is full.
MIT. See LICENSE.
This desk is a named Hermes Bot — own model slot, memory, skills, routines, and @mentions.
# once
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# this repo
./scripts/install-hermes-bot.sh
hermes -p cadence chatIn Hermes Desktop the Bot lands under Bots. Type @cadence from any chat; group it with the rest of the k3ss roster (studio).
| File | Role |
|---|---|
AGENTS.md |
Project harness Hermes loads at session start |
.hermes/SOUL.md |
Bot personality |
.hermes/bot.yaml |
Roster, skills, groups |
.hermes/skills/cadence/SKILL.md |
Portable skill |
Docs: Bot Mode · Context files · Skills
