← All notes

Building National Park Shops with Claude in the loop

·
#ai#claude#anthropic#affiliate

For the last few months I've been quietly rebuilding National Park Shops around a single idea: an editor's most boring job — connecting a 1,500-word park guide to the right Amazon products — should be done by software, well.

Here's what shipped, and what I learned.

The shape of the problem

The site has roughly 500 long-form posts and a hand-curated catalog of affiliate products. Historically, products were attached to posts manually. That's fine when you have ten posts; it's a part-time job by the time you have five hundred.

The naive AI version of this — "ask GPT to recommend products for a post" — fails badly, because the model will happily invent ASINs that don't exist, or recommend the wrong tier of product, or add fifteen things to a piece that needs two.

What worked

Three constraints turned out to matter more than the model choice:

  1. Force the model to choose from a list. Pass the entire active catalog into the prompt (deduped, summarized, ~80 items max) and tell it the only valid ASINs are the ones provided. This collapses hallucinations to nearly zero.
  2. Use a tool for structured output. Instead of "respond in JSON," I declare a submit_product_suggestions tool with a strict input schema and force tool_choice. Claude can no longer wander into prose; the response is parseable on every call.
  3. Let it return zero. The prompt explicitly tells the model that 0 suggestions is a valid answer. This is the single biggest quality win: most posts don't have a great product fit, and admitting that is more useful than over-recommending.

What surprised me

Haiku 4.5 was good enough. I expected to need the larger model for nuance, but on a catalog this small, the smaller model is the right tool — faster, cheaper, and the difference in quality on this specific task is in the noise.

The other surprise: tokens are cheap, but eyeball-time on outputs is not. I built an admin queue page first, made the per-post AI call work end-to-end, and only then turned on bulk processing. If I'd flipped them in the other order, I'd have spent days reviewing 500 wrong recommendations.

What's next

The chat assistant on the site uses the same pattern — a small set of well-defined tools (search_posts, search_products), a constrained system prompt, and Haiku for the inference. It's the same idea wearing a different hat: keep the model on a short leash, and the leash is what makes the output useful.