← Projects

SSH Portfolio

A portfolio that lives on an SSH port. No browser, no HTML. You connect with ssh and get a React-rendered TUI streamed back over the channel.

2026SoloNodessh2InkReactfiglet
npm start            # SSH server on port 2222
ssh localhost -p 2222

An ASCII portrait, a figlet banner, a one-line bio, and a tab menu: home, creations, skills, reflections, contacts. Arrow keys switch tabs; on Creations, up and down move through the project list and the detail panel updates live. q quits.

How it works

  1. ssh2 accepts a TCP connection and negotiates an SSH session.
  2. When the client requests a PTY and a shell, the server hands the data stream to Ink's render() as both stdin and stdout.
  3. Ink renders React components by writing ANSI escape sequences to that stream. The client's terminal interprets them.
  4. Keystrokes flow back through the stream and reach useInput hooks inside React components.

The SSH stream is not a real PTY, so server.js stubs isTTY, setRawMode, ref and unref, and translates \n to \r\n because there is no kernel ONLCR to do it.

Content is separated from layout: projects, skills, education and contacts are plain data files, so changing what visitors see needs no JSX.