All bands
Developer Experience (DX)
Tools, workflows, and practices that make building web applications faster, safer, and more enjoyable.
28 STATIONS ON THIS BAND
Medium wave · 540–1600 kHz28 stations stn
Your Heading Anchors Are a Public API
Heading IDs are generated from prose. Rewording an H2 silently retires a URL, and the fragment never reaches your server, so nothing warns you.Web Architecture · Static Architecture · Developer Experience (DX)
Your Publish Date Is a Timezone Bug
A date-only string parses as UTC midnight. Your CI box runs in UTC. Your reader does not. Here is where static sites quietly lose a day.Static Architecture · Astro · Developer Experience (DX)
Your Drafts Ship With Every Build
A draft flag hides a post from your index. It does not stop the build writing the page to disk — and anything in dist/ is a public URL.Static Architecture · Web Architecture · Developer Experience (DX)
A 404 Is a Status Code, Not a Page
Your not-found page looks great and returns 200. Crawlers, caches, and link checkers read the status line, not the artwork — and they all believe it.Static Architecture · Web Architecture · DevOps · Developer Experience (DX)
Every Env Var in a Static Build Is Public
The prefix convention is a linting rule, not a security boundary. A static build has no runtime to keep a secret in — only files anyone can download.Static Architecture · DevOps · Web Architecture · Developer Experience (DX)
Your Build Time Is a Performance Budget
Runtime performance gets budgets and CI gates. Build time gets nothing — until it takes eleven minutes and nobody can say which commit did it.Developer Experience (DX) · DevOps · Static Architecture
Invalid Content Should Fail the Build
Frontmatter is an untyped API surface. Put a schema in front of it and a green build starts to mean something: this content is publishable.Astro · TypeScript · Developer Experience (DX) · Static Architecture
Build It Twice: The Reproducibility Test Your Static Site Will Fail
Run your build twice on the same commit and diff the output. Whatever differs is costing you cache hits, deploy confidence, and one very bad afternoon.DevOps · Static Architecture · Developer Experience (DX)
Your Static Site Isn't Accessible by Default
Semantic HTML and a 100 accessibility score are a floor, not a finish line. The failures that matter are the ones automation cannot see.Static Architecture · Developer Experience (DX) · Signal vs Noise
Tailwind Typography Has a Dark-Mode Blind Spot
Bold text in our articles was rendering at roughly 1:1 contrast — invisible — and no one noticed by eye. A Lighthouse accessibility gate caught it. Here's the exact cascade that hid it, and the one rule that fixed it.Tailwind CSS · Static Architecture · Developer Experience (DX)
You Don't Need a Form Library
HTML5 has had client-side validation for over a decade. :user-invalid, setCustomValidity(), and the novalidate pattern cover 95% of what React Hook Form does — and the last CSS gap closed in late 2023.Signal vs Noise · Developer Experience (DX) · Web Performance · Static Architecture
The Self-Hosted SaaS Replacements That Actually Work
Five SaaS tools you can replace with a $6/month VPS and open-source software — analytics, email, monitoring, git hosting, and automation.Signal vs Noise · DevOps · Developer Experience (DX)
Stop Loading Google Fonts
Google Fonts is a tracker that happens to also serve fonts. Self-hosting is faster, more private, and a one-afternoon migration in 2026.Signal vs Noise · Web Performance · Developer Experience (DX)
Why I Deleted Google Analytics
Google Analytics is slow, GDPR-hostile, undercounted by ad blockers, and answering questions you mostly aren't asking. Here's why I removed it from every site I run, and what I use instead.Signal vs Noise · Web Performance · Developer Experience (DX)
Awesome Astro: The Opinionated Tour
The awesome-astro list is the default entry point into the Astro ecosystem. It is also half noise. Here is what to actually install — and what to skip — sorted by what survives a year of production use.Astro · Signal vs Noise · Developer Experience (DX)
The Dependency-Count Audit: Every Package Is a Bet, Not a Free Tool
Most JS projects have never had their dependency list audited line by line. Doing it once — with a real method instead of vibes — usually halves the count and exposes which packages were doing nothing in the first place.Node.js · Developer Experience (DX) · Web Performance · Signal vs Noise
Code Highlighting at Build Time: Shiki vs Prism and the Death of Runtime Tokenizers
Shipping a tokenizer to the browser to color code blocks made sense in 2014. It doesn't now. Build-time highlighting is faster, cheaper, and produces better-looking output — and the tradeoffs are smaller than you think.Developer Experience (DX) · Static Architecture · Web Performance · Web Architecture
MDX vs Plain Markdown for Dev Blogs: When the Complexity Earns Its Keep
MDX ships JSX inside Markdown and promises interactive content without leaving your post file. That's real power — when you need it. Most dev blogs don't. Here's the honest threshold.Developer Experience (DX) · Static Architecture · Signal vs Noise · Web Architecture
Dark Mode Without the Flash
The white-flash-on-load that ruins half the dark-mode implementations on the web is preventable in about twelve lines of code. CSS variables, a render-blocking script, and one localStorage read — that's the whole trick.Static Architecture · Web Performance · Developer Experience (DX) · Signal vs Noise
Static-Site Search With Pagefind: You Don't Need Algolia
Algolia, Elastic, and Lunr earned their place when static sites couldn't search themselves. Pagefind changed that. Here's how to ship real search without a backend or a subscription.Static Architecture · Signal vs Noise · Developer Experience (DX) · Next.js
AI-Assisted Development Is Not About Writing Code Faster
Everyone's measuring AI by lines-per-minute. The real leverage is in architecture, debugging, and the work nobody wants to do.Automation · Developer Experience (DX) · Signal vs Noise
Git Is Your CMS: A Content Workflow That Scales Without a Database
Git already has versioning, branching, review, collaboration, and publishing. Pair it with CI/CD and you have a content workflow more powerful than any admin panel.Developer Experience (DX) · Automation · Static Architecture
You Don't Need a Backend: Building Contact Forms, Comments, and Auth on Static Sites
The 'but my client needs a contact form' objection to static sites is five years out of date. Here's how to add forms, comments, auth, search, payments, and newsletters — with code.Static Architecture · Web Architecture · Developer Experience (DX)
Image Optimization Is a Solved Problem (If Your Site Is Static)
Sharp at build time, next/image in static export, WebP/AVIF variants, blur placeholders, responsive srcset — image optimization used to be a manual chore. Now it's a build step.Next.js · Static Architecture · Developer Experience (DX)
Stop Installing What Node.js Already Gives You
Node.js now ships with fetch, a test runner, env file loading, file watching, and more. Half the packages in your node_modules are solving problems the runtime already solved.Node.js · Developer Experience (DX) · Web Architecture
Tailwind Without the Mess: A Component Styling System That Scales
Tailwind utility classes are powerful until your component has 14 conditional classes and nobody can read the JSX. Here's the system that fixes it.Tailwind CSS · React · TypeScript · Developer Experience (DX)
Building a Type-Safe API Layer in Next.js Without tRPC
tRPC is excellent. It's also overkill for most projects. Here's how to get type-safe API routes in Next.js using route handlers, Zod, and shared types — no extra dependencies required.Next.js · TypeScript · Developer Experience (DX)
React Hero Sections That Actually Convert: 5 Patterns with Code
Most hero sections are built for client presentations, not end users. Here are five React patterns that actually convert — with code you can use today.React · Static Architecture · Developer Experience (DX)

