Skip to content
All work

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