Figma in, a finished website out
The Creogen Framework turns a Figma design into a Tailwind, Astro and Sanity site by filling components that already exist. Every rule serves one of these words. A rule that serves none gets deleted.
- Scalable
- Accessible
- Performant
- Best practice everywhere
- Every browser
- Every breakpoint and corner case
- Loved by Google and LLMs
- Fluid
- Buttery-smooth motion
The figure is a real instrument: the cam is the H1 token, the carriage is the viewport, the dial is what the browser renders. Use the arrow keys on it to step between Figma frames.
How it works
From a Figma file to an approved plan to a finished site, in small steps that each end with a check.
The flow
Small skills, each with one job and a clear finish line. The person types the user-invoked ones in order; the rule skills load themselves when the work needs them.
/creogen-setupFrames, locales, nav breakpoint, fonts, collections, staging that can’t be indexed./creogen-grillEvery unanswered question in the Figma file, asked in rounds, each with a recommended answer./creogen-planSections split, every element mapped to a component, every piece of content given a home. No code./creogen-buildOne tracer section end to end, then easy sections, then hard ones. Each one red against Figma, then green./creogen-reviewTwo reviewers in parallel: one checks the framework rules, the other checks Figma and the plan./creogen-shipQA per page, client markups, pre-launch, go live, two weeks of watching./creogen-retroWhat hurt becomes a better rule, recipe, gate or deletion.
Never reinvent the wheel
For every section and element, climb from the bottom and stop at the first rung that works. The dashed rungs need a human’s approval before anything is built.
- Use a recipeA saved section such as
cta-bandorfaq-sticky-left. Fill its data. - Compose existing componentsSection, ContentWrap, Layout, Grid, Card. Save it as a recipe if it will appear again.
- Set a propSame component, different value.
- Pick a variantSame component, different look or layout.
- Propose a variantAt least 70% of the structure shared, same purpose.
- Propose a propThe difference is content or an editor’s on/off choice.
- Propose a new componentLast resort: name, purpose, props, variants, and why nothing else fits.
Every piece of content has one home
Collection
Many items of the same shape.
- Lists, filters, own URLs, schema
- Used on more than one page
- Prices, counts and ratings that must agree everywhere
Global
Identical everywhere, edited once.
- Nav, footer, banner
- Content in a singleton, no props
Reusable block
Shared, with optional overrides.
- A CTA band on eight pages
- Empty override means the shared text
- Pasted into three pages? It becomes one
Local
Belongs to this section only.
- Hero copy, a one-off feature list
- Stored on the page
The design system
Tokens, components and the rules that make every element configurable without custom code.
Fluid rules, exact at every frame
Each token gets one value per Figma frame. The compiler draws a straight line between neighbouring frames and writes one clamp() per segment, so the size is exactly what the designer drew at every frame and never jumps in between.
Behalte dein Unternehmen im Griff
This heading uses the generated rule below. Resize the window and watch it hit 32, 48 and 64 exactly.
"h1": { "mobile": 32, "tablet": 48, "laptop": 64, "desktop": 64 }
:root { --text-h1: clamp(2rem, 1.0458rem + 4.0712vw, 3rem); } /* 375 → 768 */
@media (width >= 48em) { :root { --text-h1: clamp(3rem, -0.4286rem + 7.1429vw, 4rem); } } /* 768 → 992 */
@media (width >= 62em) { :root { --text-h1: 4rem; } } /* 992 and up */
Defaults for every element
Nothing on a page falls back to the browser, and nothing comes from anywhere but Figma. Every HTML element has a decided default; every value below is read from the Figma master template, with Creogen blue as the brand colour.
Theme modes from Figma
Four modes ship: Light, Dark, Tint and Brand. Every semantic colour is defined in each. The fifth Figma mode, Wireframe, is for wireframing only.
Neutrals are black #0a0d0b and white at fixed opacities (70, 50, 16, 10, 8, 4%), so one token works on any surface. Radius: buttons 8, images 12, cards 16. Container 1280, side padding 20 → 80.
Elements with a decided default
- html
- body
- h1–h6
- p
- a
- strong
- em
- small
- sub, sup
- mark
- code, pre
- ul, ol, li
- dl
- blockquote
- q
- hr
- img
- svg, video, iframe
- figure, figcaption
- table, th, td, caption
- label
- button
- input, select, textarea
- ::placeholder
- autofill
- fieldset, legend
- details, summary
- dialog, ::backdrop
- progress, meter
- [hidden]
- ::selection
- :focus-visible
- :disabled
Everything is a variant
Any difference between two instances of any element is an axis: a named, token-bound setting. The same axis has the same name and values on every component, so a button, a card, a list, a badge, a nav or a form field are all configured the same way. Nothing ever needs one-off CSS.
Try it on any component
Pick a component. The controls stay the same; the ones a component doesn’t use are switched off.
The universal axes
| Axis | Values | Used by, for example |
|---|---|---|
variant | solid, outline, ghost, link, cover, stacked | Button, Card, Badge, Tab, Nav item |
tone | inherit, neutral, accent, brand, success, warning, danger | Button, Badge, Notice, Icon, list markers |
theme | inherit, light, dark, brand | Section, Card, Nav, Footer, Modal |
size | xs, sm, md, lg, xl | Button, Icon, Badge, Input, Avatar |
look | text sizes, h6 to h1, display | Heading, RichText, Plain |
padding, gap | space tokens | Section, Card, any group of children |
direction, columns, wrap | vertical, horizontal, grid; 1 to 12 | Lists, ButtonWrap, Grid, Card, Footer |
align | start, center, end, stretch, center-mobile | ContentWrap, ButtonWrap, Card, lists |
radius, border, elevation | token steps | Card, Button, Visual, Input, Dropdown |
media, ratio | top, start, end, background; 16/9 and friends | Card, Layout, Hero, Visual |
icon | name, position, size, tone | Button, Nav item, Input, Tab, list markers |
marker, divider | bullet, number, icon, check, dash; line, dot | Lists, steps, timelines, Nav, Table |
state | hover, focus, selected, current, disabled, loading, error, empty | Every interactive component, from real attributes |
motion | none, fade, rise, scale | Entrances, reveals, opens |
Every layout axis also takes a value per range, so columns: { large: 3, medium: 2, small: 1 } means the same thing on a grid, a list or a footer.
Anatomy of a section
Every band of every page is one Section. Padding lives on the section itself, so there are no spacer elements, and the container answers container queries.
- Themeinherit, light, dark, brand; nests
- Paddingnone, even, small, main, large, page top
- Heightauto or screen (
svh) - Widthsmall, main, full
Look and tag are separate
Figma decides how a heading looks. The page outline decides its level. The build fails on a skipped level or a second h1.
Design tokens
Every UI parameter from the Figma master template, read straight from its variables and styles. The template’s placeholder brand green is replaced by Creogen blue; everything else is exactly as designed.
Colour primitives
The raw palette. Neutrals are black and white at fixed opacities, so one token reads correctly on any surface. Components never use these directly; they use the semantic colours below.
- Brand/Primary#3d7ffftemplate #00ff88
- Brand/Primary Hover#2f6be0template #00d873
- Black/100#0a0d0b
- White/100#ffffff
- Black/70#0a0d0b · 70%
- White/70#ffffff · 70%
- Black/50#0a0d0b · 50%
- White/50#ffffff · 50%
- Black/16#0a0d0b · 16%
- White/16#ffffff · 16%
- Black/10#0a0d0b · 10%
- White/10#ffffff · 10%
- Black/08#0a0d0b · 8%
- White/08#ffffff · 8%
- Black/04#0a0d0b · 4%
- White/04#ffffff · 4%
- Accent/Star#ffb800
- Brand/Accent#3d7ffftemplate #00ff88
- Brand/On Primary#0a0d0b
- Neutral/Tint#f4f4f1
- Brand/Primary Subtle#3d7fff · 20%template #00ff88 · 20%
Semantic colours in every mode
48 colours, each defined in all 5 modes. A section picks a mode; every component inside follows. Wireframe is for wireframing only and never ships. Each cell shows the colour on that mode’s own background, with the primitive it points to.
| Token | Light | Dark | Tint | Brand | Wireframe |
|---|---|---|---|---|---|
Background/Primary--background-primary | White/100 | Black/100 | Neutral/Tint | Brand/Primary | White/100 |
Text/Primary--text-primary | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Text/Secondary--text-secondary | Black/70 | White/70 | Black/70 | Black/70 | Black/70 |
Button/Primary/Background--button-primary-background | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Primary/Text--button-primary-text | White/100 | Black/100 | White/100 | White/100 | White/100 |
Button/Primary/Background Hover--button-primary-background-hover | Black/70 | White/70 | Black/70 | Black/70 | Black/70 |
Button/Secondary/Border--button-secondary-border | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Secondary/Text--button-secondary-text | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Secondary/Background Hover--button-secondary-background-hover | Black/08 | White/08 | Black/08 | Black/08 | Black/08 |
Background/Secondary--background-secondary | Black/04 | White/04 | White/100 | White/16 | Black/04 |
Text/Tertiary--text-tertiary | Black/50 | White/50 | Black/50 | Black/50 | Black/50 |
Border/Primary--border-primary | Black/16 | White/16 | Black/16 | Black/16 | Black/16 |
Border/Secondary--border-secondary | Black/08 | White/08 | Black/08 | Black/08 | Black/08 |
Button/Primary/Icon--button-primary-icon | White/100 | Black/100 | White/100 | White/100 | White/100 |
Button/Primary/Icon Background--button-primary-icon-background | White/16 | Black/10 | White/16 | White/16 | White/16 |
Button/Secondary/Icon--button-secondary-icon | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Secondary/Icon Background--button-secondary-icon-background | Black/10 | White/10 | Black/10 | Black/10 | Black/10 |
Tagline/Text--tagline-text | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Tagline/Background--tagline-background | Black/04 | White/08 | Black/04 | Black/04 | Black/04 |
Tagline/Border--tagline-border | Black/08 | White/16 | Black/08 | Black/08 | Black/08 |
Rating/Star--rating-star | Accent/Star | Accent/Star | Accent/Star | Accent/Star | Black/50 |
Rating/Text--rating-text | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Rating/Background--rating-background | White/100 | White/04 | White/100 | White/100 | White/100 |
Rating/Border--rating-border | Black/16 | White/16 | Black/16 | Black/16 | Black/16 |
Bullet/Icon--bullet-icon | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Bullet/Icon Background--bullet-icon-background | Black/08 | White/10 | Black/08 | Black/08 | Black/08 |
Bullet/Text--bullet-text | Black/70 | White/70 | Black/70 | Black/70 | Black/70 |
Input/Background--input-background | White/100 | White/04 | White/100 | White/100 | White/100 |
Input/Border--input-border | Black/16 | White/16 | Black/16 | Black/16 | Black/16 |
Input/Placeholder--input-placeholder | Black/50 | White/50 | Black/50 | Black/50 | Black/50 |
Media/Background--media-background | Black/08 | White/08 | Black/08 | Black/08 | Black/08 |
Media/Icon--media-icon | Black/16 | White/16 | Black/16 | Black/16 | Black/16 |
Logo/Fill--logo-fill | Black/50 | White/50 | Black/50 | Black/50 | Black/50 |
Tabs/Background--tabs-background | Black/04 | White/04 | White/100 | Black/04 | Black/04 |
Tabs/Text--tabs-text | Black/70 | White/70 | Black/70 | Black/70 | Black/70 |
Tabs/Active Background--tabs-active-background | Black/100 | White/100 | Black/100 | Black/100 | Black/100 |
Tabs/Active Text--tabs-active-text | White/100 | Black/100 | White/100 | White/100 | White/100 |
Icon/Primary--icon-primary | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Link/Text--button-link-text | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Button/Link/Text Hover--button-link-text-hover | Black/70 | White/70 | Black/70 | Black/70 | Black/70 |
Card/Background--card-background | Black/04 | White/08 | White/100 | White/16 | Black/04 |
Card/Border--card-border | Black/08 | White/16 | Black/08 | Black/08 | Black/08 |
Icon/Background--icon-background | Black/08 | White/10 | Black/08 | Black/08 | Black/08 |
Highlight/Background--highlight-background | Black/100 | White/100 | Black/100 | Brand/On Primary | Black/100 |
Text/Accent | Brand/Accent | Brand/Accent | Brand/Accent | Brand/On Primary | Black/100 |
Graphic/Primary | Brand/Primary | Brand/Primary | Brand/Primary | White/16 | Black/16 |
Graphic/Secondary | Brand/Accent | Brand/Accent | Brand/Accent | Brand/Accent | Black/10 |
Badge/Background | Brand/Primary Subtle | Brand/Primary Subtle | Brand/Primary Subtle | Brand/Primary Subtle | Black/08 |
Typography
Schibsted Grotesk Medium for headings, Inter Regular and Medium for text. Sizes have a Desktop and a Mobile value; samples below scale fluidly between the 390 and 1280 frames, so resize the window to see both.
| Style | Sample | Mobile → desktop | Line height, tracking |
|---|---|---|---|
| Heading/H1 | Aa Gg | 40 → 56 | 1.1 · -3% |
| Heading/H2 | Aa Gg | 32 → 48 | 1.1 · -3% |
| Heading/H3 | Aa Gg | 28 → 40 | 1.1 · -2% |
| Heading/H4 | Aa Gg | 24 → 32 | 1.1 · -2% |
| Heading/H5 | Aa Gg | 20 → 24 | 1.1 · -2% |
| Heading/H6 | Aa Gg | 18 → 20 | 1.1 · -2% |
| Text/XL/Regular | The quick brown fox | 18 → 20 | 1.5 · 0% |
| Text/XL/Medium | The quick brown fox | 18 → 20 | 1.5 · 0% |
| Text/L/Regular | The quick brown fox | 16 → 18 | 1.5 · 0% |
| Text/L/Medium | The quick brown fox | 16 → 18 | 1.5 · 0% |
| Text/M/Regular | The quick brown fox | 15 → 16 | 1.5 · 0% |
| Text/M/Medium | The quick brown fox | 15 → 16 | 1.5 · 0% |
| Text/S/Regular | The quick brown fox | 13 → 14 | 1.5 · 0% |
| Text/S/Medium | The quick brown fox | 13 → 14 | 1.5 · 0% |
Radius
A scale with a desktop and a mobile value, plus three semantic radii that point at it.
- Scale/None0 → 0
- Scale/XS4 → 4
- Scale/S4 → 8
- Scale/M8 → 12
- Scale/L12 → 16
- Scale/XL16 → 20
- Scale/2XL20 → 24
- Scale/3XL24 → 32
- Scale/Round999 → 999
- Button4 → 8Scale/S
- Image8 → 12Scale/M
- Card12 → 16Scale/L
Spacing and layout
Each bar pair shows the mobile value (light) and the desktop value (solid) in pixels. The scale comes first, then the semantic spacing that points at it.
- Scale/00 → 0
- Scale/44 → 4
- Scale/88 → 8
- Scale/128 → 12
- Scale/1612 → 16
- Scale/2016 → 20
- Scale/2420 → 24
- Scale/3224 → 32
- Scale/4032 → 40
- Scale/4840 → 48
- Scale/5640 → 56
- Scale/6440 → 64
- Scale/8040 → 80
- Scale/9640 → 96
- Scale/11240 → 112
- Button/Padding XScale/2016 → 20
- Button/Padding YScale/128 → 12
- Section/Padding LScale/11240 → 112
- Section/Content GapScale/2420 → 24
- Section/Padding MScale/8040 → 80
- Section/Padding SScale/4840 → 48
Desktop frame: content max width 1280 px with 80 px side padding. Mobile frame: 390 px wide with 20 px side padding.
Shadows
Three elevation steps, each two layered shadows.
- Shadow/S
0px 1px 2px 0px rgba(13,13,20,0.06), 0px 2px 8px 0px rgba(13,13,20,0.06) - Shadow/M
0px 4px 12px 0px rgba(13,13,20,0.08), 0px 12px 32px 0px rgba(13,13,20,0.08) - Shadow/L
0px 8px 24px 0px rgba(13,13,20,0.1), 0px 24px 64px 0px rgba(13,13,20,0.14)
Every screen
Every width, every browser, every input method, and motion that never costs speed or access.
Every breakpoint, every corner
Components respond to the space they actually have, not the screen. Ranges are container queries, desktop first, as the team designs.
Every page is checked at these widths, plus a sweep from 320 to 1920 in steps of 10 px that fails on any sideways scroll. Dark chips are the Figma frames.
- 320
- 360
- 375
- 390
- 414
- 430
- 480
- 540
- 600
- 640
- 720
- 768
- 820
- 834
- 900
- 992
- 1024
- 1080
- 1180
- 1280
- 1366
- 1440
- 1536
- 1680
- 1920
- 2560
Then the corners: phone landscape, foldables, ultra-wide, short screens, 200% and 400% zoom, text spacing overrides, the longest German heading, empty content, touch and keyboard, dark mode, forced colours, reduced motion, print, right-to-left and notches.
Every browser, never broken
The latest two versions of Chrome, Edge, Firefox, Safari on Mac and iOS, Samsung Internet and Chrome on Android, checked on a real iPhone, Android phone and iPad. Newer features sit behind @supports and fall back to a working, static page.
| Known quirk | The Creogen answer |
|---|---|
100vh on phones | svh and dvh units for full-height sections |
| Sticky inside overflow hidden | overflow: clip on ancestors |
| iOS zooms small inputs | Form fields at least 16 px on touch |
| iOS autoplay | muted playsinline with a poster |
| Scroll-driven motion, view transitions, text trim | Behind @supports; the fallback is the finished state |
| Fonts render differently | Metric-matched fallbacks, so swapping causes no shift |
Motion that feels expensive and costs nothing
Only transform, opacity, filter and clip-path move. Content is visible without JavaScript. Everything stops under reduced motion. Press each tile to feel the token.
Found and fast
What search engines and answer engines reward, and the budgets every page is held to.
Loved by Google and by LLMs
Search engines and answer engines reward the same things: fast pages, clean HTML, a stable entity, honest specific content and answers that stand on their own.
- SEO
Full head per page and locale, canonical, hreflang, sitemaps, robots, redirects for every old URL.
- AEO
Each key page answers its main question in the first 40 to 60 words, under question-shaped headings.
- GEO
Specific numbers with sources and dates, comparison tables in real HTML, facts from one source so every page agrees.
- AIO
One JSON-LD graph per page: organisation, website, page, breadcrumbs and the page’s own type. Nothing important hidden behind scripts.
- pSEO
Generated pages ship only with real data per row, at least 40% unique content, human review and staged indexing.
- Consent
No tag before consent, Consent Mode v2 wired, every tag inside the performance budget.
Budgets, checked on every preview
Bars show how much of each lab budget a typical Creogen page uses. Our targets are stricter than Google’s “good” thresholds.
- Largest paint≤ 1.2 s
- Layout shift0.00
- Blocking time≤ 50 ms
- Homepage JS≤ 15 kB
- Homepage weight≤ 500 kB
- Lighthouse100 × 4
- axe violations0
How the agent takes calls
Rules say what is right. Judgment says what to do when the rules run out, the way the lead developer would, and it gets sharper every time a human corrects it.
Every call has one of four outcomes
Before acting on anything the rules do not fully settle, the agent sorts the call. When unsure, it takes the stricter row.
- NeverAnything that touches a live site, published pages, production CMS, DNS, live forms or real customer data. Even reading happens only when asked. The one exception is an explicit instruction in the conversation that names the site and the action.
- Ask firstOne-way doors: slugs, CMS schema that already holds content, deletions, redirects, published copy, brand or numbers Figma did not specify, and anything that conflicts with a dev note or the plan.
- Decide and flagReversible and inside the rules, but with no default or precedent. The agent does it, logs it as pending, and lists it at the top of the hand-off.
- DecideReversible, inside the rules, and covered by a standing call or a logged precedent. The agent does it and notes it.
When rules pull against each other
The higher one always wins. If a higher priority blocks the design, the design changes through a question, never silently.
- Safety of live sites and client data
- Accessibility and legalWCAG AA, GDPR, imprint, consent
- What the designer meantFigma, dev notes, the approved plan
- Reuse and consistencyReuse ladder, axes, tokens
- Performance
- Search and LLM visibility
- Polish
Precedent before a new decision
The agent searches in this order and follows the first match, even if it would have chosen differently. Disagreement goes to the retro, not into the build.
- This project’s decision log
decisions.md - Standing calls29 defaults, below
- Gold examplesSections you approved
- Framework rulesThe references
Standing calls
How the recurring questions are decided. Each is the call and its reason. A project can override one in its decision log; new ones arrive only through the retro.
Live systems and safety4 calls
- Live sites are read-only. No edits, publishes, CMS writes, asset changes or schema changes on a production site, ever, unless the person names that site and that action in the current conversation. Reason: one wrong call costs a client’s revenue and trust; nothing in a build is worth that risk.
- Reading a live site happens only when asked. Use staging, a branch, a duplicate or Figma for study instead.
- Work happens on staging or a branch; a human publishes. Agents never publish to production domains.
- Never delete; archive or unpublish, and only on staging. Deletion is a one-way door.
Structure6 calls
- CMS when content repeats on 2+ pages, editors will change it, it needs its own URL, it is filtered or sorted, or it carries numbers that must agree everywhere. Otherwise local props.
- Reusable block when the same section with the same content appears on 3+ pages; overrides for the parts that differ.
- Global when it is identical everywhere and has no props (nav, footer, banner).
- A new variant only when structure is ≥ 70 % shared and the purpose is the same; otherwise a new component, through approval.
- Slots over props when the inner content varies in kind (a form here, an image there); props when only values vary.
- One component per job: a Clickable for whole-card links, never nested anchors.
Content and copy4 calls
- Never invent copy, numbers, ratings, logos or testimonials. Missing content gets a clearly marked placeholder and a question.
- Keep the site’s language and address form (German "Du" vs "Sie" follows the existing site); never mix.
- Slugs: lowercase, hyphens, transliterate umlauts (ä → ae), no stop-word stuffing, never change a live slug without a redirect plan approved by a human.
- Headings follow the outline, not the look; one
h1.
Design fidelity4 calls
- Snap within 2 px or one step; beyond that ask. Record every snap.
- A missing frame (no tablet design): derive from the nearest frames with the axes; flag it.
- A missing state (hover, focus, empty, error): use the component’s standard state; flag it.
- A one-off value repeated 3 times in Figma is a missing token, not three exceptions.
Media3 calls
- Images: AVIF with WebP fallback, sized to the largest rendered width × 2, alt text drafted from context and flagged for review; decorative images get empty alt.
- Video: muted, playsinline, poster always, no autoplay above the fold on mobile data.
- Icons: SVG,
currentColor, size from the icon axis.
Forms and tracking2 calls
- Forms: real labels, native validation plus clear messages, consent checkbox only when legally required, success and error states always built.
- Tracking: nothing fires before consent; event names follow the analytics contract; never change a live tag container.
Performance and SEO3 calls
- No library for something CSS can do. No JS for layout.
- Every page: title, description, canonical, OG image, JSON-LD graph; missing values become questions, not guesses.
- Third-party embeds load on interaction or below the fold.
Process3 calls
- Tracer section first, then easy sections, then hard ones.
- Ask in batches, never block on an answer.
- When two defaults conflict, the priority order in
SKILL.md§2 decides; record the call.
Every non-obvious call is written down
One entry per call in the project’s decisions.md. States: decided, pending, asked, approved, overridden.
## D-014 · 2026-11-12 · decided · reversible Call: FAQ items stored as a collection, not local props Why: same questions on pricing and product pages (rule of three met) Alternatives: local props per page (rejected: duplicate edits) Owner: agent · Review: lead dev
Questions go out in one message, all open calls together, each with options and a recommended answer, so a single “yes” approves it. The agent keeps building everything that does not depend on the answer.
How it learns your judgment
Rules alone make a careful developer. Your corrections and your finished work make it build like you.
- You override a callThe log marks it overridden.
/creogen-retroTurns it into a standing call or a rule edit.- A test case is addedThe same miss can never pass again.
- Next projectThe agent follows the new precedent.
Gold examples with /creogen-capture
After you approve a section, capture it: the Figma frame, what was built, the components and axes chosen, where the content lives, and one line on why for every non-obvious choice, including the ones that look wrong but are right. Agents copy what they see, so these teach more than any rule. Capture only reads Figma, staging, a branch or a repo, never a live site.
Reference
The skills you type, the ones that load themselves, and the shared words they use.
The skills
Typed by a person
- /ask-creogen
- Points to the right skill when you’re unsure.
- /creogen-setup
- Configures a new project once.
- /creogen-grill
- Settles every open design question.
- /creogen-plan
- Turns a Figma page into an approved section plan.
- /creogen-build
- Builds the plan, section by section, red to green.
- /creogen-review
- Framework and Figma, reviewed side by side.
- /creogen-ship
- QA, client QA, launch.
- /creogen-handoff
- Passes work on without losing anything.
- /creogen-retro
- Improves the framework from what hurt.
- /creogen-capture
- Turns an approved section into a gold example.
Loaded when needed
- creogen-framework
- The laws and 17 reference files: tokens, components, CMS, motion, media, search, quality, checklist.
- creogen-search
- SEO, AEO, GEO, AIO and pSEO on any page.
- creogen-quality
- Performance, accessibility, every browser, every breakpoint.
- creogen-judgment
- How to take calls, standing calls and the decision log.
Shared language
One word, one meaning, for people and agents alike.
- Frame
- A Figma artboard width; values are exact there.
- Snap
- Use the nearest token within 2 px and record it. Beyond that, ask.
- Recipe
- A saved section composition with defaults.
- Variant
- A different look or layout of the same component.
- Home
- Collection, global, reusable block or local.
- Override
- An optional field on a shared block; empty means shared.
- Look and tag
- How a heading looks versus its level in the outline.
- Dev note
- Any Figma annotation. Binding; conflicts become questions.
- Tracer section
- The first section built end to end to prove the pipeline.
- Call
- A decision the rules do not fully settle: decide, decide and flag, ask first, or never.
- One-way door
- A change that cannot be cleanly undone once seen. Always asked first.
- Gold example
- An approved section with the reason behind every non-obvious call.
- Gate
- An automated check. Floor gates block the release.