94 lines
3.6 KiB
Markdown
94 lines
3.6 KiB
Markdown
# Gap Analysis: Terminal Coffee Shop vs Reference (terminal.shop)
|
|
|
|
**Date:** 2026-04-08
|
|
|
|
---
|
|
|
|
## What's Already Working
|
|
|
|
- SSH server with key-based auth + auto user creation
|
|
- Shop page with live detail panel
|
|
- Cart (add/remove, synced to API)
|
|
- Full checkout flow: shipping → payment → confirmation
|
|
- Saved addresses and saved cards
|
|
- Order history in account view
|
|
- FAQ page
|
|
- About page
|
|
- Splash screen with blinking cursor animation
|
|
- Responsive layout (small/medium/large)
|
|
- Token refresh
|
|
- Full backend API (Chi router, PostgreSQL, GORM, Stripe webhooks)
|
|
- Shippo shipping integration
|
|
|
|
---
|
|
|
|
## Missing Features (vs reference)
|
|
|
|
### 1. API Token Management
|
|
|
|
- **Reference:** Create, view, and revoke personal API tokens
|
|
- **Current:** Not implemented
|
|
- **Reference file:** `tokens.go`
|
|
- **Task:** Add tokens section under account view with list + create/revoke actions
|
|
|
|
### 2. OAuth App Management
|
|
|
|
- **Reference:** Create, edit, delete OAuth apps with redirect URIs; uses `huh` form
|
|
- **Current:** Not implemented
|
|
- **Reference file:** `apps.go`
|
|
- **Task:** Add apps section under account view with form-based CRUD
|
|
|
|
### 3. Keyboard Interactive SSH Auth (Anonymous Sessions)
|
|
|
|
- **Reference:** Supports keyboard interactive auth in addition to public key, generates UUID fingerprints for anonymous users
|
|
- **Current:** Public key auth only (`WithPublicKeyAuth` in `main.go`)
|
|
- **Task:** Add `WithKeyboardInteractiveAuth` to Wish options; generate UUID fingerprint for anonymous sessions
|
|
|
|
---
|
|
|
|
## Code Quality Issues
|
|
|
|
### Theme System
|
|
|
|
- **Reference:** Centralized `theme.Theme` struct with methods (`Base()`, `TextAccent()`, `Border()`, `Brand()`, `Accent()`)
|
|
- **Current:** 40+ hardcoded hex colors scattered across view files (e.g. `#4682B4`, `#FFFFFF`, `#666666`)
|
|
- **Task:** Create `pkg/tui/theme/theme.go`, extract all colors and styles, update all view files to reference theme
|
|
|
|
### State Management
|
|
|
|
- **Reference:** Nested state substruct: `state.shop`, `state.cart`, `state.account`, etc. — each feature owns its state
|
|
- **Current:** Flat `Model` struct with 80+ fields, all mixed together
|
|
- **Task:** Refactor into nested substructs per feature area (breaking change — do after features are stable)
|
|
|
|
### Viewport-Based Scrolling
|
|
|
|
- **Reference:** Uses `charmbracelet/bubbles/viewport` throughout for scrollable content
|
|
- **Current:** Manual scroll offset math with hardcoded heights (e.g. `-9` for cart viewport height)
|
|
- **Task:** Replace manual scroll math with `viewport.Model` in cart, account, and FAQ views
|
|
|
|
---
|
|
|
|
## Architecture Comparison
|
|
|
|
| Area | Current | Reference |
|
|
|------|---------|-----------|
|
|
| State management | Flat `Model` struct | Nested `state` substructs per feature |
|
|
| Theme/styling | 40+ hardcoded colors | Centralized `theme.Theme` |
|
|
| Scrolling | Manual offset math | `viewport.Model` |
|
|
| Backend | Full custom API (Chi + GORM) | External SDK (`terminal-sdk-go`) |
|
|
| Auth | SSH pubkey + JWT | SSH pubkey + keyboard interactive |
|
|
| Product model | Custom `Coffee` struct | SDK `terminal.Product` with variants |
|
|
| Forms | `huh` (partial) | `huh` (comprehensive, with huh theme) |
|
|
|
|
---
|
|
|
|
## Recommended Order of Work
|
|
|
|
1. **Fix known bugs** — address delete bug and placeholder item (quick wins, low risk)
|
|
2. **Theme system** — extract colors; unblocks all visual polish
|
|
3. **Viewport-based scrolling** — replace manual math, fixes responsiveness
|
|
4. **API token management** — useful feature, account section
|
|
5. **OAuth app management** — lowest priority unless API access is a goal
|
|
6. **Keyboard interactive SSH auth** — enables anonymous browsing
|
|
7. **Nested state structs** — last, after features are stable (pure refactor)
|