📦New post: The Last Mile of Shipping Is the Hardest PartRead now →
← Back to Blog

castmd: Vibe Coding a Chrome Extension for LLMs

How I rebuilt a forgotten Chrome extension into castmd — converts any web page to Markdown, JSON, or Claude XML for feeding LLMs — using vibe coding with Claude Code.

castmd landing page — Cast any page. Feed any model. Chrome extension that converts web pages to Markdown, JSON, or XML for LLMs

Here's a thing that happens when you work with LLMs every day:

You find a doc you want to share with Claude. You copy-paste it. The model hallucinates on your nav bar. You paste again, cleaner. You spend 4 minutes manually stripping noise. You do this five times a day. You stop noticing it's a problem.

I stopped noticing it for a year and a half.

In October 2024 I built a Chrome extension called md·convert over a weekend. It copied pages as Markdown. It kind of worked. I shipped it, used it a few times, forgot about it.

Then in April 2026 I looked at my clipboard history and realized I'd been doing the same annoying manual cleanup every single day. The extension I'd built was sitting right there, not doing its job.

So I sat down with Claude Code and just rebuilt it.

The vibe was: kill the friction

I didn't write a spec. I described what was broken and we started fixing things. Fast feedback loops, ship when it feels right.

The first product decision: the output was garbage. Paste a technical article and you'd get the words but lose everything that gave them meaning — no bold, no code snippets, no links. Just flat text the model had to reinterpret.

When you know exactly who's reading the output and why, the right fix is obvious. This is a tool for feeding models. Every decision should serve that use case.

The feature that changed the positioning: three output modes

Originally there was one output: Markdown. Paste anywhere.

Then I thought about the actual use cases:

  • Feeding Claude → you want Anthropic's <document> XML wrapper, the format their API is designed for
  • Building a pipeline or RAG system → you want structured JSON with title, URL, Markdown, token count
  • Just chatting → plain Markdown is fine

So I added a three-way toggle: MD · JSON · XML.

The XML mode was the real insight. Anthropic has a specific format for multi-document prompting that nobody else outputs. It's zero extra effort — a string wrapper around the Markdown. But the button label changes to "Copy for Claude." One label change that says everything about what the tool is for.

castmd Chrome extension popup showing MD · JSON · XML toggle, token count chips, and Copy all tabs button

Token counting because models have context windows

After every conversion: token estimate + a row of model compatibility chips.

Green = fits. Strikethrough = over limit.

This feature took 20 lines of code. It's the one I get the most "oh that's smart" reactions to. Usually the best product decisions are like that — obvious in hindsight, invisible until someone does it.

The all-tabs button

One button. Every open tab converts and concatenates into one Markdown document.

The use case: you've been researching a topic across 11 tabs. You want to dump the full context into one Claude conversation. Previously: close each tab, copy each page manually, paste one by one. Now: one click, one paste.

I built this because I needed it. I use it every day. That's the whole product brief.

The name problem

md·convert is a terrible product name. I knew this and kept not fixing it.

I ran it through a naming framework — scoring on memorability, LLM-era feel, emotional resonance, domain availability. md·convert scored 48/100. It says what it is, not what it does. A utility name, not a product name.

After ~30 candidates, castmd emerged. The verb sold it: cast. You cast something out. You broadcast. You send. It has action and intent in a way that "convert" never will.

Then the tagline wrote itself:

Cast any page. Feed any model.

Two imperatives. Subject implied. The whole product in seven words. Good names feel inevitable after you find them.

castmd landing page — "Cast any page. Feed any model." with the extension UI preview

What vibe coding actually means

People use it to mean "AI writes the code while I watch." That's not it.

The useful version: you develop strong intuitions about what's broken and what good looks like, and you use AI to close the gap as fast as possible. The AI accelerates execution. The product sense is still yours.

castmd started as a weekend project with no opinion about its output. It became something I actually use by developing a very specific opinion: this is for feeding models, and everything else is noise.

That opinion — not the code — is the product.

castmd is open source and free: castmd.cc4.marketing

GitHub: github.com/blacklogos/castmd

Get more like this

Subscribe to the CC4.Marketing newsletter for updates, guides, and practical AI marketing tips.

Subscribe on Substack