Design gen
design-gen — KDS site generator
- *rea:*Developer Tools
- *ath:*
tools/design-gen - *ind:*Go + templ + HTMX static-site generator behind
kds.koder.dev
Role in the stack
design-gen is the canonical sourcetosite pipeline for the *oder Design System (KDS)* It walks the Stack-level specspoliciesRFCs plus locale strings and emits the multi-locale kds.koder.dev site, machinereadable APIs (JSON catalog + tokens), and languagebound token exports consumed by every Koder UI surface (Flutter koder_kit, web koder_web_kit, Rust UI [planned], Kotlin/Swift mobile bindings).
The site is the *ead*half of KDS; the specs in meta/docs/stack/specs/ are the *rite*half. design-gen has no state of its own — it's a pure function from specs+presets to rendered output.
What it generates
| Artifact | Path in dist/ |
Consumed by |
|---|---|---|
| Localized HTML pages | <locale>/<facet>/<slug>/index.html |
Browser visitors via kds.koder.dev |
| Catalog index | api/v1/index.json |
LSP, Figma sync, AI agents, internal tools |
| Token manifest | api/v1/tokens.json |
koder |
| Search index | api/v1/search.json |
Site client-side search |
| Token bindings | tokens/tokens.{css,scss,json,dart,d.ts,kt,swift} |
koderkit, koderweb_kit, mobile, generic |
| OG images | <locale>/<facet>/<slug>/og-image.png |
Social previews (chromedp-rendered) |
| Sitemaps | sitemap.xml, robots.txt |
Crawlers (env-aware noindex per policies/environments.kmd) |
| AI discovery | llms.txt, llms-full.txt |
Claude, Copilot, Gemini (llmstxt.org standard) |
| Feeds | feed.xml |
RSS readers, change-watchers |
| PWA | sw.js, manifest.json |
Service worker for offline reads |
| Embed manifest | embeds/manifest.json |
Flutter Web widget bundles |
Pipeline
meta/docs/stack/specs*.kmd i18n/{en-US,pt-BR,es-ES}.json
| |
+-------> design-gen ---------------+
|
v
internal/spec/walk.go classify by frontmatter `kind:`
|
v
internal/kinds/<kind>.go per-kind renderer (component, pattern, theme, ...)
|
v
internal/render/render.go dispatch + parallel render
|
v
dist/<locale>/<facet>/<slug>/index.html + dist/api/v1
*.kmd` — normative contracts (components,
patterns, themes, app-layout, motion, voice, fonts, accessibility,
i18n, ai-ui, errors, signing, ...)
- `meta/docs/stack/policies*.kmd` — behavioral policies
- `meta/docs/stack/rfcs*.kmd` — ratified RFCs (design-RFC-001…008)
- `tools/design-gen/i18n/{en-US,pt-BR,es-ES}.json` — locale strings
(~1.5K keys per locale)
- `tools/design-gen/assets/css/{base.css,presets.css}` — visual
baseline + 44 ratified Verge/UI-style presets
- `tools/design-gen/assets/fonts/` — self-hosted Inter + JetBrains
Mono WOFF2 (per `specs/fonts/typography.kmd`)
## Outputs
See "What it generates" table above.
## Deploy
- **Production:** `kds.koder.dev` (HTTP/3 + QUIC, no auth)
on Koder Jet vhost at s.khost1 (`/var/www/kds-prd`)
- **Staging:** `stg.kds.koder.dev` (auth-gated, noindex per
`policies/environments.kmd`)
- **Legacy redirect:** `design.koder.dev` → 301 to `kds.koder.dev`
(post-rename per `projects/koder-stack#127`)
- **Trigger:** Manual via `deploy/deploy.sh PRD_CONFIRMED=1`; CI auto
via `.gitea/workflows/design-*` workflows; spec-change webhook
planned (#116)
## Primary couplings
| Consumer | Relationship |
|---|---|
| `engines/sdk/koder_kit` | Vendors `dist/tokens/tokens.dart` into `lib/src/motion/motion_tokens.dart`; deep-links from widget docstrings (#064) |
| `engines/sdk/koder_web_kit` | Vendors `dist/tokens/tokens.css` into `assets/css/` |
| `engines/sdk/koder-design-lsp` | Fetches live `kds.koder.dev/api/v1/tokens.json` with 24h TTL cache for editor hover + autocomplete |
| Figma sync (project tracker) | Pulls `dist/tokens/tokens.json` snapshot per deploy |
| AI agents (Claude/Copilot/Gemini) | Consume `kds.koder.dev/llms.txt` + `/llms-full.txt` for context; MCP server planned (#117) |
| `infra/net/jet` | Serves the vhost; vhost config in `tools/design-gen/deploy