Skip to content

Web App

The public site lives in apps/web/. It is an Astro application with React components, UnoCSS for styles, and Vercel as the deployment target.

TechnologyPurpose
Astro 5Framework, static output
React 19Interactive components (e.g. islands)
UnoCSSUtility-first CSS (presets: wind, icons)
@astrojs/vercelBuild adapter for Vercel
@astrojs/reactReact integration
apps/web/src/
├── assets/ # Static assets (e.g. background.svg)
├── components/ # Astro & React components
│ ├── soon/ # Coming-soon (e.g. Marquee.astro)
│ ├── Container.astro
│ ├── Header.astro, Footer.astro, Nav.astro
│ ├── ProgrammeGrid.astro, UpcomingGuests.astro
│ ├── WeeklyWine.astro, ListeningNotes.astro
│ └── ...
├── layouts/
│ ├── Layout.astro
│ └── ComingSoon.astro
├── pages/
│ ├── index.astro
│ ├── coming-soon.astro
│ └── programme/
│ └── index.astro
└── styles/
├── global.css
└── coming-soon.css

From repo root or apps/web:

Terminal window
pnpm dev # Dev server
pnpm build # Production build
pnpm preview # Preview production build
  • Config: apps/web/astro.config.mjs — Vercel adapter, UnoCSS, React
  • UnoCSS: apps/web/uno.config.ts — Presets (e.g. wind, icons)
  • Fonts: Uses @fontsource-variable/inter, @fontsource-variable/playfair-display, @fontsource/archivo-black (see apps/web/package.json)

Content is managed in Sanity (@repo/sanity). The web app can query Sanity via the project id and dataset defined in @repo/constants (SANITY_PROJECT_ID, SANITY_DATASET). Fetch content with the Sanity client and GROQ in Astro pages or API routes as needed.