commit&push

~/blog $ git show 2026-08-15

I Gave My Blog a Terminal. The Migration Wasn't the Point.

· 6 min read · Victor Benavides

--meta--craft

Scroll to the bottom of this page. See the $_ next to the RSS link? Tap it.

(If you're on a desktop and your layout has a backtick key where you can actually reach it, that works too. Mine sits above Tab; yours may be somewhere else entirely, which is a lesson I'll come back to.)

It's been there since Thursday. Nobody announced it, and a few people found it anyway, which was the entire idea.

Seven days

A week ago this blog was a tab in a website builder that I avoided opening. I moved it in an afternoon — I wrote about that already. What I didn't expect was what happened next, and that turns out to be the part worth writing about.

Since the move, this site has grown:

  • a complete Spanish mirror — every post, both languages, one switcher
  • auto-publishing: merging a pull request deploys the site and posts to LinkedIn, with copy written for LinkedIn rather than a title dumped into a box
  • generated social cards for every post, in the site's own look, in both languages
  • tags and related posts, so the archive behaves like an archive
  • a portrait rendered two ways, one of which is made of text characters
  • and a working terminal

None of that was on a roadmap. Each one was an idea that took an evening, and every single one was flatly impossible where this blog used to live. That's the whole argument of this post: the migration was never the achievement. The migration was the thing that made the next seven days possible.

What the terminal does

It's a real prompt. Not a graphic of a prompt — it takes commands and answers them.

help lists what it knows. ls blog shows the posts as files. cat about.md prints the short version of me. git log prints the actual archive, newest first, with commit-looking hashes I generate from the slugs because it made me happy. tags lists what the blog writes about; tag incidents shows what's filed under it. lang es switches the whole site to Spanish.

cat victor.jpg prints my face. In characters. It renders better than it has any right to.

And there's sudo, which I would strongly advise against typing. Not because anything bad happens — because something appears to.

Why a terminal, and not something prettier

The obvious move for a dev blog in 2026 is a tasteful AI-generated illustration at the top of each post. Soft gradients, an abstract network of glowing nodes, vaguely suggesting "microservices." Every feed is full of them, and they carry exactly zero information.

I wanted the opposite: a thing that means nothing to most visitors and quite a lot to a few.

If you've ever typed ls into a text box that obviously wasn't a shell, just in case — this is for you. If you read "don't type sudo" as an instruction rather than a warning, definitely for you. The terminal is a small handshake with the people who share the specific, slightly ridiculous affection for this craft that makes someone try git log on a personal website at eleven at night.

There's a line from an old Apple ad about "the round pegs in the square holes." That's the audience. Not a market segment — a temperament.

The honest engineering

It's about three hundred lines of client-side code and no backend, because there is no backend. This site is static files on a CDN. Which is what makes the sudo joke land: it says the site can't do anything to you, and that happens to be literally true. It can't even set a cookie — the analytics are cookieless specifically so that stays true.

The unglamorous parts, since they're the parts nobody writes about: the typing animation on the home page respects prefers-reduced-motion and simply doesn't run if you've asked your system for less movement. The server-rendered HTML contains the full text, so search engines and anyone without JavaScript get everything — the animation is a re-type layered on top, not the source of truth. Screen readers get the finished name, never the keystrokes.

None of that is visible. All of it is the difference between a toy and a thing you can ship.

The receipts, including the bad ones

A week of building fast produced a week of mistakes, and leaving them out would make this a brochure.

The pipeline posted twice. My auto-share to LinkedIn duplicated a post, and I deleted one by hand. The cause was mine: a file-move made every existing post look brand new to the detection logic. The fix was two independent guards, verified by replaying the exact commit range that broke it.

A safety check nearly broke the thing it was protecting. I added a build gate requiring every post to have a social card. That gate would have failed the automated Tuesday publish — silently, at 8:47 in the morning, with nobody watching — because the post predated the rule. I caught it two days early, by accident, while answering an unrelated question.

This blog served "page not found" with HTTP 200 for four days. Every missing URL returned a success code, on a site whose Tuesday post is literally about a system reporting success while doing nothing. I fixed it the same week I published that piece, which is either poetic or embarrassing, and I've decided it's both.

And the build was perfectly happy with invalid HTML. When I added tags, I nested clickable tags inside the clickable card that contained them — a link inside a link. Every check passed. The browser was the only thing that complained.

And I assumed everyone's keyboard looks like mine. The first draft of this post opened by telling you to press the backtick key, "the one above Tab." That's true on my keyboard. It's false on most Spanish layouts, and meaningless on a phone — which, according to my own analytics, is where most of you are reading this. I found out because someone tried to follow the instruction and couldn't. A keyboard shortcut isn't a feature if your reader can't type it.

Five mistakes in seven days. Every one of them found by looking — or by someone telling me — rather than by trusting a green check.

What it actually bought

Here's the thing I underestimated when I moved: owning the stack didn't just remove friction, it changed the size of the ideas that felt worth having.

On a website builder, "what if the blog had a terminal" isn't an idea. It's a daydream you dismiss in the same breath, because there's nowhere to put it. On something you own, it's an evening. The distance between wouldn't it be funny if and it's live collapsed to about four hours, and that changes what you let yourself think about.

That's the growth. Not the move — the move was a single afternoon with a lot of verification. The growth is a week later, when the thing you own has become a place where small strange ideas can actually land.

So: tap the $_ at the bottom of the page. Type help. Ignore my advice about sudo.

And if the joke lands for you — you're one of the round pegs. Welcome. ✨

$ grep -rl --tag ~/blog