Terminal Resume - ssh.akshaygupta.live
Introduction
Deprecated (May 2026). The SSH endpoint at
ssh.akshaygupta.livehas been retired and the floating "Terminal Resume" CTA was removed from this site. The Fly.io app and volume backing it have been destroyed. This post is kept as an archive — the source code referenced below no longer ships in this repo.
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_Gupta_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.

