Productions, rehearsals, performances, calls, timesheets, leave. Written down, posted where the company can read it — drafted in the planning office, published to the building, signed off in the timesheet cycle. Built on Cloudflare Workers and D1 so the system stays up the morning the company opens it.
01 · What it is
runorder is the system the producer, planning office, and stage management open every morning. Productions and seasons up top, rehearsal blocks and call sheets below, timesheets and leave underneath. One place. One source of truth. One pin marking what matters today.
Productions, theatre seasons, rehearsal blocks, performances, externals. Every event sits in a typed slot with an owner, a room, a cost-centre, and a colour the company recognises at a glance.
People, work types, vacation policies, role permissions. Conflict detection runs as you assign — overlapping bookings, leave collisions, unavailable resources surface before publish, not after.
Edit in a draft, review the diff, publish to the company. Notifications batch into a single weekly digest. Call sheets export to PDF. iCal feeds for the people who live in their own calendar app.
Clock in / clock out, hour averaging across periods, leave requests, approval workflow. Hours land in cost-centres so the producer can read the week before payroll runs.
02 · The runorder view
A three-pane working surface: productions on the left, the week in the middle, the selected event detail on the right. Today is the only Plan Blue cell. The week scrolls cleanly between drafts and the published view.
03 · Built for
runorder is opinionated about live theatre. It refuses to dilute its language to fit hospitality rostering or generic project management — no "creative collaboration platform" framing, no kanban-for-the-arts.
"Tuesday at fourteen-hundred.
Room 2. Four crew."
Own the season. Read the week before payroll runs. Sign off the cost-centre report.
Build the draft. Resolve the conflicts. Publish the runorder to the company.
Read today's calls. Open the call sheet from any device. Hand the day off cleanly.
Run the org. Set RBAC. Audit who pinned what, when, and from which device.
04 · Stack
runorder runs at the edge: hosted Cloudflare with distributed resources for source of truth and exports. Self-hostable on the same stack for venues that need their own deployment.
SSR via @cloudflare/vite-plugin. Type-safe routes. Tailwind v4 with CSS variables for theme tokens — light, dark, high-contrast. Inter, Instrument Serif, JetBrains Mono.
Tables across organisations, RBAC, productions, events, calls, timesheets, drafts, audit log. Migrations versioned in the repo. Round-trip migration tests on every PR. Full Better Auth integration.
Queue consumers for notifications (email, SMS, Teams) and call-sheet PDF generation, both with DLQs. R2 for exports and nightly D1 backups. iCal feeds for personal subscribers. Append-only audit log.
[2026-05-06 09:14:32.118] INFO org="trondheim-mainstage" scope="planner" [2026-05-06 09:14:32.402] PIN draft="wk19-rehearsal-block" events=14 people=9 [2026-05-06 09:14:38.000] PUB draft="wk19-rehearsal-block" notifications=9 latency=42ms [2026-05-06 09:14:42.501] WARN conflict=true // Jakob Lie · Wed 14:00–22:00 overlaps a vacation policy [2026-05-06 09:14:43.114] INFO audit="draft.publish"
05 · Roadmap
runorder is shipped in phases against a published plan. Landed phases are in production and feature-complete. The current phase is in flight; queued phases have a scope but no firm date.
The running order, finally written for the building.