Skip to content

Rotunde Music

Rotunde Music is a modern monorepo for a music venue: a public website, Sanity CMS for content, and shared packages. It is built with Turborepo and uses pnpm workspaces.

  • Turborepo — Task runner and caching for the monorepo
  • pnpm — Package manager and workspaces
  • TypeScript — Used across apps and packages

📚 Docs

This site: Astro Starlight with DocSearch and Flexoki theme. Covers Sanity CMS, schema reference, plugins, and development.

🎨 Studio

Sanity Studio for content. Configured by the shared @repo/sanity package. Run from apps/studio.

🌐 Web

Astro site (React, UnoCSS, Vercel). Public site with coming-soon, programme, and core layout. Run from apps/web.

@repo/constants

Shared constants: SITE_NAME, SITE_URL, SANITY_*, STUDIO_BASEPATH, PREVIEW_SESSION_NAME.

@repo/sanity

Sanity config: schema (documents/objects), plugins, and Studio setup. Consumed by apps/studio.

@repo/ui

Shared UI (e.g. counter, header). Used by apps that need these components.

@repo/typescript-config

Shared TypeScript configs for consistent typing.

@repo/eslint-config

Shared ESLint config for lint and style.

  • Node.js (v18+)
  • pnpm — The repo uses packageManager: "pnpm@10.28.0". Use corepack or install that version.

Run all apps in dev mode:

Terminal window
pnpm dev

From repo root:

Terminal window
pnpm build # Build all
pnpm lint # Lint all
pnpm format # Format with Prettier
rotunde-music/
├── apps/
│ ├── docs/ # This Starlight docs site
│ ├── studio/ # Sanity Studio (uses @repo/sanity)
│ └── web/ # Astro public site (React, UnoCSS, Vercel)
├── packages/
│ ├── constants/ # @repo/constants
│ ├── eslint-config/
│ ├── sanity/ # @repo/sanity — schema & plugins
│ ├── typescript-config/
│ └── ui/ # @repo/ui
└── turbo.json
  • Astro — Docs site and public web app
  • Sanity CMS — Headless CMS for venue/events/artists
  • React — Used in Astro (web) and Sanity Studio
  • UnoCSS — Styling in the web app
  • Turborepo — Monorepo tasks and caching