Skip to main content

Command Palette

Search for a command to run...

My Portfolio Has No URL, Just an SSH Command.

What happens when you treat a portfolio like an engineering problem instead of a design problem.

Published
4 min read
My Portfolio Has No URL, Just an SSH Command.
A
Spent years learning how systems fail. Now I build ones that don't

Open your terminal and type this:

ssh arshadakl.in

No browser. No mouse. No loading spinner.

Just your terminal and my portfolio running inside it.


The interesting engineering problem wasn't building the terminal UI. It was making arshadakl.in behave like two completely different things depending on how you connect to it.

Type it in a browser you get a website. Type it in a terminal you get something else entirely.

Same domain. Same server. Zero configuration on the visitor's side.

That's the problem I wanted to solve.


Everyone's Portfolio Looks the Same

Dark background. Animated text that types itself out. A skills section. A projects section. Maybe a contact form that doesn't actually send emails.

They're fine. But forgettable in a very specific way like how you forget a song that sounds exactly like every other song.

I wanted someone to land on my portfolio and think:

"Wait… why is this asking me to SSH into it?"


The Stupid Idea That Wouldn't Leave

What if the portfolio wasn't a website at all?

I thought about SSH not as a server management tool, but as a protocol. What if I built something that speaks SSH, but instead of dropping you into a shell, it shows you a full terminal UI?

I sat with that idea for a while because it felt either brilliant or completely pointless. Possibly both.

I went with it anyway.


The Part That Made It Click

I was worried about the domain. I already had a website at arshadakl.in and didn't want to use a subdomain that felt like cheating.

Turns out it’s actually really simple.

HTTPS lives on port 443. SSH lives on port 22. One server listens on both simultaneously, no conflict. Browser hits 443, gets the website. Terminal hits 22, gets the Go app.

arshadakl.in
 ├── Browser  → port 443 → website
 └── Terminal → port 22  → Go SSH app

When I realized this I felt a little stupid for overthinking it for two days.


What Broke

First time I ran it in Docker:

Error: could not open a new TTY: open /dev/tty: no such device or address

A standalone Bubbletea app tries to open a TTY on the machine it runs on. Inside Docker no TTY. Instant crash.

Fix: wrap everything inside a Wish SSH server. Each visitor gets their own Bubbletea instance inside their own terminal. Server never needs a TTY at all.

The other moment I moved real SSH from port 22 to 2234 to free it up for the app. Restarted the service, closed the terminal, tried to reconnect.

Nothing.

Thirty seconds of genuine panic. Already calculating how painful it would be to rebuild everything.

Then I remembered GCP has a browser SSH button that tunnels through Google's infrastructure and ignores your SSH port entirely.

Connected immediately. Crisis over.


Why Bother

SSH portfolios are not practical. Your recruiter is not opening iTerm2.

But I built it because it's the kind of project that forces you to actually understand things. Ports. Protocols. Why Docker behaves differently from a local process. How a proxy sits between two systems.

You can't vibe-code your way through an SSH server.

That process confusion followed by understanding is what I actually wanted in my portfolio. The terminal UI is just how people see it.


Most portfolios ask you to click a link.

Mine asks you to open a terminal.

ssh arshadakl.in

Type yes on the fingerprint prompt. Press q when you're done.