The chat widget on this site is grounded in the same typed data that renders the pages. Here's how it's built, the bug that killed it for days, and what I now check before putting an LLM in front of customers.