LSM Agents
CAVA · Deep dive

The architecture behind it: headless, on purpose.

A Next.js 14 frontend on Vercel over a Shopware 6.7.9 backend — split so each half can do what it does best.

Headless is not a buzzword; it is a decision with consequences. For CAVA I deliberately split the shop into two halves: what the customer sees, and what handles orders, tax and inventory. That split costs more up front — and pays back every day afterwards.

Two halves, cleanly separated

CAVA runs on a headless architecture. The frontend is a Next.js 14 project on Vercel. The backend is Shopware 6.7.9 on German servers. The two talk over an API, but otherwise live apart.

The commerce logic stays entirely in Shopware: the catalogue of around 316 products across wines, spirits, olive oil and delicatessen, the cart, the checkout and the tax calculation. These are things you should not reinvent — Shopware does them correctly and verifiably. The storefront, on the other hand — everything the customer sees and touches — is rebuilt in Next.js.

Why headless for a small merchant

The honest answer has three parts. First, performance: a custom frontend ships only what each page actually needs — no theme ballast, no code for features that page never uses. A product page loads like a product page, not like an entire shop system.

Second, flexibility: the design is not hostage to a theme system. When CAVA needs six languages, a Weinland map and an AI sommelier, I build them — I do not bend a foreign template until it roughly fits.

Third, ownership: the brand is not trapped inside a template someone else controls. What makes CAVA look like CAVA belongs to CAVA. A third-party theme update cannot change the look overnight.

What it costs — and who it is worth it for

Headless is more work up front. Instead of installing a finished theme, you build the storefront. That is real effort, and I say so plainly, because it is not the right choice for every shop.

For CAVA it was the right one. A wine house with 316 products, six languages and the ambition to stand next to larger houses needs a frontend that grows with it rather than holds it back. The extra work at the start is an investment in speed, control and independence — and that pays off every day after.

The pipeline that keeps 316 products clean

A catalogue this size does not stay tidy on its own. Behind CAVA runs a product-enrichment pipeline that works in the background: it fills in and normalises product data, so unit price, alcohol by volume, region and description appear consistently on every page.

Those background jobs run on BullMQ. They process products in a queue rather than making a page wait — the customer never notices work happening in the engine room. New or changed products are enriched and written back, without anyone hand-maintaining 316 records.

The rest of the engine room

Email runs through Resend — order confirmations and notifications over a service built for deliverability. Analytics is Vercel Analytics, cookieless by design: I can see which pages work without following visitors through tracking cookies.

Payment is Vorkasse — bank transfer — per the AGB. The architecture is kept deliberately lean: few building blocks, each with a clear purpose. That is exactly what makes it maintainable — and what makes CAVA fast.

The architecture at a glance

  • Frontend: Next.js 14 on Vercel
  • Backend: Shopware 6.7.9 on German servers
  • Headless: catalogue, cart, checkout and tax stay in Shopware
  • Enrichment: background jobs on BullMQ
  • Catalogue: around 316 products — wines, spirits, olive oil, delicatessen
  • Email: Resend · Analytics: Vercel Analytics (cookieless)
  • Payment: Vorkasse / bank transfer per the AGB
  • All prices exclude 19% VAT.

— Dimitrios

Back to CAVA
The next build

Want the same standard for your shop?

Start at 499 €