Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cuesheet

Rehearsal scheduling that keeps 14 of 15 scene assignments unchanged.

Public showcase evidence

Cuesheet is a deployed web product for small theater troupes. It collects cast conflicts, builds a conflict-free rehearsal plan, and re-solves changes while preserving as much of the published schedule as possible.

Schedule review showing two moved calls and four unchanged calls

The image shows a six-scene synthetic product walkthrough. The 14-of-15 headline is measured separately on the canonical benchmark below.

Background

Stage managers commonly collect conflicts from the cast, cross-reference those conflicts against scene and character requirements, and assemble a rehearsal schedule by hand. One new conflict can force another round of checking and communication.

Finding another valid schedule is only half the problem. A fresh solve may move many rehearsals that were already workable, creating avoidable disruption for the cast. Cuesheet treats stability as an optimization goal: after a change, it finds a valid candidate that moves as few existing calls as possible. The stage manager reviews the difference before publishing it.

Product flow

  1. Set up the production, scenes, characters, castings, cast, and rehearsal blocks.
  2. Invite cast members and collect the times when they cannot rehearse.
  3. Build and publish the first conflict-free schedule.
  4. Detect a changed conflict and create a minimal-disruption candidate.
  5. Review what moved, what stayed unchanged, and who is affected.
  6. Publish the candidate so each cast member sees an updated personal schedule.

Operational trust before optimization

Rehearsal work cannot always wait for perfect input. Cuesheet keeps scheduling available, but turns incomplete availability into an explicit operational decision rather than a hidden solver assumption.

When a response is missing or stale after rehearsal blocks change, the stage manager sees that state before building. They can inspect submitted detail, remind cast, or proceed; if they proceed, missing submissions count as available. This preserves continuity while keeping uncertainty, assumptions, and operator authority visible.

Measured result

The canonical benchmark contains 12 actors, 15 scenes, and 42 possible rehearsal blocks. After one actor loses all Thursday availability, a 500-run repeatability check produced:

Measurement Result
Initial solve p50 / p95 / p99 9.80 / 11.05 / 12.42 ms
Minimal-disruption re-solve p50 / p95 / p99 5.51 / 6.58 / 7.57 ms
Scenes moved by minimal-disruption re-solve 1 in every run
Scenes moved by a fresh solve 8–12; median 10
Minimal / fresh movement ratio, median 10.0%
Optimal initial / minimal / fresh results 500 / 500 / 500

These are local solver-core measurements recorded on 2026-07-16. They exclude HTTP, database, browser, and network time. See Engineering evidence for the method and limits.

Product evidence

The following screens were captured from the real local service stack with synthetic production and account data.

Production setup

The workspace keeps scenes, characters, cast, rehearsal blocks, conflicts, and scheduling in one production context.

Seeded production workspace

Conflict response status

The stage manager can see who has responded, inspect submitted detail, and spot responses that became stale after rehearsal blocks changed. Day mode supports bright rehearsal rooms; this capture uses the terracotta accent while dark mode remains the product default.

Day-mode conflict response status with a terracotta accent

Review before publish

A re-solve creates a candidate rather than silently replacing the published schedule. The review shows moved and unchanged calls before publication.

Schedule change review

Personal cast schedule

Cast members see only their own calls and can create a calendar subscription.

Personal cast schedule

Phone-sized web experience

The responsive web product keeps each side of the rehearsal workflow focused on the next useful action. These screens were captured at a 390 × 844 browser viewport from the same synthetic product flow as the desktop evidence.

Stage manager

Production hub Conflict response status Day call sheet
Readiness and workspace navigation Response progress since publication Time, room, scene, and cast at a glance
Stage-manager production hub in a phone-sized browser Stage-manager conflict response status in a phone-sized browser Stage-manager day call sheet in a phone-sized browser

Cast member

Together, these screens cover the member journey from invitation acceptance to the next call and a personal schedule. The production home keeps the two primary member actions visible without exposing the stage manager's full workspace.

Invitation handoff Production home Personal schedule
Production context, identity match, and the joining decision Next call and primary member actions Published calls, roles, rooms, and times
Cast invitation handoff in a phone-sized browser Cast production home in a phone-sized browser Cast member's personal schedule in a phone-sized browser

Engineering highlights

  • OR-Tools CP-SAT constraints prevent actor and rehearsal-block conflicts.
  • Minimal disruption is a first-class optimization objective, not a comparison applied after solving.
  • Immutable schedule versions support candidate review, diffs, and explicit publish.
  • A public product API owns identity, tenancy, theater data, and authorization; an internal solver service owns schedule versions and assignments.
  • Each service owns an independent PostgreSQL database.
  • Real datetimes are converted to stable solver indices at the API boundary, so the optimization engine remains domain-independent.
  • Production-scoped access controls, signed calendar feeds, deletion workflows, security headers, rate limits, and secret scanning protect the public surface.

Technology stack

Area Technology
Optimization Python, Google OR-Tools CP-SAT
Product API FastAPI, Pydantic, SQLAlchemy, Alembic
Data PostgreSQL, Neon
Web Next.js, React, TypeScript, Tailwind CSS, shadcn/ui
Identity and access Amazon Cognito, RS256/JWKS, scoped RBAC
Verification pytest, Hypothesis, Playwright, coverage gates, Ruff, mypy
Delivery Docker, GitHub Actions, Fly.io, deployment smoke checks
Security and operations Gitleaks, Sentry, Prometheus, uptime monitoring

Current status

The responsive web MVP is deployed and preparing for private-pilot validation. Current evidence covers verified product behavior and engineering results.

The production source is private. This repository contains selected product documentation, measured engineering evidence, and synthetic screenshots. It is not an open-source distribution.

Public delivery evidence

This public repository separates portfolio evidence from the private production source. The showcase workflow validates the evidence package, serves it from a disposable local process, checks the packaged files over HTTP, and uploads a run report with the workflow result.

The workflow never calls production, deploys a billable service, or requires credentials. The CI/CD evidence guide explains the boundary, while the edge-case flow shows how stale availability becomes an explicit operator decision before a candidate is published.

The release receipt is a sanitized record of a private production release. It contains no URL, hostname, credential, token, or private source reference.

Further detail:

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages