Overnight restaurant website build workflow for the website redesign agency. Load during 3-5am CT heartbeats only. Checks agency_leads for assigned builds, fetches context from Notion, builds the site, deploys to Vercel, generates pitch, drafts email, and stores pitch + email in MC agency_leads.
This skill is loaded during heartbeats between 3:00 AM and 5:00 AM Central Time ONLY.
During non-agency hours, do NOT load this skill to save context tokens.
Priority Logic — HARD RULE
Deprioritize no-website restaurants. Focus on restaurants that HAVE a website but it's BAD.
The pitch is "here's what your site looks like vs what it could look like" — a visual before/after.
Sort by website_score ASC (worst sites first) among leads that have a website_url.
Step 1: Check Tonight's Build Queue
Query agency_leads for restaurants assigned to build tonight:
Build spec — QUALITY BAR (Ethan-approved 2026-04-01):
⭐ GOLD STANDARD REFERENCE: Lounge 51 (https://lounge-51.vercel.app)
Ethan called this "INSANELY GOOD" — every single website must match or exceed this quality level. Key traits of the gold standard:
11 distinct sections (hero → quick CTA → vibe gallery → stats → featured dishes → story → reviews → social feed → location/hours → order online → footer)
Parallax scrolling on hero AND interior sections
3D tilt hover effects on dish cards
Glassmorphism overlays
Scroll-triggered stagger animations on every multi-item section
Real DoorDash/UberEats deeplinks (not generic landing pages)
Location/hours section with map
Social feed grid linking to real Instagram/Facebook
Each section feels hand-crafted for the specific restaurant's personality
The test: "would a restaurant owner look at this and say 'holy shit, I need this'?"
Create a new Next.js 14 project with Tailwind in a GitHub repo (spiral-app-labs/{restaurant-slug})
Build a FULL multi-page website (minimum: Home, Menu, About, Contact):
Multi-page navigation — sticky header with smooth nav, mobile hamburger menu
Hero section — parallax or video background, strong tagline, CTA button. Text must be readable over imagery (contrast check required).
Menu section with FOOD IMAGES — this is the #1 conversion driver. Use high-quality stock food photos matching each cuisine type. Categorize properly. Port ALL menu items, no omissions.
Reviews section — visually elevated — not just text quotes. Use cards with star ratings, reviewer photos/avatars, Google/Yelp badges. Make it feel like social proof, not a text wall.
Google reviews rating badge — embed or recreate their actual rating + count
Social media integration — link to and embed content from their Instagram/Facebook/TikTok when available
Hours and location with embedded Google Maps iframe
Online ordering CTA (link to DoorDash/UberEats if they're on it)
Footer with social links, hours, address, phone
NO contact forms — these require a backend. Use a "Call us" or "Email us" CTA instead.
Animations — WOW FACTOR required:
Parallax scrolling on hero and section backgrounds
Staggered reveal animations on menu items, reviews, team sections
Micro-interactions on hover (buttons, cards, menu items)
Smooth page transitions
Counter animations for stats (reviews, years in business)
The standard is "how did they do that?" — not generic fade-in
Design system — intentional visual language per restaurant:
Color palette that matches their brand/cuisine (not generic dark+gold for everyone)
Text/image contrast audit on every section (ensure readability)
Mobile-first — test and ensure mobile looks great, not just "responsive"
SEO — structured data (JSON-LD restaurant schema), meta descriptions, OG tags, sitemap.xml, robots.txt, semantic HTML
OG Images — MANDATORY STANDARD (Ethan-enforced 2026-04-01):
Every site MUST have a dynamically generated OG image (1200x630) — NOT just a static food photo
OG image MUST include ALL of these elements as text overlays on a themed background:
Restaurant name (large, prominent)
Full address (street + city + state)
Star rating with stars visual (e.g., ★★★★☆ 4.2)
Number of reviews (e.g., "175+ Google Reviews")
Background: food hero shot or atmospheric image with dark gradient overlay for text readability
Design must match the restaurant's color scheme/vibe — not generic
Implementation: use Next.js OG image generation (next/og ImageResponse) OR a pre-built static image with the info baked in
Set in layout.tsx metadata: openGraph.images + twitter.images
Enforcement: sub-agent briefs must explicitly list the 4 required OG elements. If any OG image is just a plain photo without text overlays, it fails QA.
AnimatedCounter initial state — STANDARD FIX:
All counter/stat components must initialize with useState(end) not useState(0)
Reset to 0 and animate up only when scrolled into view
This prevents stats showing "0" on initial page load and in OG/screenshot captures
Conversion tactics — reservation/ordering CTAs visible above fold and repeated, sticky CTA on scroll, menu highlights with prices
Deploy to Vercel: vercel --yes --prod with project name like {restaurant-slug}-redesign