Starters and the harvest loop
Starters
Five ship with Cleya:
| Starter | Shape |
|---|---|
promo-hero | Headline-led product promo, one stat, CTA close. 16:9, 10s. |
stat-story | Dark stat-led story, 8s. |
opener-card | Short title card, 5s. |
feature-trio | Three features, 12s. |
story-vertical | 9:16, TikTok-safe, 8s. |
cleya starters # list, with "when to reach for this"
cleya starters --name stat-story --copy-to ./work # scene + neutral brand into a directory
Every shipped starter is contract-tested: it must compile with zero errors and zero warnings against the neutral default brand, and must be token-clean. A change to the DSL that breaks a starter breaks the build — which is what makes "first render is right" more than a slogan.
Harvest — quality that compounds
When a bespoke job comes out well, promote it:
cleya harvest --scene work/promo.scene.json --brand brand.json \
--name book-flip-promo \
--when "Book-brand promo with flipping titles"
Harvest does four things:
- Measures first. Probe frames are rendered and run through the instruments. Alignment
defects block the write (override with
--force, findings on record); contrast findings warn. - De-brands. Concrete colours are mapped back to
$palette.*tokens — including gradients — so the shape is reusable under any brand. Token-clean scenes pass straight through. - Derives structure. Copy slots and a beat map are detected automatically.
- Files it. Into your user library at
~/.cleya/starters(override withCLEYA_STARTERS_DIR), wherestartersanddraftpick it up alongside the shipped set.
Shipped names are collision-protected, sources are tagged, and the default brand for a harvested starter is always the shipped neutral — so a harvested shape never leaks the brand it was built for.
The point of the loop: a harvested starter is a third draft wearing a first draft's timestamp. Quality lives in artifacts, not in per-session thinking.