9.5 KiB
9.5 KiB
Hostkeeper V2 — Progress Tracker
Purpose: Enable seamless continuation of development by any agent/LLM across sessions. How to use: Read this file first. Find the first unchecked
[ ]item. That's where you continue. Last Updated: 2026-07-07 Status: Sprint 0 + 1 selesai, Sprint 2 sedang dikerjakan.
1. Overview
Hostkeeper V2 is a Termius-like cross-platform SSH/SFTP management GUI application.
| Item | Value |
|---|---|
| Goal | Build a free, open-source Termius alternative with full feature parity |
| Desktop | GoFiber backend + HTMX + xterm.js + Alpine.js |
| Mobile | Go mobile library + WebView wrapper (Android/iOS) |
| Backend language | Go 1.26 |
| HTTP framework | GoFiber v2 (fasthttp-based) |
| Frontend | HTMX + Alpine.js + xterm.js (minimal JS, server-rendered HTML) |
| Styling | TailwindCSS v4 + custom CSS (Lumina System) |
| Desktop wrapper | Electron (opsional — bisa lewat browser saja) |
| Mobile wrapper | gomobile + WebView |
| V1 (existing) | CLI/TUI SSH/SFTP manager — 105 tests, all passing. Frozen. |
Keputusan arsitektur: Migrasi dari React/SPA ke HTMX/server-rendered HTML. Lihat ARCHITECTURE_HTMX.md untuk detail.
2. Current Status Summary
| Item | Status |
|---|---|
| Planning documents (HTMX) | DONE |
| Sprint 0 — Setup GoFiber + HTMX | DONE |
| Sprint 1 — Dashboard + Host List | DONE |
| Sprint 2 — Snippets + Keychain | DONE |
| Sprint 3 — Settings + Brief | DONE |
| Sprint 4 — SFTP Dual-Pane | DONE |
| Sprint 5 — Terminal + xterm.js | DONE |
| Sprint 6 — Storage Integration | NOT STARTED |
3. Sprint Checklist (HTMX)
Sprint 0 — Setup GoFiber + HTMX
- Go module init (
app/backend/go.mod) - Install GoFiber v2 + deps
- Minimal Fiber server (
main.go) — port 1947 - Static files serving (
/static/) - HTML template engine (html/template via gofiber/template)
- Download HTMX + Alpine.js (
static/js/) - Setup TailwindCSS v4 —
input.css→output.css - Custom CSS (Lumina) — dot-grid, glassmorphism, keyframes, toggle, modal, x-cloak
- Layout template (
views/layout.html) — sidebar + header + main - Nav template (
views/nav.html) — nav items with active state - Index + routing (
views/index.html+handler/dashboard.go) - Health endpoint (
handler/health.go) - Verify:
curl :1947/api/health→{"app":"hostkeeper-v2","status":"ok"}
Sprint 1 — Dashboard + Host List
- Model Host + HostStore (
internal/model/host.go) — mock data (8 hosts) - Dashboard handler — full page render (
handler/dashboard.go) - Host list partial (
views/host_list.html) — cards + list view - Search HTMX —
hx-get="/hosts?q=..." hx-trigger="keyup delay:200ms" - Filter status —
<select>+hx-get="/hosts?filter=..." - View toggle (grid/list) — Alpine
x-data="{ view: 'grid' }"+x-show - Add host modal (
views/host_modal.html) — Alpine event-driven$dispatch('open-modal') - POST /hosts — create host via HTMX form swap
- DELETE /hosts/:id — hx-delete with confirm
- Background transfers panel — static placeholder in nav
- Verify: Homepage renders with 8 hosts, search+filter works, create+delete CRUD
Sprint 2 — Snippets + Keychain
- Model Snippet + SnippetStore (
internal/model/snippet.go) - Model Key + KeyStore (
internal/model/keychain.go) - Snippets handler (
internal/handler/snippets.go) - Keychain handler (
internal/handler/keychain.go) - Snippets template (
views/snippets.html) — standalone page (no layout inheritance) - Snippet grid partial (
views/snippet_grid.html) — HTMX partial - Keychain template (
views/keychain.html) — standalone page - Key grid partial (
views/key_grid.html) — HTMX partial - Clipboard JS (
static/js/clipboard.js) - Utils JS (
static/js/utils.js) - Note: Removed
layout.html— all pages are now standalone (Go template{{define}}conflict) - Verify: Both pages render, CRUD works, clipboard copies, strength badges display
Sprint 3 — Settings + Brief
- Model Device + Config (
internal/model/device.go,internal/model/config.go) - Settings handler + UpdateConfig (
internal/handler/settings.go) - Brief handler (
internal/handler/brief.go) - Settings template (
views/settings.html) — profile, tabs, toggles, devices, danger zone - Brief template (
views/brief.html) — keyboard shortcuts, about - Toggle switch JS (
static/js/toggles.js) — Alpine toggle data - Danger zone — confirm flow with localStorage.clear()
- Verify: Settings page renders with tabs, toggles work via Alpine, brief page shows shortcuts
Sprint 4 — SFTP Dual-Pane
- Model FileItem + Transfer (
internal/model/file.go,internal/model/transfer.go) - SFTP handler (
internal/handler/sftp.go) — page, pane partial, create folder, delete file - SFTP template (
views/sftp.html) — dual-pane (local/remote), breadcrumb, search, drop-zone, toast, folder modal - SFTP pane partial (
views/sftp_pane.html) — file table with icons by type, hover actions dicthelper fungsitambah di template engine (main.go)- Folder create (Alpine modal + POST) + delete (hx-delete)
- Verify: Dual-pane renders, file list per type icons, CRUD works, drop-zone + toast present
Sprint 5 — Terminal + xterm.js
- Download xterm.js v5.3.0 + xterm.css (
static/xterm/) - Install gofiber/contrib/websocket v1.3.4
- Terminal handler (
internal/handler/terminal.go) — page + WebSocket mock shell (ls, pwd, cd, cat, whoami, etc.) - Terminal template (
views/terminal.html) — dark theme, tab bar with Alpine, xterm containers - Terminal JS (
static/js/terminal.js) — Alpine terminalManager, xterm init, WS connect, tab CRUD - Tab management — add/switch/close tabs, random host assignment
- Verify: Terminal page renders, xterm.js loaded, WS endpoint returns Upgrade Required
Sprint 6 — Data Store Integration
- replace directive go.mod
- Integrate v1/pkg/storage
- Integrate v1/pkg/config
- Integrate v1/pkg/crypto
- Integrate v1/pkg/knownhosts
- Real SSH via v1/pkg/ssh
- Real SFTP via v1/pkg/ssh
- Remove all mock data
4. Known Issues
| # | Issue | Severity | Status |
|---|---|---|---|
| (none) | — | — | — |
5. Last Session Notes
| Date | What was done | Commits |
|---|---|---|
| 2026-06-29 | V2 planning documents created (9 files) | — |
| 2026-07-07 | Sprint 0: GoFiber+HTMX scaffolding, TailwindCSS, layout, nav, health | 43a19b7 |
| 2026-07-07 | Sprint 1: Host model+store, dashboard CRUD, HTMX partials (grid/list, search, filter, modal, delete), transfers panel | d771925, 86620b0 |
| 2026-07-07 | Sprint 2 dimulai: Snippet + Keychain models created | — |
| 2026-07-07 | Sprint 2 selesai: all CRUD, standalone templates, clipboard.js, utils.js, fix template {{define}} conflict | c4b0d7d |
| 2026-07-07 | Sprint 3 selesai: settings page, tabs, toggles, connected devices, danger zone, brief page | c5ac07e |
| 2026-07-07 | Sprint 4 selesai: SFTP dual-pane, breadcrumb, per-type icons, create/delete, toast, drop-zone | 941a67b |
| 2026-07-07 | Sprint 5 selesai: xterm.js terminal, WebSocket mock shell, tab management | (pending) |
6. How to Continue
For a new AI agent:
- Read this file (
docs/PROGRESS.md) — find the first[ ]item - Read
AGENTS.md(root) — understand architecture, paths, rules - Read the relevant spec doc for the current sprint:
- Data models →
docs/DATA_MODELS.md - UI components →
docs/UI_COMPONENTS.md - Build pipeline →
docs/BUILD_SYSTEM.md
- Data models →
- Read
docs/SPRINT_PLAN.md— detailed file-by-file task instructions - Implement in
app/backend/ - Test —
cd app/backend && go build -o /dev/null .then curl endpoints - Update this file — mark
[x]completed tasks, update "Last Session Notes"
For a returning AI agent:
- Read this file — check "Last Session Notes" for context
- Check git log —
git log --oneline -10 - Find the first
[ ]— that's where you continue - Update this file when done
7. Reference Documents Index
| Document | When to read |
|---|---|
docs/PROGRESS.md |
Always (first) — know where to continue |
AGENTS.md (root) |
Architecture, paths, important rules |
docs/ARCHITECTURE_HTMX.md |
System design, component flow |
docs/ARCHITECTURE.md |
Summary + pointer to HTMX doc |
docs/SPRINT_PLAN.md |
Detailed file-by-file task instructions |
docs/API.md |
REST + WebSocket endpoint specs |
docs/DATA_MODELS.md |
Go struct definitions |
docs/UI_COMPONENTS.md |
HTMX partials / Alpine components |
docs/BUILD_SYSTEM.md |
Build pipeline (Go + CSS) |
docs/UI_TERMIUS_REFERENCE.md |
Visual layout reference |
docs/PERFORMANCE.md |
Performance & stability notes |
template/ dir |
Visual reference only (Lumina System) |
8. Git History Reference
| Commit | Description |
|---|---|
43a19b7 |
Sprint 0 — GoFiber + HTMX + TailwindCSS v4 scaffolding |
d771925 |
Sprint 1 — host model, mock store, dashboard CRUD, HTMX partials |
86620b0 |
Sprint 1 final — delete host, Alpine modal events, grid/list toggle, transfers panel |
IMPORTANT: This file MUST be updated after every development session to ensure continuity.