active
SSH Portfolio
A terminal-based portfolio accessible via SSH — built with Go, Bubble Tea, and Wish, deployed to Fly.io
gobubble-teasshterminalfly-io
SSH Portfolio
A terminal UI portfolio that runs over SSH. Type ssh carl-fung.fly.dev to try it.

Features
- 6 pages — About (typing animation + ASCII art), Projects, Blog, Skills, Experience, Links
- Keyboard navigation — arrow keys, vim keys (h/l), tab, number keys 1-6
- Dual mode — local TUI (
./ssh-portfolio) or SSH server (./ssh-portfolio --serve) - ASCII art portrait — generated from a real photo using custom Go code
Tech Stack
- Go with Bubble Tea v1 (TUI framework) + Wish v1 (SSH server)
- Lip Gloss for terminal styling
- embed.FS for content bundling
- Fly.io for hosting (dedicated IPv4, persistent volume for SSH host keys)
Key Lessons
glamour WithAutoStyle()corrupts terminal input over SSH — useWithStylePath("dark")instead- Bubble Tea v2 uses
charm.landvanity imports — Wish v1 requires Bubble Tea v1 - Fly.io persistent volumes keep SSH host keys stable across deploys