Skip to main content
Gelium UI
Blog View source 0.6.5 Theme Gallery
Recipe

Native behavior · Default for behavior · Gelium defaults · Native baseline

Appearance
Menu

Roadmap

This page tracks where Gelium UI is and where it is going. The internal system roadmap (docs/gelium-ui-system-roadmap.md) is the source of truth; this page mirrors the public status.

What is done (phases A–J)

Gelium UI shipped its full 10-phase system roadmap: verification and close-out of every phase with contract tests, not promises.

Phase Deliverable Status
A Core Go module, server-rendered components, 0-JS contract ✅ Shipped
B --ui-* token vocabulary, typography decomposition ✅ Shipped
C Theme-agnostic verification (new theme = glob, no test edits) ✅ Shipped
D Screen state patterns (empty, error, loading, success, toast…) ✅ Shipped
E SEO/GEO server-driven metadata (dates, JSON-LD, BASE_URL) ✅ Shipped
F Public content patterns (14 patterns, card slots) ✅ Shipped
G Screen recipes (Admin Resource, Ops Queue, Public Feed) ✅ Shipped
H Theme mechanism (class on <html>, dark via single class route) ✅ Shipped
I Basecoat theme (light + dark, same bundle) ✅ Shipped
J Registries + sync guards (docs cannot drift from code) ✅ Shipped

What is done (v0.5.0+)

Deliverable Status
HTMX 4 migration (namespaced events, innerMorph, optimistic theme/scheme with server authority) ✅ Shipped
Docs UX: on-this-page rail, prev/next, optimistic dark toggle, themed recipes ✅ Shipped
Material Symbols icons (curated 21 glyphs, embedded server SVGs) ✅ Shipped
Docs coverage: contributing page, browser-support table, MIT named, component inventory via /docs ✅ Shipped
Demo-first component pages (title → live demo → body) ✅ Shipped
Release v0.5.0 (tag + changelog + version coherence tests) ✅ Shipped
Chrome href refresh after optimistic toggle (dark mode survives sidebar navigation) ✅ Shipped
Mobile audit — foundations: --ui-touch-target, --ui-container-max, prefers-reduced-motion, hero 320px overflow fix ✅ Shipped
Mobile audit — overflow containment: preview, data-table, chips, whatsapp demo (no masking; min-width:0 + internal scroll) ✅ Shipped
Mobile audit — runtime: same-document view transitions (reduced-motion guard), safe areas, mobile nav 100dvh + aria-label, focus matrix ✅ Shipped
Library/docs split — monorepo npm workspaces: lib/ publishable package gelium-ui (CSS+tokens+themes+templates+consumer JS+dist) + site/ docs consumer dogfooding by package name; dual go:embed + gates include ./lib/... ✅ Shipped
npm package [email protected] — dist bundle, themes, templates, consumer JS 🟡 Prepared; publish pending
/llms.txt agent brief (install, wire contracts, when not to use, component list) ✅ Shipped
Comparison page /docs/compare — Why Gelium vs Radix/shadcn/Base UI, ~50KB JS story, no-gos ✅ Shipped
Recipes mobile — admin/ops/feed headers stack + table/list containment under ~40rem (no overflow-x:hidden) ✅ Shipped
Forms contract /docs/forms — label above, inputmode/type, autocomplete, validate after interaction ✅ Shipped
Performance stance /docs/performance — ~50KB JS / CSS-as-largest-asset as product stance ✅ Shipped
Theme polish — family ownership matrix, lib/themes paths, dark class-only docs ✅ Shipped
Layout utilities — .ui-container, .ui-row-from-desktop, prose measure ≤75ch (65ch) ✅ Shipped
Responsive chapter /docs/responsive — design for screen sizes, not devices ✅ Shipped
Docs hub /docs — orientation Start here (no sidebar catalog dump) ✅ Shipped
UX criteria /docs/screens + /docs/feedback (GOV.UK/USWDS/M3/NNG) + /llms-ux.txt agent pack ✅ Shipped
Journeys + data display + patterns skeletons + density/motion + UI DoD checklist ✅ Shipped
Agent workflow (Impeccable-class process adapted) + surface modes + ux-detect + PRODUCT/DESIGN templates ✅ Shipped
Docs sidebar handbook tiers Core / System / Meta (scannable IA) ✅ Shipped
Content structure grammar (H1–H3/list/table) + recipe criteria bridges + harder ux-detect ✅ Shipped

What is next (ordered by value, owner reprioritizes freely)

0.  Icon pack gallery      top icon SVG sets (Tabler, Lucide, Heroicons,
                           Phosphor…) as opt-in `lib/icons/<pack>` packs,
                           each with a searchable Tabler-style gallery on
                           /docs/icon (clipboard copy, themeable currentColor)
1.  SEO productization    BASE_URL configurable + real og.png (when there is a domain)
2.  Optional expansion    third theme · registry JSON runtime · iframe srcdoc demos ·
                          drawer menu upgrade · demo height presets · VT docs chapter ·
                          date-input pattern (3 inputs, inputmode numeric)
3.  Docs localization     translate the internal spec docs (docs/gelium-ui-*.md,
                          docs/handoffs/*) from Spanish to English. Blocked on the
                          docs-spec split first: today the public site (/docs/*) and
                          the package guidance (AGENTS.md, skills/) are English, but the
                          internal specs they reference are Spanish, and contract tests
                          currently pin Spanish anchors ("## 3. Patrones de estado",
                          "Nombres alternativos", "Prompt para agentes"). Sequence:
                          (a) split public vs internal docs (move internal specs to
                          docs/internal/), (b) translate internal specs + their
                          test anchors to English together so the build stays green.
4.  Bun toolchain          swap npm for Bun across the monorepo: `bun install`
                          (fast, replaces package-lock.json with bun.lock),
                          `bun run build` in root/site (tailwindcss CLI + .mjs
                          scripts run natively), and `bun publish`/`bun pack` in
                          scripts/publish-lib.sh. Bun 1.3.11 already on the
                          dev machine. Tradeoffs to confirm before committing:
                          CI/devs still on npm need the lockfile story; keep the
                          Go bake/explore/embed untouched (build of Go binary is
                          independent of JS toolchain). Do the switch on its own
                          PR/worktree, not mixed with feature work.

Items 0–4 are ordered by value, not by date, and the owner reprioritizes freely. The icon pack gallery (item 0) is a product feature: it turns the 7.8k-glyph Material Symbols source from a 38-icon curated allowlist into discoverable, consistent packs — not a 10-set visual casserole. Packs stay SVG server-rendered (themeable via currentColor), never icon-fonts. Docs localization (item 3) is maintenance debt, not a feature: the public product is already fully English, but the internal specs it references are Spanish, so the translation work is gated behind a docs public/internal split and done together with the test anchors that currently pin the Spanish.

How to read this page

Checkmarks mean contract-tested, not aspirational: every shipped phase carries tests that pin the behavior. If a phase regresses, the build fails. The "next" list is ordered by value, not by date — the owner reprioritizes freely.