Design Guideline — Central Membership & SSO Hub
1. Tujuan Dokumen
Dokumen ini menjadi panduan desain visual dan pengalaman pengguna (UX) yang wajib diikuti dalam pengembangan antarmuka Central Membership & SSO Hub.
2. Prinsip Desain
- Mobile-First: Desain dirancang untuk layar mobile terlebih dahulu, kemudian diadaptasi ke tablet dan desktop.
- Premium & Minimal: Elemen bersih, tidak berlebihan, setiap elemen harus memiliki tujuan.
- Konsisten: Komponen, spacing, warna, dan tipografi harus konsisten di seluruh halaman.
- Aksesibel: Kontras warna memenuhi standar WCAG 2.1 AA.
- Responsif terhadap State: Setiap status (loading, error, success, empty) harus memiliki tampilan yang sesuai.
3. Tema
Sistem mendukung dua tema:
- Dark Mode (default)
- Light Mode
Pengguna dapat beralih antar tema melalui toggle di halaman profil atau pengaturan. Preferensi tema disimpan secara lokal.
4. Palet Warna
4.1 Dark Mode
| Token | Hex | Penggunaan |
|---|---|---|
bg-base |
#0F0F13 |
Latar belakang utama halaman |
bg-surface |
#1A1A24 |
Card, panel, modal |
bg-elevated |
#22222F |
Dropdown, tooltip, popup |
border |
#2A2A38 |
Garis pemisah, border input |
accent-start |
#7C3AED |
Gradient mulai (purple) |
accent-end |
#A78BFA |
Gradient akhir (purple muda) |
success |
#10B981 |
Status aktif, konfirmasi |
warning |
#F59E0B |
Grace Period, peringatan |
danger |
#EF4444 |
Error, suspend, hapus |
text-primary |
#F1F0FF |
Teks utama |
text-secondary |
#A1A1B5 |
Teks keterangan |
text-muted |
#6B7280 |
Placeholder, label tidak aktif |
4.2 Light Mode
| Token | Hex | Penggunaan |
|---|---|---|
bg-base |
#F8F8FC |
Latar belakang utama |
bg-surface |
#FFFFFF |
Card, panel, modal |
bg-elevated |
#F1F0FF |
Dropdown, tooltip |
border |
#E2E2EE |
Garis, border input |
accent-start |
#7C3AED |
Gradient mulai |
accent-end |
#A78BFA |
Gradient akhir |
success |
#059669 |
Status aktif |
warning |
#D97706 |
Peringatan |
danger |
#DC2626 |
Error |
text-primary |
#111118 |
Teks utama |
text-secondary |
#4B4B63 |
Teks keterangan |
text-muted |
#9CA3AF |
Placeholder |
4.3 Warna Aksen (Gradient)
Tombol utama dan elemen highlight menggunakan gradient:
background: linear-gradient(135deg, #7C3AED, #A78BFA);
5. Tipografi
Font Utama: Inter (Google Fonts)
Font Monospace (untuk License-ID): JetBrains Mono atau Fira Code
5.1 Skala Tipografi
| Nama | Size | Weight | Penggunaan |
|---|---|---|---|
display |
28px / 1.75rem | 700 | Judul halaman utama |
heading-1 |
22px / 1.375rem | 700 | Judul section |
heading-2 |
18px / 1.125rem | 600 | Sub-judul, nama produk |
body-lg |
16px / 1rem | 400 | Teks utama |
body |
14px / 0.875rem | 400 | Teks konten umum |
body-sm |
12px / 0.75rem | 400 | Keterangan, label kecil |
caption |
11px / 0.6875rem | 400 | Metadata, timestamp |
code |
14px / 0.875rem | 500 | License-ID, kode teknis |
6. Spacing
Menggunakan sistem kelipatan 4px:
| Token | Value | Penggunaan |
|---|---|---|
space-1 |
4px | Jarak sangat kecil |
space-2 |
8px | Padding dalam elemen kecil |
space-3 |
12px | Jarak antar elemen inline |
space-4 |
16px | Padding card, jarak antar komponen |
space-5 |
20px | Margin section |
space-6 |
24px | Padding halaman mobile |
space-8 |
32px | Jarak antar section besar |
space-10 |
40px | Header tinggi |
space-12 |
48px | Jarak antar halaman section |
Padding halaman mobile: 24px kiri-kanan
7. Border Radius
| Token | Value | Penggunaan |
|---|---|---|
radius-sm |
8px | Button kecil, badge |
radius-md |
12px | Input, button utama |
radius-lg |
16px | Card produk, panel |
radius-xl |
20px | Modal, bottom sheet |
radius-full |
9999px | Pill badge, avatar |
8. Komponen Utama
8.1 Button
| Varian | Tampilan | Penggunaan |
|---|---|---|
| Primary | Gradient purple, teks putih | Aksi utama (Masuk, Aktifkan, Bayar) |
| Secondary | Border purple, teks purple | Aksi kedua (Batal, Kembali) |
| Danger | Background merah muda, teks merah | Hapus, batalkan |
| Ghost | Transparan, teks muted | Link action |
- Ukuran default:
height: 48px,border-radius: 12px,font-weight: 600 - Full-width di mobile
- State:
default,hover,active,disabled,loading
8.2 Input Field
height: 52pxborder-radius: 12pxborder: 1px solid border- Label selalu di atas input (bukan floating label)
- State:
default,focus,error,disabled - Error message muncul di bawah input, berwarna merah
8.3 Status Badge
| Status | Warna | Contoh |
|---|---|---|
| Aktif | Hijau (success) + dot pulse |
● Aktif |
| Free Forever | Aksen purple | Free Forever |
| Grace Period | Kuning (warning) |
⚠ Grace Period · 3 hari |
| Suspended | Merah (danger) |
✕ Ditangguhkan |
| Unverified | Abu (muted) |
Email belum terverifikasi |
8.4 License-ID Card
- Background:
bg-elevateddengan border subtle - Font: monospace (
JetBrains Mono) - Tombol copy di sisi kanan
- Muncul feedback "Disalin!" setelah diklik (toast 2 detik)
8.5 Product Card
Kartu langganan produk di dashboard:
┌──────────────────────────────────┐
│ [Logo] Nama Produk [● Aktif] │
│ ─────────────────────────────── │
│ License ID │
│ NTO-A1B2-C3D4-E5F6 [Copy] │
│ ─────────────────────────────── │
│ [Free Forever] Buka App → │
└──────────────────────────────────┘
8.6 Toast / Snackbar
- Muncul di bagian bawah layar (mobile), atas kanan (desktop)
- Durasi: 3 detik, dapat ditutup manual
- Tipe:
success,error,warning,info
8.7 Bottom Navigation (Mobile)
4 tab navigasi:
| Tab | Ikon | Label |
|---|---|---|
| Home | House | Home |
| Products | Grid | Produk |
| History | Clock | Riwayat |
| Profile | Member | Profil |
9. Animasi & Transisi
| Elemen | Animasi | Durasi |
|---|---|---|
| Perpindahan halaman | Slide up (mobile) / Fade (desktop) | 250ms |
| Modal / Bottom Sheet | Slide up dari bawah | 300ms |
| Toast | Slide in dari bawah | 200ms |
| Button tap | Scale 0.97 | 100ms |
| Status badge | Dot pulse (green aktif) | Looping |
| Halaman sukses | Checkmark draw + confetti ringan | 600ms |
| Skeleton loading | Shimmer left-to-right | Looping |
Semua animasi menggunakan ease-out easing.
10. Responsive Breakpoints
| Nama | Breakpoint | Layout |
|---|---|---|
| Mobile | < 640px | Full-width, bottom nav |
| Tablet | 640px – 1024px | Sidebar tersembunyi, top nav |
| Desktop | > 1024px | Sidebar persisten, 2-kolom |
11. Dark / Light Mode Toggle
- Toggle tersedia di halaman Profil dan Header (ikon matahari/bulan).
- Transisi tema: 200ms fade semua elemen.
- Preferensi disimpan di
localStoragedan diaplikasikan sebelum render (mencegah flash).
12. Aturan UX
- Setiap aksi destruktif (batalkan, logout) harus meminta konfirmasi.
- Tombol utama hanya satu per halaman (tidak membingungkan pengguna).
- Pesan error harus spesifik dan memberi arahan solusi, bukan hanya kode error.
- Halaman kosong (empty state) harus memiliki ilustrasi dan CTA yang relevan.
- Setiap proses async harus menampilkan state loading.
- Formulir yang gagal harus mempertahankan data yang sudah diisi.
- License-ID harus selalu mudah disalin (satu tap/klik).
- Navigasi utama selalu terlihat di mobile (sticky bottom nav).