6. User Interface¶
Standar Antarmuka Pengguna / User Interface Standard¶
Antarmuka adalah wajah aplikasi — bagian yang langsung dirasakan pengguna. Tanpa standar, UI cepat berantakan: setiap halaman terlihat berbeda, komponen serupa di-implement ulang dengan bug masing-masing, dan pengguna dengan disabilitas tidak bisa memakai aplikasi.
The user interface is the face of an application — what users directly experience. Without standards, a UI quickly becomes chaotic: pages look different from each other, similar components are reimplemented with their own bugs, and users with disabilities can't use the app.
Komponen UI Standar / Standard UI Component¶
Apa ini? / What is this?¶
ID: Sekumpulan komponen UI (tombol, input, modal, table, dll.) yang sudah dibangun, di-test, dan dirilis sebagai library bersama. Semua aplikasi/halaman wajib pakai komponen dari library ini, bukan bikin sendiri.
EN: A set of UI components (buttons, inputs, modals, tables, etc.) that are built, tested, and shipped as a shared library. Every app/page must use components from this library rather than rolling their own.
Mengapa penting? / Why it matters?¶
- Konsistensi visual — tombol "Submit" di mana-mana terlihat sama.
- Quality satu kali, dipakai semua — fix bug di library → semua halaman dapat manfaat.
- Velocity — tim fitur tidak menghabiskan waktu memikirkan padding & warna tombol.
- Aksesibilitas built-in — sekali komponen aksesibel, semua pakai = aksesibel.
Use Case¶
Skenario: Tanpa komponen library, 5 tim membuat 5 versi tombol "Bayar" mereka sendiri. Hasilnya: warna sedikit beda (#1976D2 vs #1A77D5), ukuran beda, beberapa pakai loading spinner beberapa tidak. Pengguna bingung; brand inkonsisten.
Dengan library: semua import
<PrimaryButton loading={isSubmitting}>Bayar</PrimaryButton>→ identik di mana-mana.
Istilah & Konsep / Glossary¶
- Component Library — kumpulan komponen reusable (mis. internal "Acme UI Kit", atau open source: MUI, Ant Design, Shadcn).
- Internal Package Registry — server private untuk publikasi package (npm Enterprise, JFrog Artifactory, GitHub Packages).
- Versioning — library dirilis dengan versi (mis. v2.3.1) — aplikasi pin versi untuk stabilitas.
- Migration Guide — petunjuk pindah dari komponen lama ke yang baru, biasanya saat satu versi di-deprecated.
- Deprecated — masih ada, tapi tidak disarankan dipakai & akan dihapus di versi mendatang.
Aturan / Rules¶
Mandatory Semua UI pakai komponen dari component library internal yang disetujui — JANGAN komponen custom one-off tanpa approval.
Mandatory Component library diberi versi & dipublikasi ke internal package registry.
Mandatory Komponen baru melalui design review sebelum masuk library.
Mandatory Komponen yang di-deprecated diberi flag di library dengan migration guide ke pengganti.
Mandatory Komponen di-test untuk: rendering, interaction state, responsiveness, accessibility.
Design System¶
Apa ini? / What is this?¶
ID: Design system lebih luas dari sekadar komponen — ia adalah keseluruhan sistem yang mengatur tampilan: warna, tipografi, spacing, ikonografi, motion, plus dokumentasi penggunaan & filosofi desain. Komponen UI adalah salah satu output design system.
EN: A design system is broader than just components — it's the entire system governing appearance: colors, typography, spacing, iconography, motion, plus usage documentation and design philosophy. UI components are one output of a design system.
Mengapa penting? / Why it matters?¶
- Single source of truth untuk visual brand.
- Designer & developer berbicara bahasa yang sama lewat design tokens.
- Mengganti tema (mis. dukung dark mode, rebranding) jadi mudah jika token terdefinisi.
Use Case¶
Skenario: Brand memutuskan warna primer pindah dari biru ke hijau. Tanpa design system: 200 file CSS perlu diubah manual → minggu pekerjaan, kemungkinan miss.
Dengan design system + design tokens: ubah
--color-primary: green;di satu file → 200 halaman ter-update otomatis.
Istilah & Konsep / Glossary¶
- Design Tokens — variabel desain bernama (mis.
color.primary.500,spacing.md,font.heading.lg). Bukan nilai literal yang berserakan. - Storybook — tool untuk men-showcase komponen di luar aplikasi, dengan contoh interaktif. Berfungsi sebagai "katalog komponen".
- Light / Dark Mode — dua skema warna; aplikasi modern wajib dukung keduanya.
- Breakpoint — titik di mana layout berubah (mis. mobile < 768px, tablet 768-1024px, desktop > 1024px).
- Responsive Design — UI yang menyesuaikan layout sesuai ukuran layar.
- CSS Variable / Custom Property — variabel di CSS (
--color-primary: #1976D2) yang bisa diubah runtime.
Anti-pattern¶
- ❌ Warna hex hardcoded di tiap komponen:
color: #1976D2;di mana-mana. - ❌
margin-top: 13px— kenapa 13? Pakai tokenspacing.sm(8px) atauspacing.md(16px). - ❌ Tidak ada Storybook → developer tidak tahu komponen yang ada → bikin sendiri.
Aturan / Rules¶
Mandatory Semua komponen UI berasal dari design system yang disetujui — JANGAN ad-hoc styling.
Mandatory Komponen didokumentasikan dengan contoh penggunaan di component library (mis. Storybook).
Mandatory Design token (warna, spacing, tipografi) didefinisikan sebagai variabel — JANGAN nilai hardcoded.
Mandatory Setiap komponen punya unit test untuk rendered output & interaction state.
Mandatory Komponen mendukung light & dark mode.
Mandatory Perilaku responsif didefinisikan per komponen untuk semua breakpoint yang didukung.
Aksesibilitas / Accessibility (a11y)¶
Apa ini? / What is this?¶
ID: Aksesibilitas (sering disingkat a11y — "a" + 11 huruf + "y") = praktik membuat aplikasi bisa dipakai semua orang, termasuk:
- Pengguna screen reader (tunanetra).
- Pengguna yang hanya bisa keyboard (tidak bisa mouse).
- Pengguna color blind.
- Pengguna dengan disabilitas motorik, kognitif, dll.
EN: Accessibility (often abbreviated a11y) = the practice of making apps usable by everyone, including users of screen readers, keyboard-only users, color blind users, and users with various disabilities.
Mengapa penting? / Why it matters?¶
- Etis & inklusif — sebagian populasi punya disabilitas; aplikasi tidak boleh menutup pintu.
- Legal — banyak negara mewajibkan aksesibilitas untuk situs publik / pemerintah.
- Bisnis — jangkauan pengguna lebih luas.
- SEO & UX umum — banyak praktik a11y meningkatkan UX untuk semua orang (mis. label yang jelas).
Use Case¶
Skenario: Form login Anda tidak punya
<label>untuk input email. Pengguna screen reader mendengar: "edit text, edit text" — tidak tahu mana untuk email, mana untuk password. Tidak bisa login.Dengan label eksplisit: screen reader berkata "Email, edit text. Password, edit text" → bisa diisi dengan benar.
Istilah & Konsep / Glossary¶
- WCAG (Web Content Accessibility Guidelines) — standar a11y internasional dari W3C. Versi terbaru 2.1 / 2.2.
- WCAG Level A / AA / AAA — tingkat kepatuhan. AA = target umum aplikasi publik. AAA sangat ketat, biasanya hanya untuk konten khusus.
- Screen Reader — software yang membaca konten layar dengan suara: NVDA, JAWS, VoiceOver, TalkBack.
- Semantic HTML — pakai tag HTML sesuai maknanya:
<button>untuk tombol (bukan<div onClick>),<nav>,<main>,<article>. - ARIA (Accessible Rich Internet Applications) — atribut tambahan untuk memberi makna semantik di mana HTML asli tidak cukup (mis.
aria-label,role). - alt text — atribut
altdi tag<img>. Berisi deskripsi gambar untuk pengguna yang tidak bisa melihat. - Decorative Image — gambar yang hanya untuk hiasan (bukan informasi). Pakai
alt=""agar screen reader skip. - Keyboard Navigation — semua aksi (klik tombol, isi form, buka menu) dapat dilakukan dengan keyboard (Tab, Enter, Space, arrow keys).
- Focus Indicator — outline visual yang menunjukkan elemen mana yang sedang fokus keyboard.
- Color Contrast Ratio — perbandingan kecerahan teks vs background. WCAG AA: ≥ 4.5:1 untuk teks normal.
- axe-core — engine populer untuk automated a11y testing.
Anti-pattern¶
- ❌ `Klik
— bukan keyboard-accessible. Pakai
Aturan / Rules¶
Mandatory Semua UI memenuhi minimal WCAG 2.1 Level AA.
Mandatory Setiap elemen interaktif dapat dinavigasi dengan keyboard.
Mandatory Semua image punya alt deskriptif. Image dekoratif pakai alt="".
Mandatory Warna BUKAN satu-satunya cara menyampaikan informasi.
Mandatory Form punya label eksplisit yang terhubung ke setiap input.
Mandatory Automated a11y check (mis. axe-core) jalan sebagai bagian dari CI pipeline.
Ringkasan / Summary¶
- Component library mencegah re-implementasi tombol & input yang sama berulang kali.
- Design system + design tokens = bahasa bersama designer & developer; mempermudah rebranding & dark mode.
- Aksesibilitas bukan opsional — wajib WCAG AA, kerjakan dari awal (lebih murah daripada retrofit).
Selanjutnya: 7. Optional Features — fitur tambahan seperti feature flags.