The Hooman Loop · Design System v1.0

One token file.
Every surface follows.

Konstrukt is a JSON-first design system. Five palettes and two modes are authored once as W3C DTCG tokens, then generated into CSS, a Swift/SwiftUI package, and a machine-readable manifest. Change a value in one place and the portal, the marketing site, internal tools, and iOS move together.

Palette — click to re-theme this page

Every value on this page — borders, text, status colours, the code blocks — resolves from the active theme. Nothing is hard-coded per palette.

10
Themes · 5 palettes × 2 modes
78
Resolved tokens per theme
3
Outputs · CSS · Swift · JSON
0px
Corner radius · by rule
0
Drop shadows · ever

01 · Dynamic

Ten complete themes, rendered side by side. Every card below is the same markup — same classes, same structure, same component set. The only difference is which token values are bound to that subtree. A theme is not a page variant you maintain; it is a variable scope.

How a theme is applied

Themes are set as attributes on <html> — or on any element, since the generated selectors are plain attribute selectors. Nest a subtree in another palette and it re-themes independently.

<html data-palette="hl" data-mode="dark">

<!-- any subtree can carry its own scope -->
<div data-palette="courage" data-mode="light"> … </div>
AxisAttributeValues
Palette data-palette atelier · courage · minimal · hl · blueprint (legacy sqdl → hl)
Mode data-mode light · dark (legacy [data-theme="dark"])
Runtime HLTheme Persists to localStorage, follows system preference, syncs across tabs

02 · Reference

The portable component vocabulary. Every tile is live markup on this page — not a screenshot — so it re-themes with the palette you picked above. Open the full component reference for markup, variants, and copy-ready snippets.

.module Surface Content block Module .badge Draft Review Complete In progress Status badges .tag Builders Operators Learners Segment tags .portal-quiet-btn Quiet Selected Buttons .data-table
PortalLive
iOSBuild
Data table
.index-card Card label Index card Index card .progress-track 62% complete Progress .micro-label Micro label Mono · 2026-10-20 Meta text Labels & metadata .question-list
  1. Open question
  2. Second question
Question list
pre.code npm run build Code block .section-label Section rule --token Token explorer

03 · Flexible

One token source, three shapes of artefact. The web gets custom properties, iOS gets a typed Swift package, and tooling — including design apps and AI agents — gets a resolved manifest. No hand-maintained second copy of the design.

Web · no build step

CSS custom properties

Ten selector blocks, one per palette × mode. Load the stylesheet and the runtime.

<link rel="stylesheet" href="konstrukt.css">
<link rel="stylesheet" href="base.css">
<script src="theme.js"></script>
Web · bundled

Astro / Vite / React

Import the generated token stylesheet from your entry CSS or layout.

@import '@hooman-loop/konstrukt/css';
Native · SwiftUI

Swift package

A typed theme in the environment. Same values, no re-typing hex codes.

@Environment(\.konstruktTheme) var theme
Text("Hi").foregroundStyle(theme.accent)

iOS integration guide →

Tooling · AI

tokens.json

Every theme, resolved. This page's theme wall is rendered from it at runtime.

{
  "themes": {
    "hl.dark": { "bg": { "value": "#121212" }, … }
  }
}

04 · Built

Tokens are authored as W3C DTCG JSON. A Style Dictionary build emits every artefact and a parity gate compares the generated CSS against a frozen canonical snapshot, value for value — so a refactor cannot silently drift a colour.

Author tokens/
  • global.json
  • semantic.json
  • themes/*.json
→
Build Style Dictionary
  • npm run build
  • 10 selector blocks
  • Swift package
→
Distribute Every surface
  • thehoomanloop.com
  • docs · /konstrukt
  • internal tools
  • native iOS
Parity gate npm run check compares generated CSS to build/canonical-tokens.css — selector by selector, declaration by declaration.

05 · In use

SurfaceStackConsumptionStatus
Client portal Static HTML / JS Generated tokens + base components Live
Marketing site Astro src/styles/konstrukt.css Live
iOS app SwiftUI Generated Swift package In progress
Internal tools Static HTML Single-file pages on the same tokens Live
This page Static HTML Dogfoods the generated output Live

06 · Consume it

Install deps cd apps/konstrukt && npm install
Rebuild tokens npm run build
Verify parity npm run check
Serve these docs npm run docs → http://localhost:4340