
Who
I build for operators. Sometimes that operator is me. Sometimes it is a pitmaster on Main Street in Bryson City, North Carolina.
Bar-B-Que Wagon needed a site that smelled like hickory, not a beige restaurant theme with a stock smoke PNG, and a catering path that did not die in a "we will call you back" void. Guests needed hours, address, phone, and a board that matched what Pat Monteith actually smokes. Planners needed guest count and event type without playing phone tag first.
I am the builder. The food is theirs. The repo is public under HurleyUS. The stack is mine to keep honest.
What
I shipped a Next.js 16 App Router site. React 19. Bun. Tailwind 4. Biome and oxlint. Phosphor icons. Playfair Display for the smokehouse voice. DM Sans for the rest. Dark tokens: deep-smoke background, amber accents, cream type.
The homepage hero stacks three lines. Slow Smoked. Hand Pulled. Soul Fed. Over the exterior sign photo with a charcoal gradient. Nav is sticky and blurred. Logo mark on warm-white tile. Tagline Smoke · Soul · Flavor. Amber Order Now button that routes to /contact because there is no DoorDash integration pretending to be hospitality.

The menu is a real board in the page: smoked meat plates with two sides and cornbread, sandwiches including The Wagon Burger, sides made from scratch. Featured cards and a gallery pull Yelp food and exterior shots that landed in the repo on February 15. About is Pat's story: twenty-plus years, 610 Main Street, no franchise fiction.
Catering is a real form: name, email, phone, event date, guest-count select, event-type select, optional message. The API validates with Zod, writes a Convex leads row when Convex is configured, and fires Resend to the owner inbox. Contact does the same twin path. Sentry on the edges. PostHog on the pageviews. Restaurant, Menu, and FoodService JSON-LD from one business-info object.

Where
610 Main St. Bryson City, NC 28713. Phone 828-488-9521. Hours Tue–Sat 11–8, Sunday 11–6, closed Monday.
The URL that answers today is barbquewagoncom.vercel.app. That is what GitHub lists as the homepage. Schema and copy still say barbquewagon.com. At pack time that apex has no DNS. Facebook is wired in the footer. Instagram is still a dead pound-sign href. Repo is public: HurleyUS/barbquewagon.com.
The audience for this write-up is builders who care how a local BBQ site actually captures a wedding headcount, and anyone in the Smokies who already knows the wagon on Main.

When
2026-02-13. Create Next App. Same night: full restaurant website. Same night again: throw out the placeholder details for real Bar-B-Que Wagon facts.
2026-02-15. Zod on the contact form. Yelp photos across the homepage: food gallery, menu cards, exterior. Hero background with gradient overlay.
2026-02-21. Lexington was wrong. Bryson City is right. That correction shipped across metadata and catering copy. Then full try/catch and Zod on both forms.
2026-02-22. next.config. Drop unused ThemeProvider. PLAN and CHANGELOG. Wire contact and catering to Resend. JSON-LD for Google rich results.
2026-03-01. TODO.md. It still lists "wire Convex/Resend" as unchecked. The commits disagree.
2026-05-13 through 15. Shipprep. Logo assets. Bun on Vercel. Form refactor and Fallow cleanup. Roadmap. A string of Blacksmith CI gate commits. Observability scaffolding. Deploy URL verification until Blacksmith stopped lying.
2026-08-08. X-Robots-Tag: index, follow in Vercel headers. HEAD settled. Thirty-eight commits from init. That is the clock.

Why
A Main Street BBQ needs the board, the hours, the phone, and a catering form that still works when the dining room is loud.
I wanted the hero to feel like the sign on Main, not a stock smoke photo. I wanted leads in Convex and in the inbox, from Zod-validated routes, not a mailto cosplay. I wanted Schema.org to carry the same brisket and pulled pork the menu page shows. I wanted the city name to be Bryson City everywhere a crawler looks.
Yelp plates went into public/. Resend and JSON-LD shipped. Geography got fixed. May ops gauntlet ran. Robots header locked in August. Operator stack. Local business. Public repo.
The custom domain is still dark. The Vercel alias is live. The Instagram link is still a pound sign. PLAN.md still thinks the forms are unwired.
If you were standing at 610 Main tonight, which plate would you order before the kitchen sells out?
