Working demo · beta
Pick a typeface and a brand colour. Get colour ramps, a semantic token layer, a type scale, spacing, motion, component styles and page sections — generated, checked for contrast and accessibility as you work, and exported as working HTML.
Not a template gallery and not a website builder. The system is generated and validated: every failure is clickable and lands on the control that fixes it.
29s · recorded from the running demo, not a mockup
The problem
A founder or a developer picks a blue, picks a font, and then quietly makes four hundred more decisions by hand — every one of them a place for the system to become inconsistent or inaccessible.
Everything after the second decision should be derived, checked, and reversible. That is the whole product.
blue-600 instead of action-primary cannot be re-themed without a rewrite — which is why the semantic layer exists from the first commit here.The product
The start card asks three questions and builds a complete system before the user sees a single empty field. Every later step changes that system in place, with the live preview and the health score reacting on every keystroke.
One seed hex becomes OKLCH ramps from 50 to 950 with tapered chroma, a secondary and tertiary from published pairings, tinted neutrals, status colours that move away from a red brand, and light and dark semantic maps generated as siblings.
About forty curated faces in seven classes with pairing reasons, a ratio-driven clamp() scale, per-step line height, letter spacing and measure, a live payload counter, and fallback metrics so nothing shifts when the web font lands.
Spacing, radius with the nested rule, borders, brand-tinted shadows, breakpoints, grid, motion tokens with a bezier preview and an automatic reduced-motion block, icons, z-index layers. Every one has a default, so the step can be skipped.
Nine states for every interactive component, checked from a registry, and five kinds of page section in twenty types. No component references a primitive token; Tab reaches everything with a visible ring.
Contrast across theme × state × component, touch targets, German +35% and Arabic right-to-left inside real button widths, payload, reduced-motion coverage, tab order, heading hierarchy — one health score, every failure clickable.
One self-contained HTML file or a four-file bundle with subset fonts, three generated pages, and a README. Zero console errors, zero network requests, Lighthouse accessibility 100. Tokens in DTCG, Style Dictionary, CSS, SCSS, JS/TS, Tailwind, Swift and XML.




Architecture
Server-rendered FastAPI with Jinja and HTMX. The whole system is one
DesignSystem object per project, with immutable snapshots in SQLite behind
/s/<id>. Vanilla JavaScript only where a browser API demands it.
the parts that run on every keystroke engines and surfaces inputs and outputs, not code
Requirements against reality
This table is generated from the internal build tracker, not written by hand. A row counts as built only when every leaf under it has had its acceptance test actually run — never on the strength of a commit message.
Generated from the build tracker on 8 September 2026: 177 of 183 acceptance tests run and passing. A row is green only when every one of its leaves has had its test run — not when the code looked finished.
| Requirement | Leaves proven | State |
|---|---|---|
| Groundwork | ||
| D0 Decisions before any code | 5/5 | Built |
| v1 — generate and export | ||
| P0 Skeleton and data model | 12/12 | Built |
| P1 Color engine | 20/20 | Built |
| P2 Typography | 12/12 | Built |
| P3 Remaining foundations | 10/10 | Built |
| P4 Component styles | 10/10 | Built |
| P5 Page sections: five kinds, each with several types | 17/17 | Built |
| P6 HTML export and share — v1 ship line | 12/12 | Built |
| P7 Validation layer | 10/10 | Built |
| P8 Token exports and Figma | 6/9 | Partial |
| v2 — calm, presets, projects, content | ||
| V0 v2 · Calm redesign: less on screen, one decision at a time | 5/6 | Partial |
| V1 v2 · Presets, explore, contrast levels, history | 5/5 | Built |
| V2 v2 · Import an existing brand | 4/4 | Built |
| V3 v2 · Projects | 4/4 | Built |
| V4 v2 · Content and pages — v2 ship line | 4/4 | Built |
| V5 v2 · Component code | 3/3 | Built |
| V6 v2 · Platforms and data-viz | 3/3 | Built |
| V7 v2 · Reports | 2/2 | Built |
| V8 v2 · Icons and Figma | 1/2 | Partial |
| v3 — running the system | ||
| V9 v3 · Step 0 — projects page redesign | 3/3 | Built |
| W0 v3 · Theme axes and multi-brand | 4/4 | Built |
| W1 v3 · Adaptive colour | 5/5 | Built |
| W2 v3 · Agent-ready | 3/3 | Built |
| W3 v3 · Drift, lint and adoption | 4/4 | Built |
| W4 v3 · Versions and documentation site — v3 ship line | 5/5 | Built |
| W5 v3 · Application pages | 3/3 | Built |
| W6 v3 · Visual regression kit | 3/3 | Built |
| W7 v3 · Design-tool round trip | 2/3 | Partial |
Every open or partial leaf in the tracker, all 6 of them (4 partial, 2 not started), with the tracker's own note. They cluster in one place: the parts of the Figma path that need a human inside Figma to confirm, plus the owner walk-through that only the owner can sign off.
Roadmap
The three shipped releases are above. These are the next pieces, and none of them is started; the dates are intentions rather than commitments.
The five open leaves close: the owner completes five tasks unaided, and a human inside Figma confirms the SVG paste, the Tokens Studio round trip, the plugin's Variables write and the Code Connect stubs.
Section usage is already instrumented. The next five types are added from that data rather than from taste, which is why the task tree deliberately contains only the first five.
Projects are PIN-gated today, deliberately: accounts were a stated non-goal for v1 and v2. Multi-seat access is the natural next step once a client needs more than a shared PIN.
A share link works while this machine serves it. Moving the snapshot store to managed storage makes links durable — the one accepted consequence of choosing a server-rendered stack.
The lint configs, the hard-coded-value scanner and the visual regression kit exist in the bundle. Running them as a hosted check, against a client repository, is the piece that is not built.
Deployment
The lanes differ only in where the compute sits and whether the data is real. Flipping between them is environment configuration, not a code change.
Lane 1
Your brand, your systems and your data stay on your hardware.
Lane 2
deploy/twin/: compose file, .env.example, DEPLOY.mdNothing to install. Send a link and let the client drive it.
Exposure
/, /documentation.html, /public/* — public, staticOne process to run, one port to open, no tunnel required.
# the two processes behind this page ./demo/start.sh # the unchanged app on 127.0.0.1:8011, pointed at demo/data by env alone ./start.sh # the front door on :6784 — static site, PIN gate, proxy # the three self-checks python3 serve.py --check # the site/app path split and the gate token python3 demo/seed.py --check # every demo project opens with its published PIN only python3 make.py --check # the feature matrix still matches the build tracker
Try it
Not a sandbox and not a video: the same build, with three demo systems seeded so there is something to drive on the first click. Change a seed colour and watch the ramps, the component gallery, the sections and the health score regenerate together — then export the HTML and open it.
Open the live demo →Demo access
| Demo PIN (the door) | 090397 |
| Northwind Health | 1111 |
| Meridian Finance | 2222 |
| Fold Editorial | 3333 |
Start with Northwind Health — it is the project the walkthrough uses. Everything you change is disposable: the corpus is synthetic and resets when the demo has been idle for an hour. Please do not put real brand material into it.