← All Projects
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.

SSH Portfolio
SSH Portfolio

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 — use WithStylePath("dark") instead
  • Bubble Tea v2 uses charm.land vanity imports — Wish v1 requires Bubble Tea v1
  • Fly.io persistent volumes keep SSH host keys stable across deploys