The parts that were genuinely hard — and how they were solved.
A documented security trade-off, not a silent one
Astro's default origin check had to be disabled: Vercel's edge rewrites the Origin header, which was rejecting the legitimate multipart form post. The config carries an inline explanation of why, plus the compensating control — server-side Turnstile verification, and a site with no cookies or sessions to forge against. A workaround that explains itself is a workaround the next engineer can safely evaluate.
Built to be quoted by AI, not just crawled
A structured llms.txt fact file — hours, address, menu, phone — sits alongside a robots.txt that names and admits seventeen-plus AI crawlers individually. When someone asks an assistant where to get gumbo in South Austin, the goal is that the assistant has clean facts to answer with.
A reproducible migration path
A Cheerio-based scraper captured the legacy site into structured JSON, and a Sharp pipeline converted the image library to WebP with per-file size reporting. The menu itself was transcribed by hand from photographs of the physical menu, because OCR on a laminated menu is not accurate enough to publish prices from.