Konde Design Framework

i18n håndterer oversettelsene dine.
KDF håndterer designet ditt.
Begge bor i JSON.

Et JSON-basert koordineringslag for design for server-side web-apper og agent-assistert UI. Gjentakende beslutninger — layout, spacing, typografi, styling av komponenter — samles i én source of truth som agentene dine kan lese direkte, så de slipper å gjenoppdage alt på tvers av filer, sider og gamle chattehistorikker.

Se hvordan det fungerer
kdf / homepage.json → ferdig rendret
kdf/homepage.json
{
  "$layout": ["hero", "footer"],
  "hero": {
    "wrapper": "mx-auto max-w-6xl px-6 py-20",
    "title":   "@typography.h1",
    "cta-primary": "@button.cta"
  }
}
data-kdf="hero.title"
Bygg og lanser med AI.
data-kdf="hero.body"

Én source of truth holder hver side, komponent og agent-økt konsekvent.

data-kdf="hero.cta-primary"
Kom i gang →

JSON definerer · koden rendrer · data-kdf mapper tilbake

Lisens
MIT
Runtime
Node Filesystem
Avhengigheter
Zero Runtime
Testet med
Next · Astro · Hono
01 — Problemet

Designet sklir ut i
komponentene dine.

Når klassenavn bare eksisterer i .tsx-filer, begynner sidene sakte å sprike. Det funker kanskje for én menneskelig utvikler — men det blir fort skjørt når AI-agenter begynner å mekke på UI-et ditt.

uten kdf · spredt over filer
<section className="mx-auto max-w-6xl px-6 py-20">
  <h1 className="text-5xl font-semibold tracking-tight">
  // …and again, slightly different, on the next page

Den samme knappen får plutselig fem uoffisielle varianter. Spacingen endrer seg fra side til side. For hver ny agent-økt må de lære reglene på nytt helt fra bunnen.

RESULTATET
  • Agenter improviserer farger, spacing, typografi og layout.
  • Brukere må sitte og korrigere resultatet via chat, hver eneste gang.
  • Endringer betyr at du må grave gjennom komponentfiler.
  • Gjentatte økter mister rett og slett designintensjonen.

→ uendelig "større" · "mer blått" · "flytt til venstre" iterering

02 — Løsningen

Gjør designet eksplisitt.

KDF gjør for design hva i18n gjør for tekst: det flytter gjentakende beslutninger ut av komponentfilene og inn i JSON. Det ferdige UI-et bruker fremdeles vanlig CSS — det som endres er hvem som eier reglene.

1 — definer det i json
{
  "hero": {
    "title": "text-5xl font-semibold tracking-tight"
  }
}
2 — rendre det i kode
const d = getDesign("homepage");

<h1 data-kdf="hero.title" className={d("hero.title")}>
JSON definerer
Én fil eier designretningen. Du redigerer den direkte når du vil ha nøyaktig kontroll.
Koden rendrer
Komponentene dine leser tokens og rendrer det godkjente designet med vanlig CSS — ingen magi bak kulissene.
Agenter implementerer
Agenter bygger UI fra JSON i stedet for å gjette seg frem. Ingen oppdiktet spacing, farger, typografi eller seksjonsrekkefølge.
Brukere justerer JSON
Endre kilden én gang i stedet for å måtte beskrive den samme visuelle rettelsen i chatten, økt etter økt.
03 — Ikke et komponentbibliotek

Et bibliotek sier hva.
KDF sier hvilken.

Et designbibliotek gir deg en knapp (Button). KDF forteller deg at dette er homepage.hero.cta-primary, rendret som en knapp, og stylet med dette tokenet. Det fikser den ene koblingen bibliotekene utelater — fra element til designbeslutning.

 DesignbibliotekKDF
Hva det sier"Dette er en Button.""Dette er hero.cta-primaryhomepage."
MappingGenerisk komponent, mange mulige overrides.Ett element peker til én designnøkkel.
SporbarhetIngen eksakt vei fra element til beslutning.data-kdf peker hver DOM-node til sin eksakte JSON-sti.
Sitter over shadcn · Bootstrap · Chakra · Tailwind · ren CSS · ditt eget system — KDF erstatter ingen av dem.
04 — Vokabularet

Seks symboler.
Én grammatikk.

KDF lagrer klassenavn, delte referanser, seksjonsrekkefølge og CSS custom properties. Det lagrer aldri forretningslogikk, eventhandlere, datafetching, permissions eller tilgjengelighetsatferd.

data-kdf
Kartet

Hvert element som bruker et token, bærer med seg en matchende sti. DOM-noder kan spores rett tilbake til JSON — perfekt for skannere, tester og code reviews av agenter.

data-kdf="hero.title"
d(path)
Accessoren

Oversetter en sti til en className-streng. d.css() returnerer CSS custom properties som et objekt.

className={d("hero.title")}
@
Delt referanse

Peker på et gjenbrukbart token i shared/. Referanser kan kjedes sammen og utvides med ekstra klasser.

"@button.cta" shadow-xl
$layout
Rekkefølge og synlighet

En array med seksjonsnøkler. Listede seksjoner rendres i riktig rekkefølge; de som mangler skjules av appen.

["hero", "features", "footer"]
$
Komponent-identitet

Metadata for agenter og verktøy — som forteller hvilken komponent som rendrer dette tokenet, pluss hint om variant og størrelse.

"$": "Button"
css
Egendefinerte egenskaper

Verdier som ikke kan uttrykkes som gjenbrukbare klasser, lagt til som inline style-variabler via d.css().

{ "--kdf-accent": "#4F46E5" }
05 — Arkitektur

Delte standardverdier.
Side-overstyringer.

Design tokens bor på to steder: som gjenbrukbare standardverdier i shared/, og per side som bare overstyrer det som trengs. To CSS-filer, som du kontrollerer fullt ut, dekker 'first paint' og unntakstilfeller.

prosjektstruktur
kdf/
  shared/
    button.json      ← reusable defaults
    card.json
    color.json
    typography.json
  homepage.json      ← page composition
  konde-server.css   ← critical, first paint
  konde.css          ← non-critical tweaks
Flerlagskaskade

En referanse som @button.cta hentes fra sidens shared/, deretter fra parent shared/, og så fra selve sidens tokens. Maler overstyrer kun de delene de trenger og arver resten.

Lett som standard

Designet resolveres på serveren; nettleseren får bare ferdige klassestrenger. Kritisk CSS leveres i first paint, resten lastes inn etterpå — ingen rendringsstraff dyttes over på svake klienter.

TO BRUKEREIDE CSS-FILER · TO LASTEMOMENTER
konde-server.css
kritisk · first paint

Importeres av appen slik at designvariabler og no-FOUC overstyringer dukker opp allerede i first paint — lenge før noe rekker å blinke.

/* konde-server.css */
:root { --kdf-primary: #1F8F47; }
[data-kdf="hero.slider"] { display: none; }
konde.css
ikke-kritisk · etter app css

Lastes inn etter rammeverket og appens CSS for tweaks, eksperimenter og escape hatches — finjusteringer som aldri bør blokkere renderingen.

/* konde.css */
[data-kdf="hero.title"] { letter-spacing: -0.02em; }
[data-kdf="hero.wrapper"] { gap: 3rem; }

→ KDF oppretter begge filene én gang og overskriver dem aldri. Pluginen gjør stiene tilgjengelige via env - appen din står for selve importen; ingenting magisk injiseres for deg.

06 — Multi-mal

Bytt design
like lett som å bytte språk.

Akkurat som i18n lar deg bytte språk, lar KDF deg bytte designmaler. Samme app, samme komponenter, samme kode — bare pek KDF_DIR mot en annen designmappe for å endre hele looken.

designs/ — to maler, én app
designs/
  lander/
    shared/
    homepage.json
  newlander/
    shared/
    homepage.json
// next.config.ts
withKDF({ dir: "./designs/lander" })(nextConfig);
$layout Endre rekkefølgen på, eller skjul, seksjoner uten å måtte røre en eneste komponent.
@button Endre alle CTA-er samtidig via et delt token.
KDF_DIR Bytt ut hele designmalen som en overordnet konfigurasjon i appen.
07 — Runtime API

Resolv på serveren.
Send strenger ned.

KDF core leser JSON rett fra disken, så det kjører nydelig server-side: Next.js Server Components, Astro, Hono-handlere. Resolv klassene der, og send deretter rene strenger ned til klientkomponentene.

serverkomponent
import { getDesign, cn } from "@kondeio/kdf";

const d = getDesign("homepage");

<button data-kdf="hero.cta" className={cn(d("hero.cta"), isActive)}>Start</button>
d("hero.title")

→ ferdig resolved className-streng

d.css("hero.title")

→ CSS custom properties-objekt

cn · cx · dedupeClasses

Slå sammen betingede klasser, dropp falsy verdier og dedupliser — strippet for semantikk ut av boksen.

cache: auto · always · none

Produksjon cacher aggressivt; i dev revalideres det automatisk på mtime og størrelse.

08 — Kompatibel fra design

Det ligger på toppen
av stacken din.

STYLING — LAGRER KLASSENAVN, IKKE CSS

TailwindshadcnBootstrapChakraCSS ModulesPlain CSSYour own system

KDF er ingen CSS-motor. Tokens inneholder nøyaktig de klassestrengene stylingsystemet ditt forstår. Skanner rammeverket ditt kildefiler, ber du det bare skanne JSON-filene også: @source "../kdf/**/*.json".

RUNTIME — SERVER-SIDE JAVASCRIPT

Next.js testet · plugin
Astro testet
Hono testet
Kom i gang

Installer én gang.
Init setter opp resten.

Installasjonen scuffolder også en enkel kdf/-mappe for å få deg i gang, hvis du ikke har en fra før. Eksisterende filer blir selvsagt aldri overskrevet.

$npm install @kondeio/kdf
$pnpm add @kondeio/kdf
$bun add @kondeio/kdf
$npm exec -- kdf init # manuelt oppsett
next.config.ts
import withKDF from "@kondeio/kdf/plugin";

export default withKDF({ dir: "./designs" })(nextConfig);