Files
HostKeeper/docs/PERBAIKANUI.md
T
swanadiva 8357d9d76e fix: UI overhaul — align all HTMX views with Lumina Design System (46 fixes)
- 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
2026-07-07 14:55:42 +07:00

345 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔍 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 (300900) | ✅ OK |
| Font Mono | JetBrains Mono (300700) | ✅ 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.