06 / 06
Portfolio
This site, and the same content as a terminal app you open over SSH.
- Role
- Design and development
- Context
- Personal
- Period
- 2024 - now
- Status
- Live
- Astro
- TypeScript
- React
- OpenTUI
- ssh2
- Docker
- nginx
01 Overview
Two front ends share one content package in a pnpm monorepo. The website is a static Astro build served from Cloudflare's edge. The terminal version opens when you run ssh franklin.tenepo.com: no account, no password, any machine with an SSH client.
Because both read the same content, a change to a project shows up on the site and in the terminal with the next deploy.
02 The terminal side
- An ssh2 server accepts the connection and opens a pseudo-terminal per session with node-pty.
- The PTY runs a React app rendered by OpenTUI, which adapts its layout to the size of your terminal.
- Connections and sessions are limited per IP and time out when idle. The host key lives on a volume so it survives redeploys.
03 Deployment
The website is a static build deployed to Cloudflare Workers, so it is served from Cloudflare's edge with high availability. The SSH app runs as a Compose service on Dokploy and only redeploys when its own code or the shared content changes.
04 Engineering challenges
- An unconventional design with its own animations, which has to stay smooth, readable and accessible: every animation respects reduced-motion preferences.
- Keeping the SSH version secure while it is open to anyone: no account and no password, only the passwordless login is accepted, and connections, sessions and idle time are limited globally and per IP.
- Keeping the SSH version available: the service restarts on its own, a health check watches it, and the host key survives redeploys so visitors never see a scary key warning.
Next project
Pruftnet