all transcripts transcript · search

Grilling the search feature

How a "simple" search feature got 6 questions deep before I knew what to build.

recorded · Jun 8, 2026 demo · /search

I came in thinking “site search, an afternoon job.” Six questions later I had the actual scope and a much shorter list of things to build. The agent caught two assumptions I hadn’t realised I was making.

The session

Agent: When you say “everything,” do you mean every prompt, every grilling transcript, every PRD — or just the published ones? Drafts too?

Me: Only what’s already on the site. If it’s not linked from somewhere, it’s not in scope.

Agent: What part of each item should be searchable — title only, title plus description, or the full body?

Me: Full body. Half the point is that someone can search for a phrase they remember from a transcript and land on it.

Agent: Synchronous as-you-type, or submit-then-results?

Me: As-you-type. No submit button. Mobile users especially.

Agent: Where does the index live? Client-bundled JSON, a server endpoint, or both? Bundle size matters on conference wifi.

Me: Client-bundled. The corpus is small. Avoid the server round-trip. If the bundle ever gets above 200 KB we move it server-side.

Agent: What happens when there are zero matches? Empty state copy, suggestions, recent items?

Me: Just “No matches.”. No cute fallbacks. If they typed something that doesn’t exist, they typed something that doesn’t exist.

Agent: Is this discoverable from the global nav, or only via the demo page? It changes how much polish it needs.

Me: Demo page only for now. If it gets used, promote to nav later. Don’t pay for nav-level polish on something nobody might use.

What we decided

  • Client-bundled JSON, built at compile time from all three collections.
  • Type-as-you-go, all whitespace-separated terms must match (AND, not OR).
  • Title + description + full body all searchable, case-insensitive.
  • “No matches.” is the entire empty state.
  • No fuzzy matching, no stemming. v2 if needed.
  • Linked from /demos/search only. No global nav entry.
  • Bundle budget: < 200 KB for the search payload. Above that, server-side it.

The grilling took about four minutes. The implementation was a React island plus a single Astro page reading the three content collections. PRD lives at /prd/search. Shipped feature at /search.