New Web, Who Dis
$ git log --oneline mrlm.net
a1b2c3d feat: rebuilt entire website because reasons
f4e5d6c chore: update footer copyright year (again)
... The old website worked. It had a bio, a few links, a dark background because I’m not an animal. It was, by every measurable standard, fine.
And “fine” is where websites go to die.
The Problem with Fine
There’s a specific kind of professional embarrassment that hits when someone asks where they can learn more about you and you send them to a site that looks like every other developer portfolio — hero section with three adjectives, a skills section with circular progress bars at 85%, a contact form that emails nobody. You know the template. You’ve probably closed five of them today.
The old mrlm.net wasn’t quite that bad, but it wasn’t me. It was the carefully-curated LinkedIn version of me, scrubbed of personality and opinions. The kind of site that might get through an automated HR filter. Which isn’t a useful property when you’re not currently trying to get through an automated HR filter.
I spend my days building cloud infrastructure, writing Go, deploying things to Kubernetes, and genuinely enjoying all of it. Work is fun when you find the right kind of work. The website said nothing about that. It was a résumé pretending to be a personality.
So I blew it up. Professionally.
The Stack, With Commentary
SvelteKit 2 with Svelte 5 runes. I write TypeScript professionally and Go for enjoyment. For a personal project where I wanted to move fast and actually finish it, Svelte was the obvious choice. The runes API ($state, $derived, $effect) is genuinely good — feels like writing vanilla JavaScript that happens to be reactive, without the ceremony that makes other frameworks feel like you’re apologizing to the compiler the whole time.
Tailwind CSS 4. The new CSS-first config via @import 'tailwindcss' means no more tailwind.config.js ritual. You define your design tokens in CSS. It sounds minor until you’ve deleted your forty-seventh config file and you start feeling things.
Tokyo Night dark theme. This is the only correct color scheme. I will not be taking questions.
mdsvex with Shiki syntax highlighting. Blog posts are Markdown files. Shiki handles the code blocks with dual-theme support — Tokyo Night dark for the dark theme, a clean light variant for anyone who has made the wrong life choices. The blog post titles render as terminal window headers in the format cat blog/filename.md. Because why not.
JetBrains Mono for monospace, Inter for body. Monospace for anything that wants to feel like a terminal. Inter for everything that needs to be readable after 11 PM.
The Thing I Actually Wanted to Build
The aesthetic isn’t just decoration. The experience page is a git log --oneline --graph timeline. The skills section is a YAML file with syntax highlighting — because if I have to list my skills, at least I can do it in a format I’d actually write them in. The 404 page rotates error messages that are, if I’m honest, the part of this site I’m most proud of:
Expected true to be truthy. Received: this URL. terraform plan: 1 to destroy, 0 to add. The page lost. merge conflict: page deleted on both branches. LGTM. These are the things that tell you more about how someone thinks than any “passionate and driven” headline paragraph ever could.
But the crown jewel is the command palette.
The Command Palette Has an Actual Terminal
Hit ⌘K (or Ctrl+K) on the site and you get a command palette. Standard stuff — search, navigate, toggle theme. But there’s also a terminal emulator inside it. A real one, not a fake typing animation. You can type commands and they respond with personality.
$ whoami
martin — software engineer, co-founder, cloud platform principal,
aviation geek, camera nerd. still pushing to main on fridays.
$ uptime
up 42 years, load average: coffee, code, creativity
$ neofetch
OS: mrlm.net v2.0
Kernel: Svelte 5 runes
Shell: CommandPalette.svelte
Resolution: whatever your monitor is doing
Theme: Tokyo Night (the only correct choice)
Memory: enough to know better, not always enough to do better ls lists navigation targets. cd ~/about navigates to the about page. theme --dark and theme --light do exactly what you’d expect. There’s a help command that lists everything, because documentation matters even when the thing you’re documenting is a joke.
Building the terminal was the most fun I’ve had on a side project in years. Writing the command dispatch loop, handling partial commands, deciding what to do when someone types rm -rf / (spoiler: nothing good happens, but it does respond). The jokes are in the responses and the responses are the feature.
The site has a built-in command that returns your uptime as a human. I’m not explaining it further. Just open
⌘Kand typeuptime.
The Honest Bit About AI Pair Programming
This entire site was built with Claude Code as the primary development partner. Not as a code generator that I pasted from. As an actual pair programming tool — I described what I wanted, we argued about implementation details, it caught things I missed, I caught things it got wrong.
The experience is genuinely different from using an LLM as a search engine with extra steps. When you treat it as a colleague who’s good at writing code but needs context to make good decisions, you ship faster. When you treat it as an oracle that’s always right, you ship bugs. Same as working with a new teammate, basically.
The terminal emulator in the command palette? Mostly AI-assisted. The git log experience page layout? Same. The 404 message rotation? I wrote those myself, because some jokes you can’t outsource.
There’s a weird thing that happens when you’re pair programming with an AI on a personal project — it doesn’t have opinions about your personality. It’ll implement whatever aesthetic you describe, which means you have to actually know what you want before you start. Turns out “I want it to feel like a terminal but be readable and not annoying” is not a complete design spec. Who knew.
What I Learned That I Already Knew
Personal projects are valuable precisely because there’s no client, no deadline, and no ticket in Jira saying “add personality to homepage (story points: 3).” The constraint is your own taste, which is both liberating and the reason personal projects take forever.
The terminal aesthetic isn’t a gimmick. It’s a signal. If you look at this site and think “that’s exactly the kind of engineer I want to work with,” we should probably talk. If you look at it and think “this is deeply unnecessary,” that’s also useful information and we’ve both saved time.
The command palette terminal exists because I thought it would be funny and useful, in that order. That’s roughly how I make most technical decisions. It works more often than it should.
If you want to poke around: ⌘K, type help, see what’s there. The site is at mrlm.net. The source will probably end up on GitHub eventually, once I’ve cleaned up the parts where the comments say things like // TODO: make this less cursed.
It’s not done. Personal websites are never done. But it’s no longer fine, which was the whole point.
$ git status
On branch main
nothing to commit, working tree clean
$ # yeah right