Introduction
Ever wish a resume said "hi" the same way you do? ๐ This one does. Pop open iTerm (or whatever shell keeps you grounded), paste ssh ssh.akshaygupta.live, and a neon figlet banner blooms like it's 1994. In a blink you're welcomed with the TL;DR, a friendly prompt, and zero browser chrome in sight. It feels like stepping into a dotfiles stash, only this one tells my career story.
How it works
Under the hood it's just thoughtful TypeScript, and a little flair. Here's the tour ๐งญ
-
terminal/server.tsspins up anssh2.Server, accepts every session and hands it off to a freshResumeShellso nobody fights for history or width. - The shell clears the screen, renders the marquee welcome (
renderWelcomemixesfiglet,gradient-stringandboxen), and reacts towindow-changeevents so everything stays readable from 80 columns to ultrawide setups. - Input flows through the
commandermap, so verbs likesummary,skills,experience,education,links,resume,clear, andhelpare just plain object keys. Want a new section? Add another entry, done. - Formatting magic lives in
terminal/renderer.ts, wherewrap-ansikeeps paragraphs tidy,boxenframes each section, andchalkpaints theakshay@terminal $prompt with that unmistakable gradient. - All copy comes straight from
terminal/resumeData.ts, the same data poweringpublic/assets/akshay-cv.pdf, which means the PDF, website, and shell stay perfectly in sync.
Check the source code at https://github.com/gupta-akshay/portfolio-v2.
How it is deployed
Setting it up locally is a five-minute coffee break โ๏ธ: run ssh-keygen -t ed25519 -f ~/.ssh/akshay_terminal_host -N "", point TERMINAL_SSH_HOST_KEY at that file, and start pnpm terminal:ssh. It defaults to 0.0.0.0:2222, but you can tweak TERMINAL_SSH_HOST and TERMINAL_SSH_PORT if your network has Opinions.
Production takes the same pragmatic path outlined in the README:
-
fly launch --no-deployto generate the Fly.io scaffolding fromfly.toml. -
fly volumes create keys_volume --size 1so the Ed25519 host key survives restarts. -
fly secrets set TERMINAL_SSH_HOST_KEY=/app/keys/terminal_host_ed25519to wire up that volume. -
fly deployto ship the container that just runspnpm terminal:ssh. - Allocate an IPv4 address, add an A record for
ssh.akshaygupta.live, and keep Cloudflare in gray-cloud mode so raw SSH hits the box.
Not a Fly.io fan? Any tiny VM, Railway container, or Raspberry Pi that can run Node 18+ will do, just mount the host key somewhere durable and pass the same env vars.
Conclusion
ssh ssh.akshaygupta.live is a little nostalgia and a lot of signal โจ. It stays in lockstep with the canonical PDF, feels snappy even on spotty Wi-Fi, and is genuinely fun to demo in interviews or hallway chats. Swap in your GIF captures, keep resumeData.ts updated, and youโve got a living resume that greets people the same way you would, prompt first, attitude included.

Top comments (0)