Juniper and Rye
A luxury private chef site that had to communicate premium without being loud about it — and rank across six distinct local markets while doing it.
Start a Similar Project →Luxury Private Chef & Catering
The people booking these services aren't browsing — they're vetting.
Private chef and high-end catering is one of those markets where the website has to do a lot of quiet work. The people booking these services aren't browsing — they're vetting. They want to know immediately that this is the real thing, and anything that feels templated or generic kills that impression fast. The challenge is communicating premium without being loud about it.
At a glance.
100
Lighthouse SEO Score
100/100 SEO & Best Practices
6
Local Market Pages
PV, Scottsdale, Phoenix, and more
3
JSON-LD Schemas
Restaurant, Chef, and Recipe
0kb
Animation JS Overhead
Custom Intersection Observer
The design direction
Restraint and warmth instead of stark minimalism.
The visual system was built around restraint and warmth rather than the stark minimalism a lot of luxury brands default to. A deep forest green anchors the navigation and hero sections — it reads as stable and professional without the coldness of black or navy. Content blocks sit on a warm card beige rather than pure white, which softens the overall feel in a way that suits the in-home, personal nature of the service.
Typography pairs Playfair Display for headings with Inter for body copy — the classic serif/sans pairing, but chosen specifically because Playfair has an elegance that doesn't tip into stuffy.
The layout follows a hospitality logic: lead with atmosphere, then move into specifics. Signature dishes, chef background, service range, and location — in an order that feels like a conversation rather than a menu.
The build — performance
No Framer Motion. A trade-off worth making.
The site runs on Next.js 15 with a deliberate decision to skip Framer Motion in favor of a custom Intersection Observer animation system. It's a trade-off worth making when bundle size matters — the scroll-triggered reveals (FadeInSection, StaggeredFadeIn) are hardware-accelerated and add zero JavaScript overhead. Hero images use priority loading to keep LCP tight, which feeds directly into search performance.
The build — local SEO
Six markets. Each with its own page and its own story.
The SEO architecture here was more involved than most. The service area spans six distinct markets, and each has its own local search behavior. We built dedicated landing pages for each geography with neighborhood-specific content rather than just swapping city names.
On top of that, the structured data implementation goes deeper than the standard LocalBusiness schema — JSON-LD covers Restaurant, Chef, and Recipe entities, which enables rich snippet eligibility including cuisine types, price range, and specific dish details in search results. The site hit 100/100 on both SEO and Best Practices in Lighthouse.
The service range itself required some content architecture thought — private jet catering, hotel meal drops, bachelorette events, and allergen-safe cooking are all meaningfully different offerings with different search intent. Each got its own dedicated page and narrative rather than being collapsed into a single services list.
The stack.
Next.js 15
App Router, priority image loading for LCP
TypeScript
Type-safe throughout
Tailwind CSS
Forest green and warm beige design system
Custom Intersection Observer
Hardware-accelerated scroll reveals, zero bundle cost
What it demonstrates
Luxury hospitality sites live or die on whether they feel like the service.
The technical decisions here — animation approach, image loading, structured data depth — are all in service of the same goal as the visual ones. This one also shows how local SEO strategy can be genuinely sophisticated when the geography and service model call for it. Six markets isn't six copies of the same page; it's six different conversations with six different audiences.