Category

Developer Experience (DX)

Tools, workflows, and practices that make building web applications faster, safer, and more enjoyable.

19 posts in this category.

A towering brass letterpress in a fog-filled dark foundry, one row of heavy bold metal type cast in the same near-black as the ink well behind it so the glyphs all but vanish into shadow, a single raking beam of neon purple and teal light sweeping low across the type bed to expose the hidden letters, copper gauges and pressure dials glinting in the haze, reflective wet stone floor with faint circuit-pattern grouting glowing teal and amber, cinematic shallow depth of field, moody editorial composition, no text, no people
Tailwind CSS Static Architecture Developer Experience (DX)

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.

A self-contained steampunk brass inspection machine in a dimly-lit workshop, scrolls of data feeding through an internal mechanism of gears and calibrated gauges that stamps each scroll with an emerald verification seal, all mechanisms internal with no external wires or cables leading outside the machine, amber furnace glow from within, reflective wet stone floor with faintly glowing circuit-pattern grouting in teal and amber, atmospheric purple fog filling the background, cinematic shallow depth of field, moody editorial composition, no text, no people
Signal vs Noise Developer Experience (DX) Web Performance Static Architecture

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.

A vast underground server vault with rows of glowing brass machines and copper pipe networks routing data through self-contained infrastructure, neon blue and teal streams flowing internally rather than dispersing into a sky of clouds, dark steampunk industrial control room
Signal vs Noise DevOps Developer Experience (DX)

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.

A vast dark steampunk type foundry at night, a single self-contained brass workshop in the foreground glowing with its own amber furnace and rows of movable-type cases being assembled into a clockwork printing press, severed copper data pipelines hanging loose where they used to stretch out toward a distant cathedral-sized brass font factory receding into atmospheric purple fog, the distant factory now dim and unplugged, the local workshop's furnace humming and casting warm reflections across a reflective wet stone floor with circuit-pattern grouting glowing faintly teal and amber, cinematic shallow depth of field, moody editorial composition, no text, no people
Signal vs Noise Web Performance 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.

A vast dark steampunk surveillance chamber at night, towering brass observation racks holding hundreds of glass camera-eye lenses receding into atmospheric purple fog, most of the lenses now dim and dark with only a few still flickering faint teal; in the foreground a single solid copper workbench under a fading amber lamp where a heavy brass lever has been pulled all the way down to the OFF position, severed copper data cables hanging loose and unplugged from a tarnished switchboard, a small pile of inert glass eyes set aside beside the lever, reflective wet stone floor with circuit-pattern grouting glowing only faintly amber, cinematic shallow depth of field, moody editorial composition, no text, no people
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.

A vast dark steampunk archive wall at night, towering with hundreds of identical brass drawers receding into atmospheric purple fog; in the foreground, a single solid copper workbench bathed in a warm amber pool of lamplight with seven or eight glowing brass instruments and glass vials carefully laid out in a precise row, each one humming with neon teal, magenta, or amber light, while a few unopened drawers in the wall behind also glow faintly through their seams; reflective wet stone floor with circuit-pattern grouting glowing faintly blue, cinematic shallow depth of field, moody editorial composition, no text, no people
Astro Signal vs Noise 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.

A vast dark steampunk warehouse filled with rows of towering brass shelving units, each shelf holding hundreds of glowing glass jars connected by tangled copper wiring; in the foreground a single workbench under a hanging amber lamp where a brass-handled magnifying lens hovers over an open ledger, with several jars set aside in a small crate marked for removal, the rest of the warehouse fading into atmospheric fog and neon teal accent lighting along the floor tracks, cinematic shallow depth of field, moody editorial composition, no text, no people
Node.js Developer Experience (DX) Web Performance Signal vs Noise

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.

A vast steampunk type foundry with two opposing chambers — on the left, blocks of code being cast in glowing molten brass at a single calm forge with neon teal flames, finished pages stacked in orderly piles; on the right, a chaotic backroom of frantic clockwork typesetters scrambling to assemble identical pages by hand under harsh amber gaslight, brass gears and copper pipes throughout, atmospheric fog, dark industrial lighting, no text, no people
Developer Experience (DX) Static Architecture Web Performance Web Architecture

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.

A vast steampunk foundry with two adjacent forges — a simple stone hearth on the left producing a bright steady flame and clean glowing manuscript pages, and a towering baroque apparatus on the right with dozens of brass gears, copper pipes, and glowing neon conduits, producing identical pages with ten times the machinery, dark industrial atmosphere, atmospheric fog, neon teal and amber accents, no text, no people
Developer Experience (DX) Static Architecture Signal vs Noise 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.

A vast brass observatory hall plunged in darkness, with a single mechanical lens flipping a glowing teal day-sigil to a deep purple night-sigil mid-rotation, copper pipework channeling the change instantly across rows of identical static windows, no flicker between them, dark steampunk theme engine
Static Architecture Web Performance Developer Experience (DX) Signal vs Noise

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.

A vast brass card-catalog cabinet in a dark steampunk archive, thousands of index drawers glowing with neon copper filaments, mechanical query arms converging on a single illuminated card while violet energy traces ripple along the cabinet seams
Static Architecture Signal vs Noise Developer Experience (DX) Next.js

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.

A towering brass and copper cognition engine pulsing with neon teal and violet thought-streams arcing between heavy mechanical gears, standing in a dark steampunk workshop above a small row of dormant typewriters dusted with cobwebs, cinematic shafts of amber light from above
Automation Developer Experience (DX) Signal vs Noise

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.

A massive clockwork printing press powered by glowing gears and branching pipelines, dark steampunk machinery converting raw materials into published pages
Developer Experience (DX) Automation Static Architecture

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.

A dark steampunk control panel with glowing neon switches and dials, each labeled with a different web service icon, all connected by luminous copper pipes to a single static crystal core
Static Architecture Web Architecture Developer Experience (DX)

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.

A mechanical assembly line of brass gears and neon conveyor belts compressing oversized photographs into razor-thin luminous strips against a dark industrial backdrop
Next.js Static 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.

A glowing toolbox opening to reveal an array of precision instruments, each representing a built-in Node.js capability replacing an external package
Node.js Developer Experience (DX) Web Architecture

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.

An intricate steampunk loom weaving glowing threads of light into a perfectly organized fabric pattern
Tailwind CSS React TypeScript Developer Experience (DX)

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.

A glowing circuit conduit connecting server and client, representing a shared type-safe API layer
Next.js 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.

Five glowing 3D layout tiles floating around a browser window, representing different React hero section patterns
React Static Architecture 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.