runorder.app · ring 5 · brand & polishSTATUS · all systems

The running order, built for theatre.

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.

PlannerCallsRosteringTimesheetsNotices

01 · What it is

The running order of a season, online.

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.

01

Order the season.

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.

02

Roster the room.

People, work types, vacation policies, role permissions. Conflict detection runs as you assign — overlapping bookings, leave collisions, unavailable resources surface before publish, not after.

03

Publish the week.

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.

04

Approve the timesheet.

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

What the planning office sees first thing Monday.

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.

WEEK 19 · 04 – 10 MAY 2026 · TRONDHEIM MAINSTAGE
DRAFT · wk19-rehearsal-block · 4 unsaved
Week 19 · 04 – 10 May 2026
23 EVENTS · 9 PEOPLE · 1 CONFLICT
Mon0410:00 Hamlet · rehearsal14:00 Production mtg
Tue0510:00 Hamlet · rehearsal15:00 1:1 · Maria
Wed0614:00 Hamlet · tech09:00 Standup19:00 Mainstage · read
Thu0714:00 Hamlet · tech16:30 LX dept
Fri0819:30 Hamlet · dress
Sat0914:00 Hamlet · matinee19:30 Hamlet · 19:30
Sun1018:00 External · gala

03 · Built for

People who own the calendar.

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."

  • Producers PROD

    Own the season. Read the week before payroll runs. Sign off the cost-centre report.

  • Planning leads PLAN

    Build the draft. Resolve the conflicts. Publish the runorder to the company.

  • Stage Managers SM

    Read today's calls. Open the call sheet from any device. Hand the day off cleanly.

  • Technical Directors TD

    Run the org. Set RBAC. Audit who pinned what, when, and from which device.

04 · Stack

The technical detail.

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.

01 · APP

React Router v7 on Cloudflare Workers.

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.

RR v7WorkersTailwind v4
02 · DATA

D1 + Drizzle ORM.

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.

D1DrizzleBetter Auth
03 · OPS

Queues, R2, iCal, audit.

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.

QueuesR2iCalAudit
[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

Where the build is.

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.

PHASE 0FoundationMonorepo, Cloudflare, database, themes and translation.Landed
PHASE 1Auth & orgsBetter Auth + D1, RBAC, role / group / module seeding, permission matrix, audit log, organisation settings.Landed
PHASE 2Productions & plannerProductions, theatre seasons, event types, planner with month / week / year views, conflict detection, drafts → publish flow.Landed
PHASE 3TimesheetsClock-in / out, period-based tracking, hour averaging, vacation policies, approval workflow, audit trail.Landed
PHASE 4Notifications & reportsEmail / SMS / Teams adapters, weekly digest queue, call-sheet PDF export, report definitions, iCal feeds.Landed
PHASE 5Brand & polishVisual identity rollout, landing page, dashboard customisation, search, integrations panel, settings polish.In flight
PHASE 6Multi-tenantGateway + per-tenant hosting, signed handoff, tenant cleanup migration, provisioning.Landed
PHASE 7Mobile & PWAInstallable PWA, mobile-first call-sheet view, offline call-sheet caching, push notifications for tomorrow's call.Landed
PHASE 8Multi-regionOne-command deployment for venues with their own infra. Multi-region D1 read replicas for touring companies.In Flight

Order the week.

The running order, finally written for the building.