We built a unified headless CMS platform with 12 brand-specific frontends over 10 weeks. (1) Sanity CMS: single Sanity project with shared content models and venue-specific content. Content models: venue (name, address, phone, email, opening hours, social links, booking URL — structured data used across all pages for the venue), menu (structured menu data — sections, items, prices, dietary tags, descriptions. Not HTML tables — structured data that could be rendered beautifully on the website, formatted for print, and syndicated to Google Business Profile), team (chef and key staff profiles — photo, bio, role — used on the venue page and potentially in press materials), events (private dining, functions, special events — with date, description, capacity, and booking enquiry form), and shared content (group story, careers, gift cards, loyalty programme — content managed once, displayed on all 12 sites).
Sanity Studio: customised with venue-specific workspaces — each venue's marketing manager logging into their workspace and seeing only their venue's content, while the group marketing coordinator seeing all venues. (2) 12 Next.js frontends: each venue with its own Next.js application, its own domain, and its own brand-specific design. Shared design system: common components (navigation, footer, booking button, menu display, contact form) with brand-specific theming — same component structure, different colours, typography, and imagery. The design system: 45 components covering all page types across the 12 venues. Each venue's frontend built in 2-3 days (leveraging the shared component library) rather than 4-6 weeks (building from scratch). Brand differentiation: each venue with its own colour palette, typography, hero photography style, and page layout variations — expressing the venue's identity while maintaining structural consistency. The fine dining venue: elegant, restrained, with editorial photography. The casual burger bar: bold, energetic, with vibrant colours.
Both: built from the same component library with different configuration. (3) Menu management: structured menu data in Sanity. Menu structure: each menu divided into sections (entrees, mains, desserts, drinks), each section containing items with name, description, price, dietary flags (V, VG, GF, DF — vegetarian, vegan, gluten-free, dairy-free), and optional highlight flag (for signature dishes). Menu editing: the venue manager updating menu items directly in Sanity Studio — changing a price, adding a new dish, or marking a dish as unavailable. Changes: live on the website within 2 minutes (webhook-triggered ISR rebuild). Seasonal menu change: from 1-2 hours per venue (editing HTML in WordPress) to 15-20 minutes per venue (updating structured data in Sanity). Weekly specials: a dedicated "specials" content type — the venue manager adding the weekly special in 5 minutes, with it automatically appearing on the venue's homepage and menu page.
(4) Google Business Profile sync: menu data from Sanity automatically synced to each venue's Google Business Profile — ensuring that the menu shown in Google Search and Google Maps matched the current website menu. Updated via Google Business Profile API whenever menu content changed in Sanity. Previously: menus on Google were 3-6 months out of date (nobody remembered to update them separately from the website). (5) Booking integration: each venue used different booking platforms (Resy for fine dining, OpenTable for mid-range, a simple form for casual venues). The headless architecture: integrating each venue's booking platform via the platform's embed or API — the booking button on each venue site linked to the appropriate platform, styled consistently with the venue's brand. Booking widget: embedded in the venue page, styled with the venue's brand colours — appearing as a native part of the website rather than a jarring third-party embed.
(6) Performance: every site deployed on Vercel with static generation — pages pre-rendered and served from Vercel's edge network. Performance targets: LCP under 1.5 seconds, CLS under 0.05, FID under 50ms. Image optimisation: all venue photography processed through Sanity's image pipeline and Next.js Image component — responsive sizes, WebP format, lazy loading. Hero images: priority-loaded for above-the-fold performance.