Proscenium is the Nottingham New Theatre's public website and its box office: one Nuxt 4
application, deployed to Cloudflare Workers, serving newtheatre.org.uk.
It handles what's-on listings, online booking, walk-ins and collection on the door, and the admin
tools behind them.
| Layer | Choice |
|---|---|
| Framework | Nuxt 4, Vue 3, Nuxt UI 4 |
| Server runtime | Nitro on the cloudflare_module preset: runs as a Cloudflare Worker, not Node |
| Database | SQLite: a local file in development, Cloudflare D1 in production |
| ORM / migrations | Drizzle ORM + Drizzle Kit, via NuxtHub's hub:db layer |
| File storage | Cloudflare R2 (posters, venue images) via NuxtHub's blob layer |
| Auth | nuxt-auth-utils (sealed cookie sessions) + nuxt-authorization (ability checks) |
| Resend | |
| Marketing pages | @nuxt/content v3 (Markdown in content/) |
This project uses Bun: bun.lock is the only lockfile, so install with Bun to get the same
dependency tree as everyone else. Do not use npm, pnpm or yarn; they will generate a second
lockfile and a different tree.
git clone https://github.com/newtheatre/proscenium.git
cd proscenium
bun installCreate a .env in the project root (it is gitignored). Nothing in it is required to boot: an
empty file works, email degrades to a logged warning, and /dev-login?staff=admin seals a local
session. Set this if you want email to actually send:
# Optional; without it email is disabled and logs a warning, the site still runs
NUXT_RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxxxxxxThe NUXT_ prefix is load-bearing: only NUXT_* variables reach runtimeConfig.
nuxt-auth-utils generates NUXT_SESSION_PASSWORD and appends it to .env on first run. The full
list of variables (and the Resend key naming pitfall) is in
docs/01-getting-started.md §4–5.
bun run devThen open http://localhost:3000. The local database starts empty: seed it via
Nuxt DevTools → Tasks → seed (see docs/01-getting-started.md §9).
The docs/ directory is the application's institutional memory: read
docs/README.md first. Highlights:
| Doc | For |
|---|---|
| 01 Getting started | Setup, environment variables, running, seeding |
| 02 Architecture | How the code is laid out and why |
| 03 Domain model | The schema, table by table |
| 04 Auth & permissions | Sessions, roles, the ability system |
| 05 Booking & box office | The booking and door flow, end to end |
| 06 Pricing & ticket types | The override chain and price snapshots |
| 07 API reference | Every endpoint, its auth and side effects |
| 08 Operations | Deploy, rollback, migrations, incident checklists |
| 09 Known issues | Current bugs and sharp edges, by severity |
| Decisions | Architecture decision records (ADRs) |
See CONTRIBUTING.md for local setup, the commit and branch conventions, the database-change workflow, and when to write an ADR. Skim docs/09-known-issues.md before starting: it may already describe what you are about to hit.
An internal project of the Nottingham New Theatre, maintained by the IT Manager. The theatre's committee turns over yearly, so the docs above exist to make handover possible: keep them current.