Skip to main content
Lightbridge Lab
Menu
aiprocesscraft

Artisanal Slop: Notes on Building This Site With Claude

AI-generated code has a deserved reputation for being slop. But put a capable model in the loop with a developer who actually cares, and something more interesting happens.

There’s a term I keep coming back to: artisanal slop.

It’s a joke, mostly. AI-generated code has earned its reputation — confidently wrong, over-abstracted, layered in defensive cruft for problems that don’t exist, padded with comments that explain what the code already says. The discourse calls it slop, and the discourse is often right.

But “artisanal slop” is what I’ve been making with Claude Code, and I mean it as a compliment. Here’s what I mean.

The thread that built this section of the site

Over the course of one conversation, Claude and I:

  • Diagnosed why two adjacent sections on the homepage had a 192px vertical gap (both had py-24 — the paddings stacked) and replaced the whole spacing approach with a single space-y-20 on <main>. Sections no longer pad themselves; the page lays them out.
  • Replaced the placeholder “L” logo with a Lucide Sparkles icon, then iterated on the color treatment — copper-to-teal gradient using existing brand palette colors, with the gradient reversing on hover. Then dialed it back when the hover felt too loud.
  • Hit a hover-flicker bug where the gradient briefly disappeared mid-transition, and traced it to CSS not interpolating background-image cleanly. Fixed it by layering the gradient over a solid base color so the swap was instantaneous instead of a fade through transparent.
  • Found a global a:hover rule whose specificity (0,1,1) was beating Tailwind’s single-class utilities (0,1,0), causing button text to flip to teal on hover even when the button explicitly set text-white. Wrapped the rule in :where() to zero out its specificity.
  • Replaced hand-rolled GitHub and RSS SVGs with Lucide equivalents (and incidentally fixed an RSS icon that was missing the dot in its corner — it really had been malformed, not just small).
  • Extracted the logo to a shared Logo.astro component once it had two call sites, with a size prop, so future logo swaps happen in one file.
  • And, recursively, set up the blog and RSS infrastructure that’s serving you this very post.

Total time: an evening. None of it was hard. Most of it was judgment — deciding when to extract, when to leave alone, when “calm it down” was the right answer over “make it more interesting.”

What “artisanal slop” actually means

It means: yes, the code is largely AI-generated. Yes, there’s a real risk of producing the bad version of that — the over-engineered, comment-laden, confidently-wrong version. The discourse is correct that this is the default outcome when nobody is paying attention.

But the output of a developer-in-the-loop session with a capable agent is something else. It’s:

  • Specific to the actual problem, because someone is checking that the diagnosis is correct before the fix gets applied.
  • Restrained, because someone is saying “no, drop the gradient on hover, that’s enough” instead of letting the model gold-plate every interaction.
  • Honest about its constraints — when I asked Claude how to handle vertical spacing, it didn’t just answer my question, it pointed out that my framing (“solve this gap”) would lead to piecemeal fixes and proposed a rule instead.
  • Quick. Genuinely quick. The whole spacing refactor was four file edits and a one-sentence design rule. The logo extraction took two minutes once the second use case justified it.

The “artisanal” part isn’t a marketing flourish. It’s the part that makes the difference between slop and shipped product. It’s the developer noticing that the model just suggested a mkdir for a directory that already exists, and pushing back. It’s saying “I want to tighten things up but not too much” and trusting the model to interpret that. It’s spotting the hover flicker the moment it shipped and reporting it precisely enough that the fix is one line.

The business case, briefly

If you’re a one-person shop trying to ship polished tools — which is the entire premise of Lightbridge Lab — this collaboration model is a genuine unlock. Not because the AI replaces the work, but because it collapses the cost of the boring parts of the work to near-zero while leaving the interesting parts (taste, judgment, knowing when to stop) entirely with you.

The result is software that looks and feels like a careful person made it, because a careful person did. They just had a very fast, very well-read pair programmer.

It’s slop. It’s artisanal. Both are true. The combination is the whole point.