Konde Design Framework

i18n untuk bahasa.
KDF untuk desain.
Keduanya dalam JSON.

Fondasi desain berbasis JSON untuk aplikasi web dan antarmuka. Alih-alih mendefinisikan ulang tata letak, spasi, tipografi, dan komponen secara berulang di banyak halaman, semua aturan desain disatukan dalam satu sumber data tunggal untuk diimplementasikan secara konsisten oleh agen AI Anda.

Lihat cara kerjanya
kdf / homepage.json → dirender
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"
Bangun dan rilis dengan AI.
data-kdf="hero.body"

Satu referensi utama memastikan setiap halaman, komponen, dan sesi agen AI selalu selaras dan konsisten.

data-kdf="hero.cta-primary"
Mulai →

JSON sebagai panduan · kode sebagai perender · data-kdf sebagai penghubung

Lisensi
MIT
Runtime
Node Filesystem
Dependensi
Nol Runtime
Diuji dengan
Next · Astro · Hono
01 — Masalahnya

Desain melenceng di
komponenmu.

Ketika nama class hanya tersebar di dalam berkas .tsx, setiap halaman secara bertahap mulai tidak konsisten. Pendekatan ini mungkin masih masuk akal untuk dikelola satu orang, namun akan sangat berisiko ketika agen AI mulai memodifikasi UI Anda.

tanpa kdf · tersebar di banyak file
<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

Satu komponen tombol sering kali berubah menjadi lima varian berbeda tanpa disadari. Jarak antar elemen menjadi tidak konsisten di setiap halaman, dan agen AI terpaksa merumuskan ulang aturan desain dari nol pada setiap sesi baru.

HASILNYA
  • Agen AI sering menebak-nebak warna, spasi, tipografi, dan tata letak secara sepihak.
  • Pengguna harus terus-menerus mengoreksi hasil desain lewat chat pada setiap sesi baru.
  • Mengubah desain berarti harus membongkar dan mengedit kode di dalam banyak komponen.
  • Visi dan tujuan awal desain sering kali terlupakan di sesi percakapan yang baru.

→ iterasi "lebih besar" · "lebih biru" · "geser kiri" tanpa akhir

02 — Solusinya

Buat panduan desain yang terpusat dan jelas.

Sama seperti i18n memisahkan teks dari kode, KDF memisahkan semua aturan desain yang berulang dari komponen ke dalam JSON. UI Anda tetap menggunakan CSS biasa, namun kini seluruh aturan desainnya terpusat dan mudah dikelola.

1 — definisikan di json
{
  "hero": {
    "title": "text-5xl font-semibold tracking-tight"
  }
}
2 — render di kode
const d = getDesign("homepage");

<h1 data-kdf="hero.title" className={d("hero.title")}>
JSON sebagai panduan
Satu berkas utama mengendalikan seluruh arah desain. Anda dapat mengeditnya langsung untuk kontrol yang lebih presisi.
Kode perender
Komponen akan membaca token dan me-render desain menggunakan CSS standar sesuai panduan—tanpa ada proses tersembunyi.
Agen mengimplementasi
Agen AI membangun UI berdasarkan panduan JSON yang pasti, bukan asal menebak. Tidak ada lagi spasi, warna, atau tata letak yang tidak konsisten.
Pengguna menyesuaikan
Ubah referensi utamanya sekali saja, sehingga Anda tidak perlu lagi mengulang koreksi visual yang sama di setiap sesi chat bersama AI.
03 — Bukan component library

Library memberi tahu komponen apa.
KDF memberi tahu gaya apa yang dipakai.

Library desain (seperti shadcn) menyediakan komponen Button. Sedangkan KDF mendefinisikannya sebagai homepage.hero.cta-primary, yang dirender sebagai Button dan diberi gaya sesuai token spesifik. KDF bertugas mengisi celah yang tidak dimiliki library komponen: memetakan elemen visual ke aturan desain yang tepat.

 Design libraryKDF
Fokus Peran"Ini adalah komponen Button.""Ini hero.cta-primary di homepage."
KustomisasiMenyediakan komponen generik yang gaya visualnya bisa diubah sebebas mungkin.Memastikan satu elemen selalu terhubung ke satu token desain yang konsisten.
KeterlacakanSulit melacak dari mana sebuah gaya desain berasal.Atribut data-kdf pada node DOM menunjukkan lokasi persis token desainnya di dalam JSON.
Di atas shadcn · Bootstrap · Chakra · Tailwind · CSS Murni · atau sistem desain bawaan Anda — KDF hadir untuk melengkapi, bukan menggantikan mereka.
04 — Kosakatanya

Enam simbol utama.
Satu bahasa desain terpadu.

KDF dirancang khusus untuk menyimpan nama class, referensi gaya, urutan elemen, dan custom properties CSS. KDF tidak mengatur logika bisnis, event handler, integrasi data, hak akses, atau fungsi aksesibilitas pada aplikasi Anda.

data-kdf
Peta Identitas

Setiap elemen yang menggunakan token KDF akan membawa identitas path-nya. Node DOM dapat dilacak langsung ke JSON, memudahkan proses pemindaian (scanning), pengujian, dan peninjauan oleh agen AI.

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

Mengubah path JSON menjadi string class untuk komponen. Fungsi d.css() digunakan untuk mengembalikan objek CSS custom properties.

className={d("hero.title")}
@
Referensi Bersama

Merujuk pada token di folder shared/ yang bisa digunakan berulang kali. Referensi ini dapat digabungkan dan diperluas dengan class tambahan.

"@button.cta" shadow-xl
$layout
Urutan & Visibilitas

Menyimpan urutan komponen dalam bentuk array. Komponen yang terdaftar akan ditampilkan secara berurutan, sementara yang tidak terdaftar akan disembunyikan secara otomatis.

["hero", "features", "footer"]
$
Identitas Komponen

Berisi metadata untuk agen AI—menjelaskan komponen mana yang memproses token desain ini, lengkap dengan informasi varian dan ukurannya.

"$": "Button"
css
Custom Properties

Menyimpan nilai spesifik yang tidak bisa dijadikan class umum, dan diterapkan langsung sebagai variabel inline style menggunakan d.css().

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

Default bersama.
Override per halaman.

Aturan desain disimpan di dua tempat: konfigurasi bawaan yang dapat digunakan berulang kali di folder shared/, serta komposisi per halaman yang hanya menimpa aturan yang diperlukan. Terdapat dua file CSS milik pengguna untuk menangani proses render awal (first paint) dan kustomisasi ekstra (escape hatch).

struktur proyek
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
Kaskade Bertingkat

Referensi desain (misalnya @button.cta) akan dimuat mulai dari folder shared/ pada halaman, lalu shared/ utama, dan terakhir token spesifik halaman. Pendekatan ini memungkinkan template untuk hanya mengubah gaya yang diperlukan dan mewarisi sisanya.

Ringan secara default

Seluruh panduan desain diproses di server, sehingga browser hanya menerima string class yang sudah jadi. CSS utama akan langsung dimuat di tahap pertama, dan sisanya menyusul. Hal ini sangat meringankan beban render, bahkan untuk perangkat dengan spesifikasi rendah.

DUA FILE CSS MILIK USER · DUA MOMEN LOADING
konde-server.css
kritikal · first paint

Diimpor oleh aplikasi agar variabel desain dan gaya utama dapat langsung dimuat sejak awal, mencegah terjadinya kedipan tampilan (FOUC).

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

Dimuat setelah CSS framework dan aplikasi utama selesai dirender. Digunakan khusus untuk kustomisasi detail yang tidak wajib memblokir proses render awal halaman.

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

→ KDF hanya membuat kedua file ini satu kali dan tidak akan menimpanya secara otomatis. Anda memegang kendali penuh untuk mengimpornya di dalam aplikasi; tidak ada kode yang disisipkan secara diam-diam.

06 — Multi-template

Mengganti desain,
semudah mengganti bahasa.

Layaknya i18n yang dapat mengubah bahasa secara instan, KDF memungkinkan Anda menukar seluruh template desain dengan cepat. Aplikasi, komponen, dan kode yang digunakan tetap sama—cukup arahkan KDF_DIR ke folder desain yang berbeda, dan seluruh tampilan antarmuka akan langsung berubah total.

designs/ — dua template, satu app
designs/
  lander/
    shared/
    homepage.json
  newlander/
    shared/
    homepage.json
// next.config.ts
withKDF({ dir: "./designs/lander" })(nextConfig);
$layout Ubah urutan atau sembunyikan suatu bagian (section) tanpa perlu menyentuh atau mengedit kode komponen.
@button Perbarui gaya seluruh tombol aksi (CTA) secara serentak menggunakan token desain terpusat.
KDF_DIR Tukar dan terapkan template desain yang sepenuhnya baru dengan aman melalui konfigurasi.
07 — Runtime API

Selesaikan di server.
Teruskan string ke bawah.

Sistem inti KDF membaca data JSON langsung dari disk, sehingga berjalan optimal di sisi server. KDF akan memproses class desain di server dan hanya mengirimkan hasil string biasa ke komponen klien.

server component
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")

→ Mengembalikan string className yang sudah diproses.

d.css("hero.title")

→ Mengembalikan objek CSS custom-properties.

cn · cx · dedupeClasses

Menggabungkan class secara kondisional, membuang nilai yang tidak valid (falsy), dan menghapus duplikasi.

cache: auto · always · none

Sistem cache otomatis aktif di lingkungan produksi; sementara di mode development, validasi ulang dilakukan berdasarkan waktu dan ukuran file.

08 — Kompatibel secara desain

KDF berada di atas
stack-mu.

STYLING — MENYIMPAN NAMA CLASS, BUKAN CSS

TailwindshadcnBootstrapChakraCSS ModulesPlain CSSYour own system

KDF bukanlah mesin pemroses CSS. Token KDF hanya bertugas menyimpan string class yang sudah dikenali oleh sistem styling Anda. Jika framework Anda perlu memindai kode sumber, cukup arahkan pemindainya ke JSON KDF juga: @source "../kdf/**/*.json".

RUNTIME — JAVASCRIPT SERVER-SIDE

Next.js teruji · plugin
Astro teruji
Hono teruji
Mulai

Install sekali.
Init mengurus sisanya.

Proses instalasi akan secara otomatis membuat dan menyusun struktur folder kdf/ apabila belum ada. File yang sudah Anda miliki tidak akan pernah ditimpa secara otomatis.

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

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