Señorío de Líbano
A winery, its shop and its CMS: three apps in one monorepo.
The winery already had a site; this is its replacement, built as a proper system rather than a single codebase. The monorepo holds three apps and five shared packages.
Where each kind of data lives
The interesting decision is where each kind of data lives. Editorial and
catalogue content (wines, descriptions, shipping rules) belongs to the winery’s
own team, so it sits in Sanity where they can edit it without a deploy. Orders,
which need transactional integrity, live in Neon Postgres behind Drizzle. Stripe’s
Payment Element handles checkout. Everything visual flows from one @repo/ui
package, shipped as raw .tsx and compiled by each app, so the landing site and
the shop can’t drift apart.
A shape I keep reaching for
It’s the shape I reach for again and again: separate the content plane from the transactional plane, share the presentation layer, and let each app stay small.
