Sampul buku
Lewati ke konten
Panduan Desain Produk Digital · Semua Level

UI/UX & Design System

Bikin aplikasi yang terlihat dan terasa profesional — dari prinsip UX, hierarki visual, dan tipografi, sampai design tokens, komponen, aksesibilitas, dan sistem desain yang utuh.

--indigo #6366f1 --fuchsia #ec4899 --cyan #06b6d4
Design Studio Series · Edisi Pertama
Design Studio Series · 2026

UI/UX & Design System

Bikin Aplikasi yang Terlihat & Terasa Profesional

oleh Galih Prasetyo

Good design is as little design as possible. Less, but better — because it concentrates on the essential aspects.

Dieter Rams, perancang Braun

Buku ini menolak satu mitos yang sudah lama merugikan banyak pembuat produk: bahwa desain adalah lapisan kosmetik yang ditambahkan di akhir, setelah "yang penting" — kodenya — selesai. Kenyataannya terbalik. Bagi pengguna, antarmuka adalah produk. Mereka tidak melihat arsitektur basis data Anda; mereka melihat tombol, jarak antar elemen, warna, dan kalimat pada layar. Dari sanalah mereka menyimpulkan apakah produk Anda pantas dipercaya.

Kabar baiknya: desain yang baik bukan bakat gaib. Ia adalah kumpulan keputusan yang bisa dipelajari, diukur, dan disistematisasi. Itulah isi buku ini — bukan "selera", melainkan sistem.

01
Front Matter

Kata Pengantar

Untuk siapa buku ini, dan janji apa yang ia coba tepati.

Saya menulis buku ini untuk orang yang membangun sesuatu — developer yang antarmukanya "berfungsi tapi terasa murahan", founder yang produknya bagus tapi kalah oleh pesaing yang lebih rapi, desainer pemula yang ingin alasan di balik setiap keputusan, dan siapa pun yang kini meminta AI menuliskan UI dan ingin tahu cara mengarahkannya dengan benar.

Buku ini ditujukan untuk semua level. Jika Anda belum pernah menyentuh desain, mulailah dari Bab 1 dan baca berurutan; setiap konsep dibangun di atas konsep sebelumnya. Jika Anda sudah berpengalaman, gunakan daftar isi sebagai menu — tiap bab berdiri cukup mandiri, dengan contoh kode yang siap disalin.

Ada tiga janji yang saya usahakan tepati. Pertama, konkret. Setiap prinsip disertai contoh kode Tailwind atau CSS yang bisa langsung Anda tempel. Kedua, jujur soal keterbatasan. Desain punya trade-off; saya menunjukkannya, bukan menyembunyikannya. Ketiga, bisa dipakai bersama AI. Ada bab khusus tentang bagaimana menyusun "kontrak token" agar model generatif menghasilkan UI yang konsisten dengan sistem Anda.

Cara pakai

Buku ini interaktif. Di Bab 8 ada Pemeriksa Kontras & Token sungguhan — Anda memilih warna, ia menghitung rasio kontras WCAG dan memberi tahu lolos AA/AAA atau tidak. Di beberapa bab ada galeri komponen hidup. Semua berjalan di dalam halaman ini, tanpa koneksi internet.

02
Front Matter

Cara Membaca Buku Ini

Peta jalan, konvensi, dan cara menavigasi.

Struktur tiga bagian

Buku dibagi menjadi tiga bagian yang mengikuti alur berpikir seorang perancang produk:

Konvensi penulisan

ElemenArti
--tokenNama design token (variabel desain). Selalu ditulis dengan gaya mono.
Kotak CatatanKonteks tambahan atau nuansa yang mudah terlewat.
Kotak TipsPraktik terbaik yang bisa langsung diterapkan.
Kotak Hati-hatiKesalahan umum yang perlu dihindari.
Kartu Do / Don'tPerbandingan cepat pilihan yang baik dan yang buruk.
Tips

Jangan hanya membaca contoh kode — tempel ke proyek Anda dan ubah satu nilai, lalu perhatikan efeknya. Desain dipelajari melalui mata, bukan hanya kepala.

1
Bagian I · Bab 1

Pendahuluan — Kenapa UI/UX Menentukan Laku atau Tidak

Antarmuka adalah bukti pertama, dan sering satu-satunya, bahwa produk Anda serius.

Bayangkan dua aplikasi dengan fitur identik. Yang satu punya jarak yang rapi, warna yang konsisten, tombol yang jelas mana yang utama, dan kalimat yang ramah. Yang lain punya elemen yang berdesakan, warna acak, dua tombol yang sama-sama menonjol, dan pesan error "Error 0x8004". Pengguna tidak pernah membaca kode keduanya. Mereka hanya melihat permukaan — dan dalam hitungan detik memutuskan yang mana yang layak dipercaya dengan data, waktu, dan uang mereka.

Inilah alasan mendasar mengapa UI/UX menentukan produk laku atau tidak: kualitas yang terlihat menjadi proksi bagi kualitas yang tak terlihat. Orang menyimpulkan keandalan sistem dari kerapian antarmukanya. Ini bukan irasional; ini heuristik yang masuk akal. Tim yang teliti soal jarak 4 piksel biasanya juga teliti soal keamanan dan penanganan error.

Design is not just what it looks like and feels like. Design is how it works.

Steve Jobs

Tiga alasan bisnis yang tidak bisa diabaikan

1. Kesan pertama terjadi dalam milidetik

Riset klasik dari Google menunjukkan pengguna membentuk penilaian estetika terhadap sebuah halaman dalam waktu sekitar 50 milidetik — jauh sebelum mereka membaca satu kata pun. Penilaian sepersekian detik itu mewarnai seluruh interaksi berikutnya lewat halo effect: bila tampilan terasa profesional, pengguna lebih pemaaf terhadap kekurangan; bila terasa amatir, setiap gesekan kecil terasa menjengkelkan.

2. Friksi adalah pajak yang dibayar setiap pengguna

Setiap langkah membingungkan, setiap label ambigu, setiap keadaan loading tanpa umpan balik adalah "pajak" yang dibayar pengguna. Pada satu pengguna pajak ini kecil; dikalikan ribuan pengguna dan ratusan sesi, ia menjadi churn, tiket dukungan, dan konversi yang bocor. Desain yang baik menurunkan pajak itu ke titik yang nyaris tak terasa.

3. Konsistensi menurunkan biaya belajar

Ketika tombol, form, dan pola navigasi berperilaku sama di seluruh produk, pengguna belajar sekali dan menerapkannya di mana-mana. Konsistensi bukan sekadar estetika — ia adalah efisiensi kognitif. Ini juga alasan mengapa design system (Bab 13) begitu berharga: ia mengubah konsistensi dari niat baik menjadi jaminan struktural.

UI vs UX: dua kata yang sering tertukar

UX — User Experience

Seluruh pengalaman: apakah pengguna bisa mencapai tujuannya dengan mudah, cepat, dan tanpa frustrasi. Mencakup alur, arsitektur informasi, microcopy, performa, dan penanganan error. UX menjawab: "Apakah ini bekerja untuk manusia?"

UI — User Interface

Lapisan visual dan interaktif yang menyampaikan UX itu: warna, tipografi, jarak, komponen, ikon, motion. UI menjawab: "Apakah ini terlihat jelas dan terasa benar?" UI yang indah di atas UX yang buruk hanyalah lipstik.

Keduanya tak terpisahkan. Buku ini sengaja menyatukan keduanya: prinsip UX (Bab 2) menuntun keputusan, sementara sisanya memberi Anda alat UI untuk mewujudkannya.

Catatan

Anda tidak harus menjadi "desainer" untuk memakai buku ini. Sebagian besar keputusan desain yang berdampak besar bersifat teknis dan bisa diaturan: gunakan skala jarak yang konsisten, batasi palet warna, pastikan kontras cukup, beri setiap komponen semua state-nya. Delapan puluh persen hasil datang dari disiplin, bukan bakat.

Peta perjalanan buku ini

Kita mulai dari cara manusia mempersepsi dan mengambil keputusan (prinsip UX), lalu menata ruang (hierarki & layout), memilih huruf (tipografi), dan mengunci sistem warna (tokens). Setelah fondasi itu, kita membangun komponen nyata, membuatnya dapat diakses semua orang, responsif di setiap layar, dan hidup lewat state dan motion yang tepat. Akhirnya kita merangkai semuanya menjadi sistem — dan menyiapkannya untuk era di mana sebagian UI ditulis oleh AI.

2
Bagian I · Bab 2

Prinsip UX — Heuristik & Hukum yang Menjelaskan Perilaku

Sepuluh heuristik Nielsen dan hukum-hukum UX yang bisa Anda pakai sebagai lensa.

Prinsip UX bukan aturan kaku, melainkan lensa. Ketika sebuah layar terasa "salah" tapi Anda tak bisa menjelaskan kenapa, prinsip-prinsip ini memberi kosakata untuk mendiagnosis dan memperbaikinya. Kita mulai dari yang paling terkenal: sepuluh heuristik usability Jakob Nielsen.

10 Heuristik Usability Nielsen

#HeuristikPenerapan praktis
1Visibilitas status sistemSelalu beri umpan balik: spinner saat loading, toast saat tersimpan, progress bar saat unggah. Jangan pernah biarkan pengguna menebak.
2Kecocokan sistem & dunia nyataPakai bahasa pengguna, bukan jargon internal. "Keranjang", bukan "objek transaksi". Ikon yang familiar.
3Kontrol & kebebasanSediakan Undo, Batal, dan jalan keluar yang jelas. Pengguna sering salah klik — beri mereka pintu darurat.
4Konsistensi & standarIkuti konvensi platform. Tombol primer selalu di posisi yang sama. Satu istilah untuk satu konsep.
5Pencegahan errorLebih baik mencegah daripada menangani. Nonaktifkan tombol submit sampai form valid; konfirmasi aksi destruktif.
6Pengenalan > pengingatanTampilkan pilihan, jangan minta pengguna mengingat. Autocomplete, ikon berlabel, breadcrumb.
7Fleksibilitas & efisiensiPemula butuh panduan; ahli butuh akselerator. Sediakan shortcut keyboard tanpa menghalangi pemula.
8Estetika & desain minimalisSetiap elemen ekstra menutupi yang penting. Buang yang tidak perlu. "Content-first".
9Bantu kenali & pulih dari errorPesan error dalam bahasa manusia: apa yang salah, mengapa, dan cara memperbaikinya. Hindari kode mentah.
10Bantuan & dokumentasiIdealnya tak diperlukan, tapi bila ada, mudah dicari, fokus tugas, dan berisi langkah konkret.
Tips

Gunakan sepuluh heuristik ini sebagai checklist "audit heuristik". Telusuri satu alur produk Anda dan tanyakan satu per satu. Anda akan menemukan masalah yang tidak butuh riset pengguna mahal untuk diketahui.

Hukum-hukum UX

Jika heuristik adalah panduan, hukum-hukum berikut adalah keteraturan perilaku manusia yang bisa Anda hitung dan andalkan.

Hukum Fitts

Waktu untuk mengarahkan ke sebuah target berbanding lurus dengan jaraknya dan berbanding terbalik dengan ukurannya. Terjemahan praktis: target yang sering dipakai harus besar dan dekat. Inilah alasan tombol aksi utama sebaiknya besar, mengapa bilah tab di mobile berada di bawah (dekat ibu jari), dan mengapa target sentuh minimal 44×44 piksel.

/* Target sentuh yang menghormati Hukum Fitts */
.btn-touch{
  min-height:44px; min-width:44px;
  padding:12px 20px; /* area klik lega */
}

Hukum Hick

Waktu mengambil keputusan meningkat seiring jumlah dan kompleksitas pilihan. Terjemahan: kurangi pilihan yang tampil sekaligus. Menu dengan 30 item melumpuhkan; kelompokkan, sembunyikan yang jarang dipakai di balik "Lainnya", dan tampilkan default yang cerdas. Wizard bertahap mengalahkan satu form raksasa.

Hukum Jakob

"Pengguna menghabiskan sebagian besar waktunya di situs lain." Artinya mereka datang ke produk Anda membawa ekspektasi dari produk lain. Ikon keranjang di kanan atas, logo yang mengarah ke beranda, formulir yang tombol submit-nya di bawah — jangan berinovasi pada hal yang sudah menjadi konvensi. Simpan kreativitas untuk yang membedakan produk Anda, bukan untuk lokasi tombol.

Lakukan

Letakkan navigasi di tempat yang diharapkan. Pakai pola familiar untuk hal umum. Hemat "kejutan" untuk momen yang memang bertujuan menyenangkan.

Hindari

Menciptakan pola navigasi "unik" demi terlihat beda. Pengguna tidak datang untuk memecahkan teka-teki tata letak Anda.

Hukum lain yang berguna

The details are not the details. They make the design.

Charles Eames, desainer

Beban kognitif: musuh sunyi

Setiap prinsip di atas pada akhirnya melayani satu tujuan: menurunkan beban kognitif — jumlah usaha mental yang harus dikeluarkan pengguna untuk memakai produk Anda. Beban kognitif datang dalam tiga bentuk, dan Anda hanya bisa mengendalikan dua:

Jenis bebanSumberYang bisa Anda lakukan
IntrinsikKompleksitas bawaan tugas itu sendiriPecah tugas jadi langkah kecil; sembunyikan kompleksitas di balik default cerdas
EkstrinsikCara antarmuka menyajikan tugasIni musuh utama — hapus kekacauan, ambiguitas, dan langkah tak perlu
GermaneUsaha membangun pemahaman yang bergunaDorong lewat pola konsisten yang bisa dipelajari sekali dan dipakai di mana-mana

Kabar terpentingnya: beban ekstrinsik hampir seluruhnya di tangan Anda. Setiap label yang ambigu, setiap dua tombol yang sama menonjol, setiap warna tanpa makna — semuanya menambah beban ekstrinsik yang tak perlu. Sebagian besar "perbaikan UX" sebenarnya adalah penghapusan beban ekstrinsik, bukan penambahan fitur.

Tips

Uji cepat "squint test": picingkan mata sampai layar buram. Jika Anda masih bisa menebak apa aksi utamanya dan ke mana mata harus pergi, hierarki Anda kuat. Jika semuanya jadi bubur abu-abu yang seragam, beban kognitif pengguna terlalu tinggi.

Catatan

Prinsip bisa bertabrakan. Hukum Hick bilang kurangi pilihan; fleksibilitas untuk ahli bilang sediakan akselerator. Seni desain adalah menimbang trade-off sesuai konteks dan siapa penggunanya — bukan menerapkan satu aturan secara membabi buta.

3
Bagian I · Bab 3

Hierarki Visual & Layout

Grid, spacing, dan alignment — cara mata tahu ke mana harus melihat.

Hierarki visual adalah seni memberi tahu mata urutan membaca tanpa satu kata instruksi. Ketika Anda membuka layar yang baik, pandangan Anda mendarat di tempat yang tepat — judul lebih dulu, lalu isi, lalu aksi — tanpa Anda sadari itu dirancang. Ketika hierarki gagal, semuanya berteriak sama keras dan mata tersesat.

Empat alat membangun hierarki

White space is to be regarded as an active element, not a passive background.

Jan Tschichold, tipografer

Sistem spacing 4/8 piksel

Kesalahan paling umum pemula adalah jarak acak: 5px di sini, 13px di sana, 22px di situ. Hasilnya terasa "kotor" walau sulit ditunjuk kenapa. Solusinya adalah skala spacing — semua jarak adalah kelipatan dari satu unit dasar, biasanya 4px. Ini membuat ritme visual konsisten dan keputusan jadi mekanis, bukan tebakan.

/* Skala spacing berbasis 4px — sama dengan default Tailwind */
:root{
  --space-1:4px;   --space-2:8px;
  --space-3:12px;  --space-4:16px;
  --space-6:24px;  --space-8:32px;
  --space-12:48px; --space-16:64px;
}
Lakukan

Pakai hanya nilai dari skala: 8, 16, 24, 32. Beri jarak lebih besar antar-kelompok daripada di dalam kelompok (proximity).

Hindari

Angka "ajaib" seperti margin:13px atau padding:7px 22px. Jarak yang tidak berpola membuat UI terasa goyah.

Grid & kolom

Grid memberi tulang punggung tak terlihat yang membuat elemen sejajar. Standar web modern adalah grid 12 kolom karena 12 mudah dibagi (2, 3, 4, 6). Di CSS modern, Anda jarang butuh framework grid — display:grid dan flexbox sudah cukup.

/* Grid 12 kolom dengan gutter konsisten */
.layout{
  display:grid;
  grid-template-columns:repeat(12,1fr);
  gap:24px;
  max-width:1200px; margin-inline:auto;
}
.sidebar{grid-column:span 3;}
.content{grid-column:span 9;}
span 3 span 9
Grid 12 kolom: sidebar (3) + konten (9) = 12, dengan gutter seragam.

Alignment: garis tak terlihat

Setiap elemen harus sejajar dengan sesuatu. Mata sangat peka pada ketidakselarasan — pergeseran 2px pun terasa. Aturan praktis: kurangi jumlah "garis awal" (tepi kiri) yang berbeda. Jika label, input, dan tombol semua rata kiri pada garis yang sama, form terasa tenang. Rata-kiri hampir selalu lebih terbaca daripada rata-tengah untuk blok teks panjang.

Hati-hati

Rata-tengah (center) memang terlihat elegan untuk judul pendek, tapi merusak keterbacaan paragraf dan membuat daftar sulit dipindai karena tepi kirinya bergerigi. Pakai center hanya untuk elemen pendek dan simetris.

Prinsip Gestalt dalam layout

4
Bagian I · Bab 4

Tipografi

Skala, keterbacaan, dan memasangkan huruf — 90% UI adalah teks.

Sebagian besar antarmuka, jika Anda melepas gambarnya, adalah teks. Karena itu tipografi bukan detail sampingan — ia adalah tulang punggung desain UI. Menguasai lima keputusan tipografi berikut sudah cukup membuat produk Anda terlihat lebih matang daripada mayoritas pesaing.

Typography is what language looks like.

Ellen Lupton, penulis "Thinking with Type"

1. Skala tipe (type scale)

Seperti spacing, ukuran font sebaiknya mengikuti skala, bukan angka acak. Skala modular mengalikan ukuran dasar dengan rasio tetap (mis. 1.25 — "major third"). Hasilnya harmoni yang terasa musikal.

display · 48pxJudul Halaman
h1 · 36pxKepala Bab
h2 · 28pxSubjudul Bagian
h3 · 22pxJudul Kartu
body · 16pxTeks isi yang nyaman dibaca.
small · 13pxKeterangan & metadata.
/* Skala modular rasio 1.25 (major third) */
:root{
  --text-sm:0.8rem;    --text-base:1rem;
  --text-lg:1.25rem;   --text-xl:1.563rem;
  --text-2xl:1.953rem; --text-3xl:2.441rem;
}

2. Keterbacaan (readability)

.prose{
  max-width:65ch;      /* panjang baris ideal */
  font-size:1.0625rem; /* 17px */
  line-height:1.65;
  letter-spacing:0;    /* jangan renggangkan teks isi */
}

3. Memasangkan huruf (font pairing)

Aturan aman: satu font untuk judul, satu untuk isi, plus satu mono untuk kode. Buku ini memakai Space Grotesk (judul — berkarakter, geometris), Inter (isi — netral, sangat terbaca di layar), dan JetBrains Mono (kode & token). Prinsipnya: pasangkan font yang kontras dalam kepribadian tapi selaras dalam proporsi — hindari dua font yang mirip tapi tak sama (terlihat seperti kesalahan).

Pairing aman

Serif klasik + sans netral. Atau geometric sans (judul) + humanist sans (isi). Batasi maksimal 2–3 keluarga font.

Pairing berisiko

Dua font dekoratif bersaing. Lima font berbeda di satu layar. Font "lucu" untuk produk yang butuh dipercaya.

4. Bobot & ritme

Hierarki tipografi dibangun terutama dari ukuran dan bobot, bukan warna. Judul 700, subjudul 600, isi 400, keterangan 400 warna lebih redup. Batasi jumlah bobot yang dipakai (mis. 400, 600, 700) agar konsisten dan ringan dimuat.

5. Detail yang membedakan amatir dari profesional

Tips

text-wrap: balance pada judul dan text-wrap: pretty pada paragraf adalah dua baris CSS yang langsung membuat teks terlihat "dikerjakan desainer". Dukungan browser kini sudah luas.

5
Bagian I · Bab 5

Warna & Design Tokens

Palet, semantic tokens, dan dark mode yang benar.

Warna adalah tempat pemula paling sering tergelincir — bukan karena warna sulit, tapi karena godaan untuk memakai terlalu banyak. Antarmuka profesional justru irit warna. Ia membangun seluruh sistem dari segelintir warna dasar, lalu memakainya secara disiplin lewat design tokens.

Anatomi palet yang sehat

Palet minimal yang berfungsi terdiri dari tiga lapis:

Warna brand buku ini

Indigo
#6366f1
Fuchsia
#ec4899
Cyan
#06b6d4

Skala warna (color ramp)

Satu warna brand tidak cukup; Anda butuh variannya — lebih terang untuk hover, lebih gelap untuk teks di atas latar terang. Buat "ramp" 50→900:

50
100
300
400
500
600
700
900

Design tokens: memberi nama pada keputusan

Token adalah variabel bernama yang menyimpan keputusan desain. Alih-alih menulis #6366f1 di 200 tempat, Anda menulis --color-primary. Ubah satu definisi, seluruh produk ikut berubah. Ini fondasi konsistensi dan dark mode.

Dua lapis token: primitif vs semantik

Praktik terbaik memisahkan token menjadi dua lapis. Token primitif hanya menamai warna mentah (--indigo-500). Token semantik menamai peran (--color-action) dan menunjuk ke primitif. Komponen hanya memakai token semantik — sehingga mengganti tema berarti mengubah pemetaan, bukan komponen.

/* Lapis 1 — primitif: warna mentah, tak punya makna peran */
:root{
  --indigo-500:#6366f1;
  --gray-50:#f8fafc;
  --gray-900:#0f1117;
}
/* Lapis 2 — semantik: peran yang menunjuk ke primitif */
:root{
  --color-bg:var(--gray-50);
  --color-text:var(--gray-900);
  --color-action:var(--indigo-500);
}

Kategori token yang perlu Anda punya

KategoriContoh tokenKegunaan
Warna--color-bg, --color-action, --color-dangerLatar, teks, aksi, status
Spacing--space-2, --space-4Padding, margin, gap
Radius--radius-sm, --radius-lgSudut membulat
Tipografi--text-lg, --font-sansUkuran, keluarga, bobot
Bayangan--shadow-mdElevasi
Motion--ease-out, --dur-fastDurasi & kurva transisi

Dark mode yang benar

Dark mode bukan sekadar membalik hitam-putih. Beberapa aturan yang membedakan dark mode profesional dari yang menyakitkan mata:

/* Dark mode lewat pemetaan ulang token semantik */
:root{
  --color-bg:#f8fafc;
  --color-surface:#ffffff;
  --color-text:#0f1117;
}
:root[data-theme="dark"],
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --color-bg:#0f1117;
    --color-surface:#171b28;
    --color-text:#e7e9f0;
  }
}
Tips

Karena komponen hanya memakai token semantik (--color-surface, bukan #fff), mendukung dark mode berarti menuliskan ulang satu blok pemetaan token — bukan menyentuh satu pun komponen. Inilah pembayaran dari disiplin token.

Color does nothing until it has a context. It is not a decoration; it is information.

Josef Albers, "Interaction of Color"

Aturan praktis penggunaan warna

Lakukan

Pakai netral untuk 90% UI. Simpan warna brand untuk aksi utama dan aksen. Satu warna aksen per layar biasanya cukup. Selalu cek kontras (Bab 8).

Hindari

Sepuluh warna cerah bersaing. Warna sebagai satu-satunya penanda status (buta warna tak melihatnya). Teks berwarna di atas latar berwarna tanpa cek kontras.

Makna warna & konteks budaya

Warna membawa asosiasi, tapi asosiasi itu bergantung konteks dan budaya — bukan hukum universal. Gunakan tabel ini sebagai titik awal, bukan aturan mutlak, dan selalu uji dengan audiens sebenarnya.

WarnaAsosiasi umum (konteks digital)Pemakaian lazim di UI
Biru / IndigoTepercaya, tenang, profesionalAksi utama, tautan, brand SaaS & finansial
HijauSukses, tumbuh, amanKonfirmasi, status positif, tombol "selesai"
MerahBahaya, error, mendesakPeringatan, aksi destruktif, validasi gagal
Kuning / AmberPerhatian, hati-hatiPeringatan ringan, status "menunggu"
Cyan / TealSegar, informatif, teknisInfo, aksen sekunder, highlight data
Ungu / FuchsiaKreatif, premium, beraniAksen brand, fitur unggulan, gradien
Hati-hati

Merah-hijau adalah pasangan yang paling sering gagal untuk pengguna buta warna (deuteranopia/protanopia) — dan itu justru pasangan "gagal/sukses" yang paling umum. Selalu perkuat dengan ikon, teks, atau bentuk. Jangan pernah menjadikan warna satu-satunya pembawa makna.

Bayangan & elevasi sebagai token

Bayangan bukan efek acak; ia adalah bahasa kedalaman. Sebuah sistem elevasi yang konsisten memberi tahu pengguna elemen mana yang "melayang" di atas yang lain — kartu, dropdown, modal. Definisikan sebagai token berjenjang:

:root{
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-md:0 6px 16px -6px rgba(0,0,0,.55);
  --shadow-lg:0 24px 60px -30px rgba(0,0,0,.85);
}
.card{box-shadow:var(--shadow-md);}
.modal{box-shadow:var(--shadow-lg);}

Aturan: makin tinggi elevasi (makin dekat ke pengguna), makin lebar dan lembut bayangannya. Di dark mode, ingat — elevasi sering lebih baik ditandai dengan permukaan yang lebih terang daripada bayangan yang lebih gelap (Bab 5).

6
Bagian II · Bab 6

Komponen & State

Tombol, form, kartu, modal, tabel, navigasi — dan semua keadaannya.

Komponen adalah kata-kata dalam bahasa desain Anda. Yang memisahkan komponen amatir dari yang matang bukan tampilan default-nya, melainkan kelengkapan state-nya. Tombol yang cantik saat diam tapi tak bereaksi saat di-hover, tak menandai fokus keyboard, dan tak menunjukkan loading saat diklik — itu komponen setengah jadi.

Lima state yang wajib dimiliki setiap komponen interaktif

StateKapan munculYang wajib berubah
DefaultKeadaan diamTampilan dasar yang jelas mana yang bisa diklik
HoverKursor di atas (desktop)Perubahan halus: warna/elevasi — "aku bisa diklik"
FocusDipilih via keyboard (Tab)Ring fokus jelas — wajib untuk aksesibilitas
ActiveSedang ditekanUmpan balik tekan (mis. sedikit turun)
DisabledAksi tak tersediaRedup + kursor not-allowed + tak bisa difokus

Tambahan yang sering perlu: loading (aksi asinkron berjalan) dan selected (untuk toggle, tab, item terpilih).

Galeri komponen langsung

Semua di bawah ini adalah komponen hidup yang dirender halaman ini dari token yang sama. Arahkan kursor, tekan Tab untuk melihat ring fokus, klik untuk merasakan active state.

Tombol · varian & hierarki

Satu tombol primer per konteks. Sekunder untuk aksi pendamping. Ghost untuk aksi tersier. Danger hanya untuk destruktif.

Badge · status
Aktif Menunggu Gagal Baru Arsip

Perhatikan: status ditandai warna dan teks — bukan warna saja. Ini penting untuk pengguna buta warna (Bab 8).

Kartu
Paket Pro

Semua fitur, dukungan prioritas, dan kolaborasi tim tanpa batas.

Form · field, fokus, error
Kami tidak akan pernah membagikan email Anda.
Nama minimal 2 karakter.

Anatomi tombol yang benar (kode)

.btn{
  font-weight:600; padding:10px 18px;
  border-radius:10px; cursor:pointer;
  transition:transform .12s, box-shadow .2s;
}
.btn-primary{background:var(--color-action);color:#fff;}
.btn:hover{box-shadow:0 12px 30px -8px rgba(99,102,241,.6);}
.btn:focus-visible{outline:2px solid var(--color-action);outline-offset:2px;}
.btn:active{transform:translateY(1px);}
.btn:disabled{opacity:.45;cursor:not-allowed;}
Catatan

Perhatikan :focus-visible, bukan :focus. :focus-visible hanya menampilkan ring saat pengguna bernavigasi dengan keyboard, sehingga pengguna mouse tidak melihat ring yang dianggap "mengganggu" — tanpa mengorbankan aksesibilitas. Jangan pernah outline:none tanpa pengganti.

Panduan singkat per komponen

Modal / dialog

Tabel data

Navigasi

Input & form

Tips

Bangun komponen sebagai satu sumber kebenaran (satu kelas CSS / satu komponen React), lalu pakai di mana-mana. Saat Anda menemukan dua tombol yang "hampir sama tapi beda 2px", itu tanda sistem mulai bocor — satukan kembali.

Ikonografi: bahasa visual yang konsisten

Ikon mempercepat pemindaian dan menghemat ruang — tapi hanya jika konsisten dan tak ambigu. Ikon yang dicampur dari lima gaya berbeda terasa lebih berantakan daripada tanpa ikon sama sekali.

Toast / notifikasi — umpan balik non-blocking
Perubahan tersimpan
Semua pembaruan sudah live.

Toast muncul, memberi konfirmasi, lalu hilang sendiri — tanpa memaksa klik. Umumkan lewat aria-live="polite" untuk screen reader.

Lakukan

Satu set ikon, satu gaya, satu makna per ikon. Pasangkan aksi penting dengan label. Beri aria-label pada ikon tanpa teks.

Hindari

Mencampur gaya ikon. Ikon-only untuk aksi ambigu. Ikon dekoratif yang tampak bisa diklik padahal tidak (false affordance).

7
Bagian II · Bab 7

Pendekatan Tailwind & Utility-First

Menulis desain langsung di markup — dengan sistem, bukan kekacauan.

Utility-first, yang dipopulerkan Tailwind CSS, membalik cara kita menulis gaya. Alih-alih membuat kelas semantik (.card) lalu mendefinisikannya di file CSS terpisah, Anda menyusun tampilan dari kelas-kelas utilitas kecil langsung di markup (class="p-6 rounded-xl bg-white shadow"). Terdengar berantakan pada awalnya, tapi ada logika kuat di baliknya.

Mengapa utility-first berhasil

The enemy of art is the absence of limitations.

Orson Welles — dan skala Tailwind adalah batasan yang membebaskan

Contoh: kartu yang sama, dua gaya

<!-- Utility-first (Tailwind) -->
<div class="max-w-sm p-6 rounded-2xl bg-slate-800
            border border-slate-700 shadow-lg">
  <h3 class="text-lg font-semibold text-white">Paket Pro</h3>
  <p class="mt-1 text-sm text-slate-400">Semua fitur.</p>
  <button class="mt-4 w-full py-2.5 rounded-lg font-semibold
            text-white bg-indigo-500 hover:bg-indigo-600
            focus-visible:ring-2 focus-visible:ring-indigo-400">
    Pilih paket
  </button>
</div>

Menjaga agar tidak berantakan

Kritik terbesar utility-first: markup jadi panjang dan berulang. Tiga penawarnya:

// tailwind.config — menyuntik design tokens ke utilitas
export default {
  theme: {
    extend: {
      colors: {
        brand: { DEFAULT: '#6366f1', accent: '#ec4899' },
      },
      borderRadius: { xl: '16px' },
    },
  },
};
Cocok untuk

Tim yang ingin konsistensi terpaksa, prototyping cepat, dan produk dengan banyak komponen unik. Sangat serasi dengan React/Vue.

Kurang cocok bila

Anda butuh gaya yang sangat dinamis dari data runtime, atau tim menolak markup verbose dan lebih suka CSS terpisah. Keduanya sah — pilih sesuai konteks.

Catatan

Utility-first dan design tokens bukan dua kubu. Tailwind adalah implementasi design tokens. Prinsip di Bab 3–5 (skala spacing, type scale, palet terbatas) tetap berlaku — Tailwind hanya menegakkannya untuk Anda.

8
Bagian II · Bab 8

Aksesibilitas — WCAG, Kontras, Keyboard, ARIA

Desain yang bisa dipakai semua orang, dengan alat pemeriksa langsung.

Aksesibilitas bukan fitur tambahan untuk sebagian kecil pengguna; ia adalah kualitas dasar yang menguntungkan semua orang. Kontras yang cukup menolong pengguna low-vision dan siapa pun di bawah sinar matahari. Navigasi keyboard menolong pengguna motorik dan power user. Bangun aksesibilitas sejak awal jauh lebih murah daripada menambalnya kelak.

The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect.

Tim Berners-Lee, penemu World Wide Web

WCAG dalam ringkasan: POUR

PrinsipArtiContoh
PerceivableBisa dipersepsiAlt text untuk gambar, kontras cukup, teks tidak hanya bergantung warna
OperableBisa dioperasikanSemua bisa lewat keyboard, target sentuh cukup besar, tak ada jebakan fokus
UnderstandableBisa dipahamiBahasa jelas, error informatif, perilaku konsisten & dapat diprediksi
RobustTangguhHTML valid & semantik, ARIA benar, bekerja dengan teknologi bantu

Kontras warna: angka yang wajib Anda tahu

WCAG menetapkan ambang rasio kontras antara teks dan latarnya. Rasio dihitung dari luminance relatif keduanya, berkisar 1:1 (identik) hingga 21:1 (hitam-putih):

LevelTeks normalTeks besar (≥18.66px bold / ≥24px)
AA (minimum)≥ 4.5 : 1≥ 3 : 1
AAA (ditingkatkan)≥ 7 : 1≥ 4.5 : 1
Komponen UI & grafik≥ 3 : 1 (mis. batas input, ikon penting)

Pemeriksa Kontras & Token — alat langsung

Pilih warna teks dan warna latar. Alat ini menghitung rasio kontras WCAG sungguhan dari luminance relatif kedua warna, lalu memberi tahu apakah lolos AA/AAA untuk teks normal maupun besar. Coba preset di bawah, atau masukkan token brand Anda sendiri.

Pemeriksa Kontras & Token
Rasio dihitung dengan rumus luminance relatif WCAG 2.x
Teks besar 24px
Teks normal — kalimat contoh untuk menilai keterbacaan pada pasangan warna ini.
: 1
Tips

Perhatikan preset "muted / bg": teks abu redup di atas latar gelap sering gagal AA untuk teks normal. Inilah jebakan estetika-vs-keterbacaan yang disinggung di Bab 4. Kalau ingin teks redup, perbesar ukurannya atau naikkan kecerahannya sampai lolos.

Keyboard & fokus

HTML semantik & ARIA

Aturan pertama ARIA: jangan pakai ARIA kalau HTML semantik sudah cukup. <button> asli sudah dapat difokus, diaktifkan keyboard, dan diumumkan sebagai tombol — semua gratis. <div onclick> harus Anda beri semua itu manual dan sering salah.

<!-- Buruk: div yang berpura-pura jadi tombol -->
<div class="btn" onclick="save()">Simpan</div>

<!-- Baik: elemen semantik, gratis aksesibel -->
<button type="button" onclick="save()">Simpan</button>

<!-- ARIA hanya saat perlu: ikon tanpa teks -->
<button aria-label="Tutup dialog">×</button>
Lakukan

Pakai elemen semantik (button, nav, main, label). Beri alt text bermakna. Uji dengan keyboard saja, lalu dengan screen reader.

Hindari

Warna sebagai satu-satunya penanda. outline:none tanpa pengganti. Placeholder sebagai label. Teks di bawah kontras AA.

Landmark & screen reader

Pengguna tunanetra menavigasi halaman lewat pembaca layar (screen reader) yang membacakan struktur, bukan piksel. Struktur itu datang dari elemen HTML semantik yang membentuk landmark — peta yang bisa dilompati pengguna dengan pintasan.

<!-- Struktur landmark yang benar -->
<header>  <!-- banner -->
  <nav aria-label="Utama"> ... </nav>
</header>
<main>    <!-- konten utama, satu per halaman -->
  <h1>Judul halaman</h1>
  <section aria-labelledby="s1"> ... </section>
</main>
<footer> ... </footer> <!-- contentinfo -->
Tips

Uji cepat tanpa alat khusus: navigasi seluruh alur hanya dengan keyboard (Tab, Shift+Tab, Enter, Esc, panah). Jika Anda tersangkut, tak tahu di mana fokus berada, atau tak bisa mencapai sebuah tombol — pengguna keyboard dan screen reader juga akan tersangkut. Ini menemukan 80% masalah aksesibilitas dalam lima menit.

9
Bagian II · Bab 9

Responsif & Mobile-First

Satu desain yang luwes di setiap ukuran layar.

Mayoritas pengguna produk Anda kemungkinan besar datang dari layar kecil. "Mobile-first" bukan sekadar memastikan situs muat di ponsel — ia adalah cara berpikir: rancang untuk kendala terberat (layar sempit, jempol, koneksi lambat) lebih dulu, lalu tingkatkan ke layar besar. Ini menghasilkan desain yang lebih fokus, karena keterbatasan memaksa Anda memprioritaskan.

Prinsip mobile-first dalam CSS

Tulis gaya dasar untuk layar kecil tanpa media query, lalu tambahkan penyempurnaan di breakpoint yang lebih besar dengan min-width. Ini lebih ringkas dan menghindari "membatalkan" gaya desktop di mobile.

/* Dasar: mobile (tanpa query) — satu kolom */
.grid{display:grid;gap:16px;grid-template-columns:1fr;}

/* Tablet ke atas — dua kolom */
@media (min-width:640px){
  .grid{grid-template-columns:repeat(2,1fr);}
}
/* Desktop — tiga kolom */
@media (min-width:1024px){
  .grid{grid-template-columns:repeat(3,1fr);}
}

Breakpoint yang lazim

NamaLebar minPerangkat khas
sm640pxPonsel besar / tablet potret
md768pxTablet
lg1024pxLaptop
xl1280pxDesktop

Namun jangan terpaku pada nama perangkat. Breakpoint terbaik adalah tempat di mana desain Anda mulai terlihat rusak — tambahkan breakpoint di sana, bukan pada angka "resmi".

Teknik modern tanpa banyak media query

/* Grid responsif tanpa satu pun media query */
.cards{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  gap:16px;
}
Hati-hati

Jangan bergantung pada hover di mobile — layar sentuh tak punya hover. Pastikan setiap informasi/aksi yang muncul saat hover juga tersedia lewat tap. Dan uji target sentuh: minimal 44×44px, dengan jarak antar target agar tidak salah tekan.

Tips

Uji responsif bukan hanya dengan mengecilkan jendela browser. Uji di perangkat sungguhan, dengan jempol sungguhan, di bawah cahaya matahari. Banyak masalah (target terlalu kecil, kontras kurang) hanya terasa di dunia nyata.

10
Bagian II · Bab 10

Microcopy & Konten UI

Kata-kata kecil yang menentukan apakah pengguna paham atau bingung.

Setiap label tombol, judul kolom, pesan error, dan placeholder adalah keputusan desain. Microcopy — teks-teks fungsional kecil ini — sering diserahkan pada pikiran terakhir, padahal ia adalah tempat pengguna benar-benar "berbicara" dengan produk Anda. Microcopy yang baik terasa seperti seorang teman yang membantu; yang buruk terasa seperti mesin yang menyalahkan Anda.

Design is thinking made visible.

Saul Bass, desainer grafis

Prinsip menulis untuk antarmuka

Menulis pesan error yang manusiawi

Pesan error yang baik menjawab tiga hal: apa yang terjadi, mengapa, dan bagaimana memperbaikinya — tanpa menyalahkan pengguna.

Error buruk

"Terjadi kesalahan."
"Input tidak valid."
"Error 0x8004005."

Tak jelas apa, kenapa, atau harus apa.

Error baik

"Kata sandi minimal 8 karakter — punyamu baru 5."
"Email ini sudah terdaftar. Mau masuk saja?"
"Koneksi terputus. Perubahan tersimpan; akan dikirim ulang otomatis."

Contoh microcopy per konteks

KonteksHindariLebih baik
Tombol submit form"Kirim""Buat akun"
State kosong"Tidak ada data""Belum ada proyek. Buat yang pertama →"
Konfirmasi hapus"Anda yakin?""Hapus 'Laporan Q3'? Aksi ini tak bisa dibatalkan."
Placeholder"Ketik di sini""cari nama atau email…"
Sukses"Berhasil""Tersimpan. Perubahanmu sudah live."
Catatan

Nada (tone) adalah keputusan desain juga. Aplikasi perbankan berbicara tenang dan tepercaya; aplikasi kreatif boleh lebih hangat dan bermain. Yang penting: konsisten, dan tetap jelas saat pengguna sedang stres (mis. saat error atau pembayaran).

Tips

Baca microcopy Anda dengan suara keras. Kalau terdengar kaku atau seperti robot, tulis ulang seolah Anda menjelaskan pada teman di sebelah. Uji juga panjangnya di mobile — kalimat panjang yang melipat tiga baris di tombol adalah tanda perlu diringkas.

11
Bagian II · Bab 11

State UI — Empty, Loading, Error, Success

Merancang untuk semua kondisi, bukan hanya yang ideal.

Desainer pemula merancang "happy path" — layar penuh data yang sempurna. Tapi produk nyata menghabiskan banyak waktunya di keadaan lain: saat masih kosong, saat sedang memuat, saat gagal. Layar-layar ini justru momen paling rentan bagi kepercayaan pengguna. Merancangnya dengan sengaja adalah tanda kematangan.

Empat keadaan yang wajib dirancang

1. Empty state (keadaan kosong)

Muncul saat belum ada data — pengguna baru, hasil pencarian nihil, folder kosong. Empty state yang baik bukan halaman putih hampa; ia adalah peluang onboarding: jelaskan apa yang akan muncul di sini, dan beri satu aksi jelas untuk memulai.

Empty state
Belum ada proyek

Proyek membantu Anda mengelompokkan pekerjaan. Buat yang pertama untuk memulai.

2. Loading state

Jangan pernah biarkan layar diam tanpa umpan balik (Heuristik #1). Pilihan bergantung durasi:

Skeleton screen
.skeleton{
  background:linear-gradient(90deg,#1d2230 25%,#222739 50%,#1d2230 75%);
  background-size:200% 100%;
  animation:shimmer 1.4s ease-in-out infinite;
}
@keyframes shimmer{
  0%{background-position:200% 0} 100%{background-position:-200% 0}
}

3. Error state

Saat sesuatu gagal, jangan biarkan pengguna terjebak. Jelaskan apa yang terjadi (bahasa manusia, Bab 10), dan beri jalan keluar: tombol "Coba lagi", tautan bantuan, atau kembali ke keadaan aman. Bedakan error yang bisa dipulihkan pengguna (input salah) dari yang bukan (server down) — nada dan aksinya berbeda.

Error state (dapat dipulihkan)
Gagal memuat

Tidak bisa menghubungi server. Periksa koneksi Anda, lalu coba lagi.

4. Success state

Konfirmasi bahwa aksi berhasil — tapi jangan menghalangi. Toast singkat yang muncul lalu hilang biasanya cukup; hindari modal "Berhasil!" yang memaksa klik. Untuk aksi besar (pembayaran selesai), halaman konfirmasi penuh dengan langkah berikutnya yang jelas justru menenangkan.

StateYang harus adaKesalahan umum
EmptyPenjelasan + satu aksi mulaiHalaman kosong tanpa arahan
LoadingUmpan balik proporsional durasiLayar beku; layout shift saat data tiba
ErrorApa, mengapa, cara pulihKode mentah; jalan buntu
SuccessKonfirmasi tak menghalangiModal wajib-klik untuk hal sepele
Tips

Buat daftar setiap layar yang menampilkan data, lalu untuk masing-masing tanyakan: seperti apa saat kosong? saat memuat? saat gagal? Menjawab tiga pertanyaan ini di awal mencegah "lubang" yang baru ketahuan setelah rilis.

12
Bagian II · Bab 12

Motion & Transisi

Gerak yang menjelaskan, bukan gerak yang memamerkan.

Motion yang baik hampir tak terlihat. Ia bekerja di bawah sadar: mengarahkan perhatian, menjelaskan hubungan sebab-akibat, dan membuat perpindahan terasa mulus alih-alih menyentak. Motion yang buruk melakukan kebalikannya — memperlambat, mengalihkan, dan lekas menjengkelkan setelah kali kesepuluh.

Motion is a tool for communication, not decoration.

Prinsip Material Design, Google

Fungsi motion dalam UI

Angka yang tepat: durasi & easing

JenisDurasiEasing
Umpan balik mikro (hover, tekan)100–150msease-out
Transisi kecil (dropdown, tooltip)150–250msease-out
Transisi besar (modal, panel)250–400msease-in-out
Keluar / hilanglebih cepat dari masukease-in

Aturan emas: sesuatu yang muncul boleh sedikit lambat (menarik perhatian); sesuatu yang pergi harus cepat (jangan menahan pengguna). Hindari durasi >500ms untuk interaksi rutin — terasa lamban.

:root{
  --dur-fast:120ms; --dur-base:220ms;
  --ease-out:cubic-bezier(.16,1,.3,1);
}
.panel{
  transition:transform var(--dur-base) var(--ease-out),
             opacity var(--dur-base) var(--ease-out);
}

Aksesibilitas motion: hormati preferensi

Sebagian orang mengalami mabuk gerak (motion sickness) atau gangguan vestibular. Sistem operasi mereka menyalakan "kurangi gerak". Selalu hormati ini — nonaktifkan atau perhalus animasi non-esensial.

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    transition-duration:.01ms !important;
    scroll-behavior:auto !important;
  }
}
Lakukan

Animasikan properti murah (transform, opacity). Gunakan motion untuk menjelaskan hubungan. Hormati prefers-reduced-motion.

Hindari

Animasi >500ms pada aksi rutin. Menganimasikan width/height/top (memicu reflow, tersendat). Gerak berlebihan yang memamerkan diri.

Hati-hati

Menganimasikan width, height, margin, atau top/left memaksa browser menghitung ulang layout tiap frame — hasilnya tersendat di perangkat lemah. Animasikan transform dan opacity yang ditangani GPU dan mulus.

13
Bagian III · Bab 13

Membangun Design System

Dari foundation ke komponen ke pola — dan dokumentasinya.

Design system adalah tempat semua bab sebelumnya menyatu. Ia bukan sekadar library komponen; ia adalah satu sumber kebenaran yang menghubungkan keputusan desain (token), unit yang dibangun darinya (komponen), cara merangkainya (pola), dan dokumentasi yang membuat semua orang memakainya dengan benar. Design system mengubah "konsistensi" dari harapan menjadi jaminan.

A design system is not a project. It is a product serving products.

Nathan Curtis, praktisi design system

Empat lapis design system

4 · Dokumentasi & Governance 3 · Pola (patterns) 2 · Komponen 1 · Foundation (tokens)
Setiap lapis dibangun di atas lapis di bawahnya. Foundation menopang semuanya.

Lapis 1 — Foundation (tokens)

Fondasi tak terlihat: skala warna, spacing, tipografi, radius, bayangan, dan motion — semua sebagai token (Bab 5). Ini adalah kosakata paling dasar. Semua lapis di atas hanya boleh memakai token ini, tak pernah nilai mentah.

Lapis 2 — Komponen

Unit UI yang dibangun dari token: tombol, input, kartu, badge, modal (Bab 6). Setiap komponen didefinisikan sekali, punya semua state, dan terdokumentasi (kapan dipakai, varian apa, prop apa).

Lapis 3 — Pola (patterns)

Rangkaian komponen yang menyelesaikan tugas berulang: form login, tabel data dengan filter, layout halaman detail, alur onboarding. Pola menjaga agar masalah yang sama dipecahkan dengan cara yang sama di seluruh produk.

Lapis 4 — Dokumentasi & governance

Apa gunanya sistem yang tak dipakai orang? Dokumentasi menjelaskan kapan dan bagaimana memakai tiap bagian, dengan contoh do/don't. Governance mengatur cara sistem berkembang: siapa boleh menambah komponen, bagaimana perubahan diusulkan, dan bagaimana versi dirilis.

Cara memulai (tanpa kewalahan)

  1. Audit dulu. Kumpulkan tangkapan layar semua tombol, warna, dan jarak yang sudah dipakai. Anda akan kaget melihat 14 warna abu berbeda. Ini bukti kebutuhannya.
  2. Tetapkan foundation. Kunci palet, skala spacing, dan type scale sebagai token. Ini fondasi termurah dengan dampak terbesar.
  3. Bangun 5 komponen inti. Tombol, input, kartu, badge, modal menutupi mayoritas kebutuhan. Jangan bangun 50 sekaligus.
  4. Dokumentasikan sambil jalan. Satu halaman per komponen: contoh hidup, varian, do/don't, kode.
  5. Tumbuhkan dari kebutuhan nyata. Tambah komponen saat produk benar-benar membutuhkannya, bukan spekulatif.
Catatan

Design system terbaik lahir dari produk nyata, bukan dari menara gading. Mulai kecil, pakai di produk sungguhan, dan biarkan gesekan sehari-hari memandu apa yang perlu ditambahkan. Sistem yang dibangun terisolasi cenderung tak terpakai.

Tips

Nama token adalah API design system Anda. Investasikan waktu menamainya dengan baik dan semantik (--color-action, bukan --blue). Nama semantik bertahan saat warna berubah; nama warna mentah langsung usang begitu rebranding.

Contoh dokumentasi satu komponen

Dokumentasi yang berguna bukan novel — ia adalah kartu ringkas yang menjawab pertanyaan praktis dengan cepat. Berikut kerangka dokumentasi satu komponen yang bisa Anda tiru untuk setiap entri di design system Anda:

BagianIsinya
Contoh hidupKomponen yang bisa diinteraksi, bukan sekadar gambar statis.
Kapan dipakaiSatu-dua kalimat: konteks yang tepat untuk komponen ini.
Kapan TIDAK dipakaiAlternatif yang lebih baik untuk kasus yang mirip tapi berbeda.
Varian & propDaftar varian (primary/secondary), ukuran, dan properti yang tersedia.
StateTampilan hover, focus, disabled, loading — dengan contoh.
AksesibilitasPeran ARIA, dukungan keyboard, catatan kontras.
KodeCuplikan siap salin (HTML/JSX/CSS).
Do / Don'tPerbandingan visual singkat pemakaian benar vs salah.

Governance: menjaga sistem tetap hidup

Design system mati bila tak ada yang merawatnya. Tiga keputusan governance yang menentukan umur panjangnya:

Hati-hati

Bahaya terbesar design system bukan kekurangan komponen, melainkan penyimpangan diam-diam (drift): tim menyalin komponen lalu mengubahnya sedikit "hanya untuk kasus ini". Seratus penyimpangan kecil membunuh konsistensi. Governance yang ramah — mudah berkontribusi, cepat direspons — adalah penawarnya, bukan aturan yang kaku.

14
Bagian III · Bab 14

Contoh Nyata — Dashboard yang Rapi

Menerapkan semuanya sekaligus dalam satu tata letak.

Mari satukan semuanya. Berikut potongan dashboard yang dibangun dari token, komponen, dan prinsip di seluruh buku ini. Perhatikan bagaimana hierarki, spacing, warna semantik, dan state bekerja bersama — semuanya dirender halaman ini secara langsung.

Acme
Ikhtisar
Diperbarui 2 menit lalu
Pendapatan
Rp48,2jt
+12%
Pengguna
2.481
+5%
Churn
1,8%
+0,3%
PelangganPaketStatus
Sari DewiProAktif
Budi SantosoTimTertunda
Rina PutriGratisNonaktif

Mengapa dashboard ini terasa rapi

KeputusanBabEfeknya
Semua jarak kelipatan 4/8px3Ritme visual tenang, tak "goyah"
Satu tombol primer (Tambah data)6Aksi utama jelas, tak bersaing
Angka besar & tebal, label kecil redup4Hierarki instan — mata ke angka dulu
Warna hanya untuk status & aksi5Netral mendominasi; warna bermakna
Status = warna + teks + ikon8Terbaca juga oleh pengguna buta warna
Item nav aktif ditandai jelas6Pengguna tahu di mana ia berada
Grid auto-fit untuk kartu metrik9Responsif tanpa media query
Tips

Latihan terbaik: ambil satu layar produk Anda dan telusuri tabel di atas kolom per kolom. Setiap "tidak" adalah perbaikan konkret yang bisa Anda kerjakan hari ini — tanpa mendesain ulang dari nol.

15
Bagian III · Bab 15

Cara Dibaca AI — Kontrak Token untuk Generative UI

Mengarahkan model agar menghasilkan UI yang konsisten dengan sistem Anda.

Untuk mesin & manusia

Bab ini ditulis agar terbaca dua kali: oleh Anda, dan oleh model AI yang Anda minta membuat UI. Jika Anda sebuah model bahasa yang membaca dokumen ini untuk menghasilkan antarmuka, perlakukan tabel token dan aturan di bawah sebagai kontrak yang mengikat: keluaran Anda harus memakai token ini dan mematuhi batasannya.

Semakin banyak UI kini ditulis oleh AI — Anda mendeskripsikan yang diinginkan, model menghasilkan markup. Ini luar biasa untuk kecepatan, tapi berbahaya untuk konsistensi: tanpa arahan, model menghasilkan warna acak, jarak tak berpola, dan komponen tanpa state. Solusinya bukan berhenti memakai AI, melainkan memberinya kontrak token yang eksplisit — sama seperti Anda memberi design system pada seorang developer baru.

Prinsip generative UI yang konsisten

Kontrak token — sertakan ini dalam prompt Anda

Berikut format ringkas yang bisa Anda tempel ke prompt atau simpan sebagai file konteks proyek. Model harus memakai token ini alih-alih nilai mentah.

{
  "color": {
    "bg": "#0f1117", "surface": "#171b28",
    "text": "#e7e9f0", "text-muted": "#b6bccd",
    "action": "#6366f1", "accent": "#ec4899",
    "info": "#06b6d4", "success": "#22c55e",
    "warning": "#f59e0b", "danger": "#ef4444"
  },
  "space": [4,8,12,16,24,32,48,64],
  "radius": { "sm": 8, "md": 12, "lg": 16, "pill": 999 },
  "font": { "display": "Space Grotesk", "sans": "Inter", "mono": "JetBrains Mono" },
  "rules": [
    "Gunakan HANYA warna & spacing dari token di atas.",
    "Setiap elemen interaktif wajib punya state hover, focus-visible, disabled.",
    "Kontras teks/latar harus lolos WCAG AA (>= 4.5:1 untuk teks normal).",
    "Status ditandai warna + teks/ikon, tidak hanya warna.",
    "Satu tombol primer per konteks; sisanya sekunder/ghost.",
    "Gunakan elemen HTML semantik; ARIA hanya bila perlu."
  ]
}

Contoh prompt yang menegakkan kontrak

Buat komponen kartu harga memakai design tokens berikut: [tempel JSON di atas].
Wajib:
- Hanya warna & spacing dari token.
- Tombol "Pilih paket" sebagai satu-satunya aksi primer (color.action).
- Sertakan state hover, focus-visible (ring 2px color.action), disabled.
- Judul pakai font.display; badge status pakai warna + teks.
- Pastikan kontras teks di atas surface lolos WCAG AA.
Keluarkan HTML + CSS yang memakai CSS custom properties untuk token.
Catatan

Kunci keberhasilan generative UI adalah memindahkan design system dari kepala Anda ke dalam konteks yang dibaca model. Struktur mesin-terbaca (JSON token + daftar aturan eksplisit) jauh lebih andal daripada deskripsi prosa. Perlakukan kontrak token seperti kode: versikan, dan perbarui saat sistem berubah.

Memverifikasi keluaran AI

Jangan percaya buta. Setelah model menghasilkan UI, jalankan checklist cepat:

Ringkasan kontrak

UI konsisten dari AI = token eksplisit + batasan yang tegas + tuntutan kelengkapan state & aksesibilitas + verifikasi keluaran. Model adalah pelaksana yang cepat; Anda tetap arsitek yang menetapkan sistemnya.

16
Bagian III · Bab 16

Penutup

Prinsip yang tersisa saat detail memudar.

Jika Anda melupakan sebagian besar teknik di buku ini — nilai spacing spesifik, sintaks Tailwind, ambang kontras yang pasti — tidak apa-apa. Yang perlu tinggal adalah cara berpikir: desain adalah rangkaian keputusan yang bisa disistematisasi, dan konsistensi mengalahkan kecemerlangan sesekali.

Simplicity is the ultimate sophistication.

Leonardo da Vinci — dikutip Paul Rand sebagai inti desain modern

Tujuh prinsip yang bertahan

  1. Antarmuka adalah produk bagi pengguna. Rawat permukaannya seperti Anda merawat kodenya.
  2. Batasi pilihan. Skala spacing, palet terbatas, sedikit font — batasan melahirkan konsistensi.
  3. Hierarki adalah kejelasan. Buat satu hal menonjol, bukan semua berteriak.
  4. Kelengkapan state memisahkan yang matang dari yang setengah jadi.
  5. Aksesibilitas bukan opsional. Kontras, keyboard, semantik — untuk semua orang.
  6. Kata-kata adalah desain. Microcopy yang jelas menyelamatkan pengguna yang bingung.
  7. Sistematiskan. Token dan design system mengubah niat baik menjadi jaminan.

Desain yang baik jarang diperhatikan — justru karena ia bekerja mulus, tak menuntut perhatian. Tujuan Anda bukan membuat pengguna berkata "desain ini indah", melainkan membuat mereka mencapai tujuannya tanpa pernah memikirkan desainnya sama sekali. Itulah pencapaian tertinggi: desain yang tak terlihat karena begitu tepat.

Good design, when it's done well, becomes invisible. It's only when it's done poorly that we notice it.

Jared Spool, praktisi UX

Tanya Jawab (FAQ)

Saya developer, bukan desainer. Bisakah saya membuat UI yang baik?

Ya. Sebagian besar dampak berasal dari disiplin, bukan bakat: pakai skala spacing, batasi warna, cek kontras, beri komponen semua state. Semua bisa dipelajari dan diaturan — persis yang buku ini ajarkan.

Apakah saya harus memakai Tailwind?

Tidak wajib. Tailwind memudahkan menegakkan token, tapi prinsip yang sama berlaku di CSS biasa, CSS Modules, atau CSS-in-JS. Pilih alat yang cocok dengan tim Anda; prinsipnya universal.

Berapa banyak warna yang ideal?

Satu brand + satu skala netral + empat warna status (sukses/peringatan/error/info) sudah cukup untuk mayoritas produk. Netral akan mendominasi 90% UI.

Dark mode dulu atau light mode dulu?

Rancang dengan token semantik sejak awal, dan keduanya menjadi hampir gratis. Jika harus memilih satu untuk dirilis lebih dulu, ikuti mayoritas pengguna Anda — tapi arsitektur tokennya harus mendukung keduanya.

Apakah AI akan menggantikan desainer?

AI mempercepat pelaksanaan, tapi keputusan sistem — token, prinsip, prioritas, trade-off — tetap milik manusia. Peran bergeser dari "menggambar piksel" ke "menetapkan dan menegakkan sistem" (Bab 15).

Dari mana saya mulai kalau produk saya sudah berantakan?

Audit dulu (kumpulkan semua warna & jarak yang dipakai), tetapkan foundation token, lalu perbaiki satu layar memakai tabel di Bab 14. Perbaikan bertahap mengalahkan desain ulang total.

Apakah animasi membuat produk terasa lebih premium?

Hanya jika ia menjelaskan sesuatu. Motion fungsional (umpan balik, kontinuitas) menaikkan kualitas yang dirasakan; motion dekoratif berlebihan justru memperlambat dan menjengkelkan setelah pemakaian kesepuluh. Sedikit, tepat, dan cepat mengalahkan banyak dan mencolok (Bab 12).

Berapa breakpoint responsif yang saya butuhkan?

Sesedikit mungkin. Mulai mobile-first, dan tambahkan breakpoint hanya di tempat desain Anda mulai terlihat rusak — bukan pada angka "resmi" perangkat. Teknik fluid seperti clamp() dan grid auto-fit sering menghapus kebutuhan akan banyak breakpoint (Bab 9).

Haruskah setiap komponen punya semua state sejak awal?

Untuk komponen interaktif, ya — minimal default, hover, focus-visible, dan disabled. State ini murah dibangun di awal tapi mahal ditambal belakangan, dan ketiadaannya adalah tanda paling cepat terlihat bahwa sebuah UI setengah jadi (Bab 6).

Glosarium

IstilahArti
Design tokenVariabel bernama yang menyimpan keputusan desain (warna, spacing, dll).
Token primitifToken yang menamai nilai mentah (--indigo-500).
Token semantikToken yang menamai peran (--color-action) dan menunjuk primitif.
Hierarki visualPenataan agar mata tahu urutan penting elemen.
Type scaleDeret ukuran font berbasis rasio tetap.
Rasio kontrasPerbandingan luminance teks vs latar (1:1 sampai 21:1).
WCAGWeb Content Accessibility Guidelines — standar aksesibilitas web.
ARIAAtribut untuk menyampaikan peran/keadaan ke teknologi bantu.
Skeleton screenPlaceholder berbentuk konten yang tampil saat memuat.
MicrocopyTeks fungsional kecil di UI (label, error, placeholder).
Empty stateTampilan saat belum ada data.
Utility-firstMenyusun gaya dari kelas utilitas kecil (mis. Tailwind).
Design systemSumber kebenaran tunggal: token, komponen, pola, dokumentasi.
Focus-visibleState fokus yang hanya tampil saat navigasi keyboard.
Container queryGaya yang merespons lebar kontainer, bukan viewport.
AffordancePetunjuk visual bahwa sebuah elemen bisa diinteraksi (mis. tombol yang tampak bisa ditekan).
Beban kognitifUsaha mental yang dikeluarkan pengguna untuk memakai antarmuka.
LandmarkElemen HTML semantik (header, main, nav) yang membentuk peta navigasi bagi screen reader.
Luminance relatifUkuran kecerahan warna yang dipakai untuk menghitung rasio kontras WCAG.

Checklist Rilis UI

Jalankan sebelum merilis layar apa pun ke pengguna:

Fondasi
  • Semua jarak dari skala 4/8px
  • Warna hanya dari palet token
  • Type scale konsisten (bukan ukuran acak)
  • Panjang baris teks 45–75 karakter
Komponen
  • Hover, focus-visible, disabled ada
  • Satu tombol primer per konteks
  • Form: label terlihat, error jelas
  • Item nav aktif ditandai
Aksesibilitas
  • Kontras teks lolos WCAG AA
  • Bisa dioperasikan penuh via keyboard
  • Status = warna + teks/ikon
  • HTML semantik; alt text bermakna
State & konten
  • Ada empty, loading, error state
  • Microcopy jelas & ramah
  • Responsif di mobile (target ≥44px)
  • Motion hormati prefers-reduced-motion
Kata terakhir

Cetak checklist ini dan tempel di dekat layar Anda. Desain yang baik bukan momen inspirasi — ia adalah kebiasaan kecil yang diulang dengan disiplin, layar demi layar, rilis demi rilis. Selamat merancang.

Lampiran A — Referensi Token Lengkap

Kumpulan token semantik yang dipakai buku ini, siap Anda adaptasi sebagai titik awal design system Anda sendiri. Semuanya dalam bentuk CSS custom properties agar mudah dipetakan ke light/dark mode.

:root{
  /* — Warna primitif — */
  --indigo-500:#6366f1; --fuchsia-500:#ec4899; --cyan-500:#06b6d4;
  --green-500:#22c55e; --amber-500:#f59e0b; --red-500:#ef4444;
  --gray-50:#f8fafc; --gray-400:#828aa0; --gray-900:#0f1117;

  /* — Warna semantik (dark) — */
  --color-bg:#0f1117; --color-surface:#171b28;
  --color-text:#e7e9f0; --color-text-muted:#b6bccd;
  --color-action:var(--indigo-500); --color-accent:var(--fuchsia-500);
  --color-success:var(--green-500); --color-warning:var(--amber-500);
  --color-danger:var(--red-500); --color-info:var(--cyan-500);

  /* — Spacing (skala 4px) — */
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px;
  --space-6:24px; --space-8:32px; --space-12:48px; --space-16:64px;

  /* — Radius — */
  --radius-sm:8px; --radius-md:12px; --radius-lg:16px; --radius-pill:999px;

  /* — Tipografi — */
  --font-display:'Space Grotesk',sans-serif;
  --font-sans:'Inter',system-ui,sans-serif;
  --font-mono:'JetBrains Mono',monospace;
  --text-sm:0.8rem; --text-base:1rem; --text-lg:1.25rem;
  --text-xl:1.563rem; --text-2xl:1.953rem; --text-3xl:2.441rem;

  /* — Motion — */
  --dur-fast:120ms; --dur-base:220ms; --dur-slow:360ms;
  --ease-out:cubic-bezier(.16,1,.3,1);
}

Lampiran B — Ringkasan Ambang Aksesibilitas

AspekAmbang wajibRujukan bab
Kontras teks normal (AA)≥ 4.5 : 1Bab 8
Kontras teks besar (AA)≥ 3 : 1Bab 8
Kontras teks normal (AAA)≥ 7 : 1Bab 8
Kontras komponen UI & ikon≥ 3 : 1Bab 8
Ukuran target sentuh≥ 44 × 44 pxBab 2, 9
Ukuran teks isi minimum≥ 16 pxBab 4
Panjang baris ideal45–75 karakterBab 4
Tinggi baris teks isi1.4–1.7Bab 4

Lampiran C — Bacaan Lanjut

Untuk memperdalam tiap tema, karya-karya klasik berikut layak dibaca langsung dari sumbernya:

Don't make me think.

Steve Krug, judul buku usability paling berpengaruh

— Selesai —

GP
Tentang Penulis
Galih Prasetyo

Perancang produk dan praktisi front-end yang menghabiskan bertahun-tahun di persimpangan antara kode dan desain — membangun antarmuka, merapikan design system, dan membantu tim mengubah "kelihatan berantakan" menjadi "terasa profesional".

Ia menulis seri Design Studio dengan satu keyakinan: desain yang baik bukan bakat gaib, melainkan sistem yang bisa dipelajari siapa saja yang mau disiplin. Buku ini adalah destilasi dari keyakinan itu.

↑ Awal Buku