I've shipped a lot of things without talking about them. Internal tools, client projects at GoodDevs, side projects that lived and died quietly. At some point I realized the building part was only half the work. The other half is being able to articulate what you built, why you built it, and what broke along the way.
This blog is where I do that. Not a portfolio. Not a brand play. Just a place to think out loud about code, craft, and the occasional thing that has nothing to do with either.
If you want to master something, teach it. A great way to learn is to explain things to others.
What I'll write about
Mostly web development — the things I'm actually building, the patterns I keep reaching for, and the ones I keep abandoning. I work across the stack so expect frontend, backend, and everything in between.
Beyond code — I run a small agency and there's a lot nobody tells you about that side of things. Scoping projects, managing expectations, deciding what to take on and what to pass. I'll write about that too, honestly.
What this isn't
The stack this blog runs on
Since this is a dev blog it'd be weird not to mention it. Built with Next.js App Router, Tailwind v4, and posts are just TSX files — no markdown parser, no CMS. Each post imports its own components. Keeps things flexible.
export const meta: PostMeta = {
slug: "hello-world",
title: "Hello World — Why I Started Writing",
date: "March 10, 2025",
readingTime: 4,
category: "devlog",
};
export default function HelloWorld() {
return (
<article>
<p>Your content here...</p>
</article>
);
}No build step for posts. No frontmatter to maintain. Just a file with a named export for metadata and a default export for the content. Simple enough that I'll actually keep using it.
Get the next one in your inbox.
No noise. One email when a new piece drops — code, craft, and occasionally something that has nothing to do with either.
Powered by Brevo. No spam. Unsubscribe anytime.