- All 7 pages rewritten: Dashboard, Terminal, Snippets, Keychain, SFTP, Settings, Brief - Apply consistent Lumina glassmorphic theme (rounded-2xl, shadows, borders, tracking) - Fix SVG icons not rendering — return template.HTML instead of string - Fix Alpine x-data scoping: terminal tabs, SFTP modals, snippet tag buttons - Fix dashboard search sending literal ?q=... - Rebuild CSS with all new Tailwind classes (62KB) - Add .air.toml with hot-reload config, docs/PERBAIKANUI.md checklist - Remove unused backup partials
9.9 KiB
🔍 Hostkeeper V2 — UI/UX Audit & Perbaikan Checklist
Acuan perbaikan UI — Bandingkan HTMX implementation dengan React template di
template/src/components/Target: Menyamakan visual dengan Lumina Design System hingga level piksel Last Updated: 2026-07-07
🎨 Design System Reference
| Token | Value | Status |
|---|---|---|
| Primary | #0050cb |
✅ OK |
| Secondary | #006e2f |
✅ OK |
| Tertiary | #7e23cc |
✅ OK |
| Surface | #f7f9fb |
✅ OK |
| On Surface | #191c1e |
✅ OK |
| On Surface Variant | #424656 |
✅ OK |
| Outline | #727686 |
✅ OK |
| Outline Variant | #c2c6d8 |
✅ OK |
| Error | #b3261e |
✅ OK |
| Surface Container Low | #f0f2f5 |
✅ OK |
| Surface Container | #eaecf0 |
✅ OK |
| Font Sans | Inter (300–900) | ✅ OK |
| Font Mono | JetBrains Mono (300–700) | ✅ OK |
| Dot Grid | radial-gradient(#e2e8f0 1.5px, transparent 1.5px) 16px |
✅ OK |
| Sidebar Width | 260px |
✅ OK |
🔴 P0 — DASHBOARD (index.html + host_list.html + host_modal.html)
Task #1: Banner Stats ✅ Selesai
Task #2: Status Filter ✅ Selesai
Task #3: Search Bar ✅ Selesai
Task #4: View Toggle ✅ Selesai
Task #5: Section Title ✅ Selesai
Task #6: Host Card Grid ✅ Selesai
Task #7: Add Host Card ✅ Selesai
Task #8: Host Card List ✅ Selesai
Task #9: Transfer Panel
Referensi: template/src/components/DashboardView.tsx:306-356
Template punya section "Background Transfers" dengan:
- Line separator + judul
- Table header: Source & File | Destination | Progress
- Tiap row: icon (download=tertiary/upload=primary), nama file, source, destination panah, progress bar (h-1.5, bg-secondary, shadow), percentage + speed
HTMX: Hanya "No active transfers" di sidebar ❌
Files: app/backend/views/index.html + app/backend/views/host_list.html
Task #10: Add Host Modal ✅ Selesai
🔴 P0 — TERMINAL (terminal.html + terminal.js)
Task #11: Ubah theme dari dark ke light (Lumina)
Referensi: template/src/components/TerminalView.tsx:208-284
| Detail | Template (wajib) | HTMX Saat Ini |
|---|---|---|
| Background terminal | bg-white |
bg-[#0d1117] ❌ |
| Tab bar | bg-surface-container-low |
bg-[#161b22] ❌ |
| Tab border | border-b border-outline-variant/30 |
border-[#30363d] ❌ |
| Tab active | bg-white text-primary border-primary shadow |
bg-[#0d1117] text-white border-t-2 border-[#58a6ff] ❌ |
| Tab inactive | bg-surface-container-low text-on-surface-variant |
bg-[#161b22] text-[#8b949e] ❌ |
| Tab close | hover:bg-black/10 rounded |
hover:bg-[#30363d] ❌ |
| New tab button | bg-surface-container hover:bg-primary-container hover:text-on-primary-container |
styling dark ❌ |
| Terminal header | bg-surface-container-low border-b border-outline-variant/30 |
tidak ada |
Files: app/backend/views/terminal.html
Task #12: Traffic Light Dots
Referensi: template/src/components/TerminalView.tsx:212-216
Tambah 3 dot (red #b3261e, yellow #d6e3ff / kuning, green #006e2f) di kiri terminal header.
Files: app/backend/views/terminal.html
Task #13: SSH Connection String
Referensi: template/src/components/TerminalView.tsx:216
Tampilkan teks: ssh -i id_ed25519 root@{host.ip} dengan text-[10px] font-mono font-bold text-outline
Files: app/backend/views/terminal.html
Task #14: "Clear Buffer" Button
Referensi: template/src/components/TerminalView.tsx:219-232
Button text-[10px] uppercase font-bold text-outline hover:text-primary dengan RefreshCw icon.
Files: app/backend/views/terminal.html
Task #15: Terminal Output Styles
Referensi: template/src/components/TerminalView.tsx:241-255
| Type | Template | HTMX |
|---|---|---|
| input | text-on-surface font-bold |
(xterm.js) |
| error | text-error bg-error-container/20 px-2.5 py-1 rounded-md |
(xterm.js) |
| success | text-[#006e2f] bg-secondary-container/10 px-2.5 py-1 rounded-md font-semibold |
(xterm.js) |
| output | text-[#2244aa] |
(xterm.js) |
Ini perlu disesuaikan di terminal.js / xterm theme.
Files: app/backend/static/js/terminal.js, app/backend/views/terminal.html
Task #16: Input Prompt Bar
Referensi: template/src/components/TerminalView.tsx:259-283
| Detail | Template | HTMX |
|---|---|---|
| Background | bg-surface-container-low |
dark ❌ |
| Prompt | root@{host}:~$ dengan icon CornerDownLeft |
(di mock WebSocket) |
| Input | bg-transparent font-mono text-xs focus:ring-0 |
(xterm.js) |
| Execute button | bg-primary text-white rounded-lg hover:bg-primary-container |
tidak ada |
Files: app/backend/views/terminal.html
Task #17: Shortcut Pills
Referensi: template/src/components/TerminalView.tsx:287-301
Tambah rail shortcut di bawah terminal: help, ls, docker ps, uname -a, ping 8.8.8.8, cat server.js, keychain, clear.
| Detail | Template |
|---|---|
| Container | flex flex-wrap gap-2 text-[11px] font-mono font-bold text-on-surface-variant |
| Label | "SHORTCUT SUGGESTIONS:" |
| Pill | px-2.5 py-1 rounded-md bg-surface-container border border-outline-variant/30 hover:border-primary hover:bg-primary-container/10 |
Files: app/backend/views/terminal.html
Task #18: Status Info (Security + Host IP)
Referensi: template/src/components/TerminalView.tsx:197-205
| Detail | Template |
|---|---|
| Kiri | "SECURE CRYPTO PATH" dengan green dot + animate-pulse |
| Kanan | "HOST: {host.ip}" |
Files: app/backend/views/terminal.html
Task #19: Sync Mock Commands dengan Template
Referensi: template/src/components/TerminalView.tsx:61-129
Template punya command list: help, ls, docker ps, uname -a, ping 8.8.8.8, cat server.js, keychain, clear.
HTMX di Go handler punya: clear, exit, pwd, whoami, hostname, date, uptime, uname, ls, cd, cat, echo, ssh, help.
Output di tiap command juga harus disamakan dengan template (docker ps output, ls output, dll).
Files: app/backend/internal/handler/terminal.go
🔴 P0 — SNIPPETS (snippets.html + snippet_grid.html) ✅
Task #20: Layout — Ubah ke 12-col grid (sidebar + content) ✅ Selesai
Task #21: Sidebar — Collections ✅ Selesai
Task #22: Sidebar — Tag Categories ✅ Selesai
Task #23: Snippet Card — Stacked Layout ✅ Selesai
Task #24: Headers & Searching ✅ Selesai
Task #25: Add Snippet Modal (style) ✅ Selesai
Task #26: Data Model — Tambah field Snippet ✅ Selesai
🟡 P1 — KEYCHAIN (keychain.html + key_grid.html) ✅
Task #27: Layout — 2 col ✅ Selesai
Task #28: Key Card — Style Upgrade ✅ Selesai
Task #29: Add Key Modal (style) ✅ Selesai
Task #30: Security Advisory ✅ Selesai
🟡 P1 — SFTP (sftp.html + sftp_pane.html) ✅
Task #31: Header — Tambah subtitle ✅ Selesai
Task #32: File Pane — Table Structure ✅ Selesai
Task #33: Drop Zone — Style ✅ Selesai
Task #34: Toast Notification ✅ Selesai
🟡 P1 — SETTINGS (settings.html) ✅
Task #35: Layout — 2-column grid ✅ Selesai
Task #36: Profile — Editable Form ✅ Selesai
Task #37: Toggles — iOS-Style ✅ Selesai
Task #38: Billing Card (Kanan) ✅ Selesai
Task #39: Danger Zone — Style ✅ Selesai
🟡 P1 — BRIEF (brief.html)
Task #40: Ubah jadi Overlay Panel ✅
Referensi: template/src/components/BriefOverlay.tsx
Styling updated — color palette visual, typography samples, elevation examples, keyboard shortcuts. Halaman stilistik mirror template content.
Files: app/backend/views/brief.html
🟡 GLOBAL ISSUES ✅
Task #41: SVG Icons — Stroke-width
Periksa semua SVG inline, pastikan:
- Icon kecil (w-3.5, w-4):
stroke-width="1.5" - Icon besar (w-5, w-6, w-8+):
stroke-width="2"
Files: Semua view files
Task #42: Border Radius — rounded-2xl
Ubah dari rounded-xl ke rounded-2xl di:
- Host cards (host_list.html)
- Snippet cards (snippet_grid.html)
- Key cards (key_grid.html)
- Settings cards (settings.html)
- Modal containers (host_modal.html, snippets.html, keychain.html)
Task #43: Shadows
| Element | Target |
|---|---|
| Host card | shadow-sm normal, shadow-lg hover |
| Snippet card | shadow-sm |
| Key card | shadow-sm normal, shadow-lg hover |
| Modal | shadow-2xl |
| Settings card | shadow-sm |
Task #44: Text Styles
| Element | Target |
|---|---|
| Page title | text-xl font-bold tracking-tight |
| Subtitle | text-xs text-on-surface-variant mt-0.5 |
| Card title | font-bold text-base |
| Label form | text-xs font-bold text-on-surface-variant uppercase tracking-wider |
Task #45: Search Input — rounded-full
Semua search input: rounded-full bukan rounded-lg.
Files: index.html, snippets.html, keychain.html, sftp.html
Task #46: Nav — Icons
Periksa semua icon di nav (nav.html) apakah SVG sesuai dengan lucide equivalents:
- server → ok
- terminal →
TerminalSquare - folder-sync →
ArrowLeftRight - code2 →
Code - key-round →
Key - settings2 →
Settings
Files: app/backend/views/nav.html
🗺️ Execution Order
1. Dashboard (P0) → index.html, host_list.html, host_modal.html
2. Terminal (P0) → terminal.html, terminal.js
3. Snippets (P0) → snippets.html, snippet_grid.html, model/handler
4. Keychain (P1) → keychain.html, key_grid.html
5. SFTP (P1) → sftp.html, sftp_pane.html
6. Settings (P1) → settings.html
7. Brief (P1) → brief.html, nav.html
8. Global (P1) → semua files
⚠️ Checklist selesai: Setiap task di atas harus dihapus dari file ini setelah selesai dikerjakan.