Changelog
Latest updates and features for On Book Pro.
Version 2.11.0 — March 2026
New Features
- Barry AI v2 — Major upgrade to the AI production assistant:
- ADK Agent Backend: Migrated from Genkit to Google Agent Development Kit (
@google/adkv0.5) for structured agent orchestration - Tiered Model Provider: "Lite" tier (managed Gemini) for all users; "Pro" tier with BYOK (Bring Your Own Key) settings for power users
- Semantic Retrieval: Client-side semantic search using MiniLM-L6-v2 embeddings (via
@huggingface/transformers+ ONNX Runtime) for contextual grounding - Streaming Responses: Responses stream in real-time via Firestore document writes
- Session Continuity: Conversations persist across page refreshes with session management
- Guardrails & Token Budget: Context-aware guardrails and token budget management
- "Ask Barry" Contextual Help:
AskBarryChipcomponent provides inline AI assistance at friction points throughout the app
- ADK Agent Backend: Migrated from Genkit to Google Agent Development Kit (
- Mobile Responsiveness & iPad Parity — Comprehensive mobile device support:
- Mobile Sidebar Drawer: Hamburger-triggered sidebar overlay for viewports <768px with backdrop tap-to-dismiss
- Device Gate System:
useDeviceGatehook andDeviceGateBannercomponent for tools requiring minimum viewport widths - Touch Target Compliance: All interactive elements meet 44×44px minimum touch target standards
- iPad Split View: Tested and verified at 507×768 iPad Split View breakpoint
- Playwright E2E Suites: 16 mobile device gate tests, 5 iPad layout tests across multiple viewport configurations
- Mistral OCR Migration — Script ingestion pipeline upgrade:
- Replaced Google Document AI with Mistral OCR (
mistral-ocr-2512) for superior Markdown output and structural fidelity - PubSub Fan-Out Architecture: Project imports use parallel PubSub workers for concurrent block extraction
- OCR Caching: Raw OCR results cached in GCS for reuse and repair flows without re-scanning
- Replaced Google Document AI with Mistral OCR (
- Landing Page — Public marketing site at on-book.app:
- Features showcase, pricing tiers, testimonials, and team information
- Waitlist Signup: Email collection with Cloud Function backend and Firestore persistence
- Admin Panel: Google Sign-In protected waitlist management dashboard
- Terms of Service and Privacy Policy pages
- Fly Cue System — Fly cue tracking for rigging departments with cue management and scene assignments
- Projections Tool — Media projection management for productions with cue sequencing
Improvements
- Tool Permission Hardening — All tools now require
VIEW_ALLat minimum, closing a security gap where Feed, Files, Notes, Settings, Dev, and Scenes were accessible without authentication. New permissions added:CALL_SHOW,EDIT_PROJECTIONS,VIEW_PROMPTBOOK,EDIT_PROMPTBOOK - One-Line-Per-Block Standard — Architectural refactor ensuring each script line maps to exactly one ScriptBlock. Removed
preserveLineBreaksfield, eliminating multi-line block ambiguity in the script rendering contract - Vertex AI Context Caching — Token cost reduction of ~90% for large scripts by caching the full script text once and reusing for all extraction calls
Technical
- Migrated Barry backend from Genkit to
@google/adkv0.5.0 - Vite upgraded from 7.2 to 8.0.1, Zod upgraded to 4.3.6, motion upgraded to 12.34
- 40+ Playwright E2E tests across 6 spec files (
mobile-device-gate,ipad-layout,permissions,interactions,smoke,tab-rendering) - New feature modules:
fly/,notifications/,projections/ - Client-side semantic search using
@huggingface/transformers+ ONNX Runtime for embedding generation - New
DeviceGateBanner.tsx,useDeviceGate.tscomponents for viewport gating - Google Sign-In authentication for admin/waitlist pages
- Director role added to default RBAC roles
Version 2.10.0 — February 2026
New Features
- CSV Export — Download spreadsheet-ready data from any supported tool:
- Click the Download icon in the action toolbar (available on 8 tools)
- Exports contacts, schedules, deadlines, costume pieces, sound cues, and tracking compliance
- Production tab exports two files: deadlines + tracking matrix
- All fields properly escaped and quoted for clean Excel/Google Sheets import
- Department-Filtered Deadline Reports — Narrow print reports to a single department:
- New "Filter by Department" dropdown in the Print Configuration modal
- Summary statistics recalculate for the selected department
- Available when printing the Production Deadlines report
- Mic Pack Assignments — Wireless mic pack tracking for A2s and Stage Managers:
- Assign packs to actors sorted by first scene appearance
- Three-Way Lock State: Normal, Locked (dedicated), Low Priority (preferred swap candidate)
- Auto-Swap Algorithm: Suggests pack sharing at scene boundaries when packs < actors
- Minimum Pack Calculator: Badge showing absolute and lock-aware practical minimum with "Use Minimum" button
- Battery tracking (type + level cycle with auto-timestamp), frequency, and notes per pack
- Scene matrix grid showing pack usage across scenes
- Mic Plot Report: Printable assignment table, scene matrix, and swap summary
- Org-Level Role Templates — Define reusable permission sets at the organization level:
- Create role templates in the Admin Portal → Roles page
- Templates automatically inherit into new projects
- Track customization divergence per-project with "Reset to Template" capability
- Mark templates as default to auto-apply on project creation
- Lighting Tab — Dedicated lighting cue management for Stage Managers and Lighting Designers:
- Cue Builder: Scene-grouped LX cue list with custom numbering, inline editing, and drag-to-reorder
- Follow Spot Setup: Define spots with label, operator name, and position
- Follow Spot Cues: Per-cue pickups with character, action, frame/color, size, and intensity
- LX Cue List Report: Print-ready cue list grouped by act and scene
- Follow Spot Sheet Report: Landscape print report with spot roster summary
- CSV Export: Download lighting cues and follow spot cues as spreadsheet-ready CSV
- Workspace UX Upgrade — Activity-based workspaces with multi-panel layouts:
- Theatrical Naming: Workspaces renamed from role-based to activity-based theatrical metaphors (Rehearsal Room, Wardrobe, Workshop, Sound Booth, Light Lab, Creative Suite, Production Office, Green Room, Backstage)
- Split View Mode: Click the "Split" button in the toolbar to view two tools side-by-side
- 5 Preset Layouts: SM (Prompt Book + Notes), Director (Blocking + Notes), Sound (Sound + Run Sheet), Lighting (Lighting + Prompt Book), Production (Production + Budget)
- Resizable Panels: Drag the divider between panels to customize proportions — sizes persist across sessions
- Panel Focus: Click a panel to focus it — the toolbar title updates to show the active tool
- Desktop-Only: Split view activates on screens ≥1024px; mobile stays single-panel
- Liquid Glass Design System — New visual layer inspired by Apple's design language:
- GlassRegular: Frosted glass material for navigation and toolbars
- GlassClear: High-transparency material for media-rich overlays
- GlassPanel: Panel container with focus/inactive states and materialization animation
- PanelSeparator: Invisible-reveal resize handles with touch-optimized hit targets
- Blocking Tracker Backdrop Upload — Upload images or PDFs as scene backdrops directly from the toolbar:
- "Upload Backdrop" button appears next to the Set dropdown when a scene is selected
- Supports PNG, JPEG, WebP, SVG, and PDF files (renders page 1 at 2x scale)
- Creates a lightweight Set from the upload and auto-links it to the current scene
- Bypasses the Set Builder for simple stage plans and venue diagrams
- Streamlined File Management — Import tools relocated to contextual toolbar positions:
- Import Script (PDF) now appears in the Show Structure toolbar
- Import Props CSV now uses the upload icon in the Props toolbar with a full preview modal (append/replace, scene matching, template download) — matching the Deadline import pattern
- Settings tab now inlines all project lifecycle operations (Cloud sync, Open, Download, New Project)
- Admin Portal Access — Relocated from Header to Settings > Administration section, visible only to super admins. Pending member approvals now shown as a red badge on the Members tab in the Admin Portal sidebar.
- Script Import Repair — When AI script analysis partially fails, fix it without re-uploading:
- Status Chip in the Show Structure toolbar shows real-time import progress (processing → completed/partial/failed)
- Sidebar Badge on the Show Structure icon provides at-a-glance status from any tab (blue pulse = processing, amber = needs attention, green = done)
- Repair Popover lets you select which phases to re-run (Structure, Props, Sound Cues, Blocks) — failed phases are pre-selected
- No PDF re-upload or OCR reprocessing needed — repairs use existing cloud data
- Barry AI Production Assistant — In-app AI chat powered by Genkit + Vertex AI:
- Floating Action Button morphs into chat panel with liquid spring animation
- Ask production questions — Barry queries scripts, cast, schedules, cues, and project files
- Tool Attribution: See which data sources Barry consulted for each answer
- Suggestion Chips: Quick-start prompts for common queries
- Markdown Responses: Formatted answers with headers, lists, tables, and code blocks
- Roster CSV Import — Import people from CSV or spreadsheet into company roster:
- 4-Step Import Wizard: Upload → Preview → Duplicate Review → Confirm
- Drag-and-drop file upload or paste CSV text directly
- Fuzzy Header Matching: Recognizes 20+ column name synonyms (e.g. "First Name", "Given Name", "fname")
- Smart Duplicate Detection: Levenshtein name similarity (≥80%) and exact email matching
- Review potential duplicates with Skip or Import as New options
- "Ask Barry" Contextual Help — Inline AI assistance at friction points:
- Light-up chip appears when you might need help (e.g., CSV import warnings)
- Click to get AI-powered suggestions without opening the full chat panel
- Roster ↔ Personnel Sync — Org roster and project personnel stay in sync:
- Changes to roster contact info auto-propagate to linked project personnel
- Project-level edits to linked personnel queue for admin review in the Dashboard
- Dashboard "Attention Required" widget shows pending roster updates
- Add from Roster — Quick-add project personnel from the org-wide roster:
- New "Add from Roster" button in the Personnel Directory toolbar
- Pre-fills name, email, phone, and category from the org roster record
- Automatically links the personnel record back to the roster person
- Expanded Roster Categories — Six org-level categories: Staff, Volunteer, Board, Student, Guest Artist, Contractor (replacing the project-level Cast/Crew/Production at organization scope)
- Organization Inventory — Track org-owned physical assets across productions:
- Dedicated Inventory Page in the Admin Portal with table view, filters, and search
- Track item type, condition, storage location, availability, and photos
- Usage history shows which productions borrowed each item
- Add items via Prop/Costume modals, Archive Sweep, or manual entry
- Import from Past Production — Bring data from archived shows into new projects:
- Import Wizard with source project selector and category picker (Props, Costumes, Schedule Stats)
- Preview items before importing; select individually or in bulk
- Access from the Projects Page header button
- Archive Sweep — Inventory checklist before archiving a production:
- Automatically scans project props and costumes for inventory-eligible items (Stock, Purchased, Built)
- Already-inventoried items shown with green checkmarks
- Select items to add to org inventory, then archive in one step
- Milestone Recognition Engine — Automatic theatrical milestone detection:
- Diamond markers on Season Timeline for recognized milestones
- Two strategies: First-of-type (opening night, first tech, first run) and title-based (events matching theatrical keywords)
- Compact dots on the Dashboard's Season Snapshot widget
- Hover tooltips show milestone name and date
- Schedule Statistics — Analytics popup for past production schedule patterns:
- KPI cards, event type breakdown, and milestone timeline
- Accessible from the Import Wizard when viewing a source production's schedule data
- Attendance Module MVP — Full attendance tracking for Stage Managers:
- QR Code Sign-In: Generate and display QR codes linking to a public sign-in page for actors
- Fullscreen QR Projection: One-click projector mode displays QR code with event title and instructions
- Cloud-Secured Sign-In: Server-side token validation with automatic late detection (30-minute window)
- SM Attendance Roster: Summary cards (Present, Late, Missing, Excused), urgency-sorted actor list, tappable status badges for manual overrides
- Event Selector: Defaults to today's first event; switch between any scheduled event
- Quick Contact: Call or email actors directly from the attendance roster
- Dashboard Widget: "Today's Attendance" card with present/late/missing counts and progress bar
- Real-Time Sync: All attendance data syncs in real-time via Firestore subcollections
- First-Run Onboarding — Guided experience for new project members:
- Getting Started Wizard (SM): Multi-step wizard for Stage Managers on first project visit — import script + batch invite team
- Welcome Card (Collaborators): One-time greeting card with role badge, show title, and quick-start tips
- Roster-Powered Invites: Typeahead search-and-select from organization roster with manual entry fallback
- Contextual Empty States: All major modules upgraded with actionable CTAs (Import Script, Add Prop, etc.) instead of passive text
- Live Performance & Show Calling — Purpose-built show-calling interface for Stage Managers:
- Cue-Focused Layout: Current cue (large) + next cue preview with GO, SKIP, and BACK controls
- Department-Coded Cards: Cue cards color-coded by department (blue=LX, green=SQ, purple=FS, amber=DECK) with script context
- Show Clock: Real-time wallclock and elapsed show timer with monospace typography
- Quick Notes: Timestamped free-text notes during performance
- Show Controls: Start, intermission, end, and marker buttons for show flow management
- Keyboard Shortcuts: Space/Enter = GO, Arrow Right = Skip, Arrow Left = Back
- Forced Dark Mode: High-contrast amber/green/red visual treatment optimized for calling from a booth
- Auto-Save: Draft performance logs auto-save every 60 seconds during live shows
- Firestore Integration: Complete performance logs with cue timing, notes, and markers
- Demo Project — The Tempest — Pre-loaded showcase production for exploration and demos:
- Click "Load Demo — The Tempest" in the Season page's New Production dialog or empty state
- Creates a real cloud project with 15 personnel, 10 characters, props, costumes, sound cues, lighting cues, schedules, blocking, attendance, prompt book cues, run sheet rows, notes, and more
- Navigate every workspace to see a fully populated production without entering any data
- Great for onboarding, demos, and testing
Improvements
- RolesPage Redesign — Updated Admin Portal Roles page with org template management and project override indicators
- Batch Onboarding — Spreadsheet paste parsing improvements for bulk team member imports
- Scheduler Layout — Sidebar height now locks to the calendar grid; sections use proportional sizing (60/40 for templates/segments) with a fixed-height legend showing all 9 event types; calendar cells stretch to fill available height with no blank gap
- Script Import Status — Replaced persistent completion/failure toasts with Hybrid status system (sidebar badge + toolbar chip);
JobProgressContextsimplified to lightweight "started" toast only - Framer Motion Animations — Unified animation system replacing fragmented CSS keyframes:
- Barry Panel: Liquid morph from FAB to chat panel with spring overshoot, staggered content materialization on entry, instant dismiss
- Modal/Toast: Smooth enter/exit animations via
AnimatePresence - WorkspaceSelector: Scale + fade transitions
- Sidebar: Smooth collapse/expand with staggered accordion reveals
- Respects
prefers-reduced-motionsystem preference
Technical
- Container Query Responsive Grids — Migrated 12 in-panel components from viewport-based breakpoints (
sm:,md:,lg:) to container query breakpoints (@sm:,@md:,@lg:) so grids reflow correctly inside split panels instead of squeezing columns - New
ExportCSVButtoncomponent with per-tab dispatch logic - Six CSV export functions in
csv-utils.ts: contacts, schedule, deadlines, costumes, sound cues, tracking - Two CSV export functions for lighting:
exportLightingCuesCSV,exportFollowSpotCuesCSV - New
role-inheritance.tsAPI:inheritRoleTemplates,resetRoleToTemplate,isRoleCustomized - New
useRoleTemplateshook for org-level template CRUD - Firestore security rules added for project invitations subcollection
- 17 unit tests for CSV export functions
- New
MicPackView.tsxcomponent with three-zone layout (setup/matrix/swaps) - New
mic-swap-utils.tswithgenerateSwapSuggestions,calculateMinimumPacks,buildActorScenePresence - New
LockStatetype ('normal' | 'locked' | 'lowPriority') replacinglocked: booleaninMicAssignment - New
PrintMicPlot.tsxreport integrated intoPrintConfigModal - 23 unit tests for mic swap algorithm
- New
LightingSliceZustand store slice managinglightingCues,followSpotCues,followSpots - New
PrintLxCueList.tsxandPrintFollowSpotSheet.tsxprint report components - New
EDIT_LIGHTINGpermission added to RBAC system - Lighting registered as
'lxcuelist'and'followspot'report types inPrintConfigModal.tsx - New
SplitLayout.tsx— recursive renderer consumingLayoutConfigviareact-resizable-panels(Group/Panel/Separator) - New Liquid Glass components:
GlassRegular,GlassClear,GlassPanel,PanelSeparatorwith CSS module tokens - New
glass.module.csswith GlassKit design tokens and accessibility fallbacks (reduced transparency, reduced motion, increased contrast) - New
PanelConfig,LayoutConfiginterfaces andisPanelConfig()type guard inworkspace-config.ts - Added
splitToggleprop toToolActionBarfor split view toggle button - Desktop-only viewport guard via
window.matchMedia('(min-width: 1024px)')in MainLayout - Panel size persistence to localStorage via
onLayoutChangedcallback - New
pdfjs-distdependency (Apache 2.0) for client-side PDF rendering in backdrop upload - New
ImportButtons.tsxwithImportScriptButtonstandalone component for PDF script import - Admin Portal access moved from
Header.tsxtoSettingsTab.tsx(superadmin-gated) SidebarTabscomponent now supports optionalbadgeprop for notification countsAdminLayoutqueries pending approvals viauseAdminProjectsand passes badge to Members tabSettingsTab.tsxrefactored to inline all file management operations (cloud sync, open/download/new project)BlockingTab.tsxupgraded withhandleUploadBackdropsupporting both images and PDF-to-canvas rendering- New
useScriptJobStatushook subscribing toscript_jobsFirestore changes for real-time status + repair actions - New
ScriptJobStatusChip.tsxtoolbar component with 4 visual states (processing/partial/failed/completed) - New
ScriptRepairPopover.tsxwith phase-selective repair checkboxes and error summaries SidebarToolextended withstatusIndicatorprop for colored status dots (processing/warning/success)subscribeToLatestScriptJob()added toai-api.tsfor full job document subscriptionsScriptJobStatustype expanded withphaseErrorsfield andScriptJobStatusValuetype alias- New
motionpackage (MIT, ~32KB gzip) for declarative enter/exit/layout animations - New
useMotionConfighook centralizing transition presets (overlay,subtle,morph) withuseReducedMotionintegration AnimatePresencewrappers onModal,ToastContext,WorkspaceSelector, sidebar accordions- Sidebar collapse uses
motion.divwithlayoutprop for automatic size animation - Barry FAB uses Framer Motion
layoutIdfor positional morph between FAB and panel states - 6 dead CSS
@keyframesremoved (fadeIn,fadeInZoomIn,fadeOutZoomOut,zoomIn,fadeOut,zoomOut) - New
BarryPanel.tsxwithWelcomeMessage,MessageBubble,ThinkingIndicator,SuggestionChipsub-components - New
useBarryChat.tshook managing send/receive, loading states, error handling - New
barry/store.tsZustand slice for messages, open/close, loading state - New Cloud Functions:
barryChat(Genkit chat orchestrator with tool-call loop) - New
barry-tools.ts:searchFiles(Vertex AI Data Store RAG),getProductionData(Firestore shard query) - New
barry-datastore.ts: Vertex AI Search Data Store integration for file search - New
barry-config.ts,barry-prompts.ts: Model configuration and system prompt engineering - New
parse-roster-csv.tswith fuzzy header matching (20+ synonyms) and Levenshtein name similarity detection (10 unit tests) - New
RosterImportWizard.tsx— 4-step modal with drag-drop upload, inline dedup review, and Ask Barry integration - New
useAskBarryhook andAskBarryChipcomponent for lightweight inline AI contextual help - New
roster-sync-api.tswithlinkRosterToPerson,buildPersonnelFromRosterfor org↔project roster linking - New Cloud Functions:
onPersonnelWritten(upward sync with change detection),onRosterPersonWritten(downward sync to linked projects) - New
RosterPickerModal.tsxfor project-level "Add from Roster" with search and category filtering RosterCategorytype expanded from 3 to 6 values:staff,volunteer,board,student,guest,contractorRosterPersontype extended withlinkedProjects,workHistory,externalSourcefieldsPendingRosterUpdatetype andorganizations/{orgId}/pendingUpdatessubcollection for admin review queueAttentionRequiredcomponent now queries pending roster updates and surfaces them in the dashboardRosterPersonModalwork history tab upgraded with vertical timeline styling and linked projects badges- New
org-types.tswithInventoryItem,InventoryItemInput,ItemSource,ItemCondition,ItemAvailabilitytypes - New
inventory-api.ts— Full CRUD fororganizations/{orgId}/inventorycollection - New
useOrgInventory.tshook with real-time Firestore subscription - New
InventoryPage.tsx— Admin Portal table view with type/condition/availability filters - New
useAddToInventory.ts— Lightweight hook for promoting project items to org inventory from modals - New
ImportFromProductionWizard.tsx— 3-step wizard for importing props/costumes/stats from past productions - New
ArchiveInventoryChecklist.tsx— Intermediate archive step with item-selection checklist - New
ScheduleStatisticsPopup.tsx— Analytics popup with KPIs, event breakdown, milestone timeline - New
milestone-recognition.ts— First-of-type + title-based milestone extraction engine (26 unit tests) - New
MilestoneMarker.tsx— Diamond (full) and dot (compact) timeline markers with strategy-based colors - New
useProjectMilestones.ts— Per-project hook that fetches schedule events and runs milestone recognition AdminProjecttype extended with optionalmilestonesfield- Season Timeline (
SeasonRow.tsx) now renders milestone diamond markers on each project's phase bar - Season Snapshot (
SeasonSnapshot.tsx) now renders compact milestone dots on each row - New
attendance/store.ts— AttendanceSlice withattendanceRecords,setAttendanceRecords,clearAttendanceactions - New
attendance/attendance-api.ts—subscribeToAttendance,ensureAttendanceRecord,writeActorStatusFirestore API - New
useAttendanceSync.ts— real-timeonSnapshotsubscription for attendance subcollection - New Cloud Function:
recordAttendanceSignIn— callable function with server-side token validation and late detection - New
AttendanceWidget.tsx— Dashboard widget with present/late/missing counts and progress bar - Updated
AttendanceView.tsx— Full rewrite with summary cards, event selector, urgency-sorted roster, status badges - Updated
SignInLinkModal.tsx— Added fullscreen QR projection mode viarequestFullscreenAPI - Updated
PublicSignInPage.tsx— Shows Present/Late status from Cloud Function response attendanceRecordsexcluded from LocalStorage persistence (storage version unchanged)- Firestore security rules added for
projects/{id}/attendance/{eventId}subcollection - Legacy
AttendanceState,AttendanceStatus,updateAttendanceremoved fromcast/store.tsandcast/types.ts - New
RosterSearch.tsx— Shared typeahead search-and-select component for org roster with multi-select chips and manual entry fallback - New
GettingStartedWizard.tsx— Multi-step SM onboarding wizard (script import + batch invite) - New
WelcomeCardWidget.tsx— One-time collaborator greeting card with Firestore dismiss persistence EmptyStatecomponent enhanced withactionsarray prop for structured multi-button CTAsProjectMembertype extended withonboardingDismissedper-project flagUserProfiletype extended withwelcomeDismissedglobal flagRosterSearchintegrated intoBatchOnboardingComposerfor consistent invite UX- Contextual empty states upgraded across 7 modules: Show Structure, Cast, Dashboard, Props, Costumes, Notes, Blocking
- New
performance/types.tswithPerformanceCue,FiredCue,ShowMarker,QuickNote,PerformanceState,PerformanceLoginterfaces - New
performance/store.ts—PerformanceSliceZustand slice with init, start, fire, skip, navigate, markers, notes, intermission, end, reset actions - New
performance/utils/derive-cue-sequence.ts— pure function mapping prompt book anchors → ordered performance cues (10 unit tests) - New
performance/components/—PerformanceTab,CueCaller,CueCard,ShowClock,QuickNotes,ShowControls - New
performance/performance.module.css— forced dark theme with department-color tokens and CSS custom properties - New
performance/performance-api.ts—savePerformanceLog,saveDraftLog,getPerformanceLogsFirestore API - New
CALL_SHOWpermission added to RBAC system (Owner + Stage Manager default) - Performance workspace registered as
'performance'inworkspace-config.tswith lazy import inMainLayout.tsx - Firestore security rules added for
projects/{id}/performances/{performanceId}subcollection - 29 unit tests for performance feature (10 derivation + 19 store actions)
- New
src/demo/tempest-demo-data.ts— comprehensive demo dataset with typed constants for all 15+ modules - New
src/demo/load-demo.ts—loadDemoProject()hydrates Zustand store viasetState()with field mapping and deep cloning - New
functions/src/debug/seed-demo-project.ts— Admin SDK script to seed demo project to Firestore (8 shards + 4 subcollections) - 75 unit tests for demo data integrity and loader functionality
Version 2.9.0 — February 2026
New Features
- Email System (Phase 1) — Production email distribution powered by Postmark:
- 7 Manual Email Types: Call Sheet, Rehearsal Report, Line Notes, Deadline Reminder, Meeting Invitation, Project Invite, Custom Announcement
- Template-First Architecture: Shared Postmark Layout (
on-book-master) with production-branded headers and On Book Pro footer - Communications Tab: Quick action cards for composing and sending emails directly from the app
- Composer Components: Dedicated composition interfaces for each email type with recipient picker, rich text editing, and urgency flags
- Email History: Firestore-backed history showing all sent emails with template icons, delivery counts, and partial delivery indicators
- Deadline Ping Integration — PingModal now sends real emails:
- Previously a placeholder toast, now calls the
sendDeadlinePingCloud Function - Sends personalized reminder emails to assigned personnel with deadline details
- Previously a placeholder toast, now calls the
- Email Notification Preferences — New toggle in My Profile:
- Opt out of automated production emails (call sheets, reports, reminders)
- Manual SM-initiated emails always deliver regardless of preference
- Toggle persists on the Personnel record alongside other profile data
- Email System (Phase 2) — 5 automated notifications powered by Firestore triggers and Cloud Scheduler:
- Welcome Email: Automatically greets new team members when they join a production
- Schedule Change Alert: Notifies attendees when rehearsal date, time, or location changes
- Deadline Reminders: Daily 9 AM scan sends reminders for deadlines due within 48 hours (with urgency levels)
- @Mention Notification: Emails users when they're @mentioned in feed posts or comments
- Profile Reminder: Weekly Monday reminder for team members with incomplete profiles
- All automated emails respect opt-out preferences and include deduplication to prevent spam
- Email History shows "Auto" badge for system-sent notifications
- Social Feed Cloud Sync — Feed posts and comments now persist to Firestore:
- Real-time sync across all team members and devices
- Posts, comments, pins, and soft-deletes all saved to cloud
- Graceful local-only fallback when no project is connected
Improvements
- Shared Email Module — Centralized email infrastructure in
functions/src/email/:postmark-client.ts: Lazy Postmark client initialization, layout variable building, RBAC validationtypes.ts: Shared TypeScript interfaces for all email Cloud Functions- Consistent error handling and email history logging across all 7 functions
- Refactored Call Sheet — Migrated from raw
fetchto Postmark SDK with template support - Refactored Meeting Invites — Consolidated from standalone file into the shared email module
- Line Notes Integration —
SendLineNotesModalnow calls the realsendLineNotesCloud Function with per-actor HTML content
Technical
- New module:
functions/src/email/with 7 Cloud Functions and shared utilities - New frontend components:
DeadlinePingComposer,ProjectInviteComposer,AnnouncementComposer - Updated
EmailTabwith 5 action cards (4 composable + 1 info card for feature-page emails) - Expanded
EmailTemplatetype,EmailResult, and request data interfaces - Replaced stubbed
sendBatchwith per-type callable API wrappers and Firestore history reads - Added
emailOptOutfield to Personnel record for notification preferences - All Cloud Functions use
POSTMARK_SERVER_TOKENas a Firebase secret - RBAC validation (
validateEmailSender) integrated into all email functions - New
src/features/feed/feed-api.tswith Firestore CRUD for feed subcollections - New
useFeedSynchook for real-timeonSnapshotlisteners onfeed/andfeedComments/ - Feed data excluded from LocalStorage
partialize(storage version bumped to 8) - Firestore security rules added for
feed/{postId}andfeedComments/{commentId}
Version 2.8.0 — February 2026
New Features
- User-Centric Dashboard — Personalized landing page that adapts to your role and production phase:
- My Calls Widget: Shows only your schedule events for the next 48 hours
- Announcements Widget: Displays pinned posts and @department-tagged posts relevant to you
- Daily Schedule Widget: Full today's schedule for Stage Managers and production staff
- Phase-Aware Layout: Dashboard adapts based on production phase (Pre-Production → Rehearsal → Tech → Performance → Archival)
- Role-Based Visibility: Widgets show/hide based on your workspace (Cast Member, Stage Manager, Director, etc.)
- @Announcement Mentions — New department tag for production-wide posts:
- Renamed from @General to @Announcement for clarity
- Posts tagged @Announcement appear in everyone's Dashboard
- Use for company-wide notices, production updates, and important reminders
Improvements
- Dashboard as Default: Dashboard is now the first tool in all workspaces (your home screen)
- Department-Filtered Announcements: Only see announcements tagged for your department(s)
- Smart Call Filtering: Personalized schedule based on your permissions and group memberships
Technical
- New
src/features/dashboard/module with hooks, widgets, and configuration useProductionPhasehook detects production phase from scheduler milestone eventsuseMyCallshook filters events by user ID and permission-derived groupsuseMemberGroupshook maps permissions to scheduler group tags- Dashboard integrated into MainLayout toolComponents mapping
- Updated workspace-config.ts with 'dashboard' as first tool in all workspaces
Version 2.7.0 — January 2026
New Features
- Video Chat — Embedded video conferencing powered by Daily.co:
- 4 Specialized Layouts: Meeting (screen share focus), One-on-One (equal panels), Table Read (60/40 script split), Rehearsal (minimal video strip)
- Lobby (Hair Check): Device selection, camera preview, and real-time mic level visualization
- Role-Based Access: Stage Managers, Production Managers, and Owners can start meetings; all members can join
- Active Speaker Highlight: Pulsing border indicates who is speaking
- Transcript Capture: Meeting transcripts saved automatically (video not stored for privacy)
- Layout Preview Mode — Development tool for testing video layouts without live calls:
- Mock video tiles with gradient placeholders
- Configurable participant count for testing grid behavior
- Script Subtab — View and edit your imported script:
- Reading Mode: Clean, readable script format with scene navigation
- Block View Mode: Edit script as ScriptBlocks with type classification
- Block types:
dialogue,stage_direction,scene_heading,song,transition - Click any block to edit content, change type, or reassign scene
- Two-Stage AI Pipeline — Improved script import accuracy:
- Stage 1 (Gemini 2.5 Pro): Deep extraction of scenes, characters, and dialogue blocks
- Stage 2 (Gemini 2.0 Flash): Cleanup, linking, and formatting refinement
- Full ScriptBlocks stored for Script subtab display
- On-Demand Extraction — Props and Sound Cues extraction now triggered separately:
- Go to Props → Click "Extract from Script" in toolbar
- Go to Sound → Sound Cues → Click "Extract from Script" in toolbar
- Preview and select which items to import
Technical
- New feature module:
src/features/video/with isolated Zustand store - Cloud Functions:
createDailyRoom,getDailyToken,fetchTranscript - Web Audio API mic visualizer with RMS-based level calculation
- Hardware switching state machine with 200ms release delay
- 25 unit tests for video store and permissions
- Cloud Functions:
analyzeScript(two-stage),extractPropsFromScript,extractSoundCuesFromScript - New
ScriptBlocktype withtype,text,sceneId,actId,characterIdfields - Character state consolidated into
showStructure.characters(moved from root state)
Version 2.6.0 — January 2026
Technical Improvements
- Type Safety Hardening — Eliminated technical debt and improved code quality:
ScheduleEventrefactored to discriminated union with 24 specialized event types- Removed implicit 'any' types across codebase
- Sample data schema aligned with current Personnel type format
- Debranding & Naming Cleanup — Internal refactoring for brand consistency:
- Renamed
RunSheetState→ProjectStatethroughout codebase - Renamed
CastMember→Personnelin frontend state - Updated storage keys:
'run-sheet-storage'→'onbook-storage' - Updated event names:
'run-sheet-toast'→'app-toast' - IndexedDB keys updated:
run-sheet-notes-*→onbook-notes-*
- Renamed
- Cloud Storage Schema Update — Firestore persistence modernized:
- Schema version bumped from 3 → 4
- Cloud storage now uses
personnelfield instead of legacycastfield - Backward compatibility maintained during transition
- Projects automatically migrate to new format on next save
- Import Path Standardization — Improved maintainability:
- Standardized Button/Input/Select/Modal imports to use barrel exports
- Reduced direct file imports across feature modules
Bug Fixes
- Fixed
FocusStateinterface mismatch (castMemberId→castId) - Corrected Personnel type usage in print components
Version 2.5.0 — January 2026
New Features
- Self-Service Costume Sizing — Cast members can complete their measurements via My Profile:
- New Measurements tab in My Profile modal (cast members only)
- Progress ring showing completion percentage (e.g., "12/31 measurements")
- "Approved" status badge when measurements are verified by Costume Department
- Onboarding prompt guides actors to complete sparse profiles
- Manual completion toggle (Costume Department only) with audit trail
- Pronouns Support — Inclusivity improvements across the platform:
- Pronoun field in My Profile (she/her, they/them, he/him, etc.)
- Pronouns display on Personnel Cards next to name
- Intelligent silhouette defaults based on pronouns in Measurement Editor
Improvements
- MeasurementEditor Component — Extracted reusable measurement UI from modal for use in multiple contexts
- Cast-Only Measurements — Tab visibility restricted to cast members (not crew/production)
Technical
- New
MeasurementEditorcomponent withcanMarkCompleteprop for context-aware rendering - Added
pronounsfield to Personnel/CastMember type - Added
isComplete,completedBy,completedAtfields to MeasurementProfile for audit trail - Pronoun-based silhouette inference in measurement initialization
Version 2.4.0 — January 2026
New Features
- Production Management Module — Centralized deadline tracking and analytics:
- Dashboard Analytics with real-time metrics (Total, Pending, Met, Missed, Overdue)
- Completion progress visualization with progress bars
- Department breakdown cards with per-department metrics
- Budget health integration from Costumes and Props modules
- Success rate tracking for on-time deadline completion
- Deadline Management — Create and track production milestones:
- Full CRUD operations (create, edit, delete deadlines)
- Department and personnel assignment
- Status tracking (Pending → Met/Missed)
- Ping functionality for deadline reminders
- Overdue detection with visual warnings
- Production Deadlines Report — Professional print output:
- Summary statistics (5 key metrics)
- Comprehensive deadline table sorted by due date
- Department breakdown with completion percentages
- Color-coded status indicators
- Print button integrated into action toolbar
Improvements
- Print Button Migration — Production print now uses action toolbar instead of subtab
- Budget Health Cards — New reusable component for visualizing budget status
- Consistent Print UX — Production follows same print workflow as other tools
Technical
- New components:
ProductionTab,ProductionDashboard,DeadlineManager,CreateDeadlineModal,PingModal,BudgetHealthCard,PrintDeadlines - New selectors:
getDeadlines(),calculateProductionMetrics() - Extended
ScheduleEventtype with deadline support - Integrated with permission system (VIEW_PRODUCTION, EDIT_PRODUCTION)
Version 2.3.0 — January 2026
New Features
- Personnel Directory Redesign — Modern card-based interface for company roster:
- Visual Grid View with avatar cards, role badges, and quick action buttons
- List View toggle for dense editing and drag-and-drop reordering
- Category filter pills (All, Cast, Production, Crew) with counts
- URL state persistence for shareable filtered views
- Full keyboard accessibility with tab navigation
- Self-Service Onboarding — Simplified personnel addition workflow:
- Quick-add modal with minimal fields (name, email, category)
- Auto-match on sign-in prompts users to claim their profile
- Self-disclosure via My Profile modal (phone, bio, emergency contact, headshot)
- Personnel Cards — Rich, scannable contact information:
- Avatar display with headshot or initials fallback
- Character truncation pattern ("Hamlet +2" for multiple assignments)
- Color-coded category badges (Purple=Cast, Blue=Crew, Green=Production)
- Department head and linked account indicators
- Quick-action email and phone links
Improvements
- Character Display Utility — Smart truncation for actors with multiple character assignments
- Category Badge Colors — Consistent color coding across the Personnel interface
- Unified Directory — Cast, Crew, and Production consolidated in single view
Technical
- New components:
PersonnelDirectory,PersonnelGrid,PersonnelCard,PersonnelInviteModal - New utility:
getCharacterDisplayString()for truncated character name display - URL-based filter/view state with
?view=grid&filter=crewpattern - Reuses existing
ActorsTableandCrewTablefor List View
Version 2.1.0 — January 2026
New Features
- Costumes Module — Comprehensive costume management with:
- 31-point anatomical measurement tracking per actor
- Costume piece inventory with scene/character assignments
- Fitting log with notes and attendee tracking
- Quick change marking with duration, location, and dresser assignments
- Source tracking (stock, purchased, rental, borrowed, built)
- Budget tracking per piece with receipt upload
- Budget Dashboard — Production-wide financial overview:
- Summary cards for estimated vs. actual spending
- Variance tracking with color-coded indicators
- Group-by options (Status, Character, Source)
- Dedicated rental returns section with overdue highlighting
- Role-gated access (Stage Manager, Designer, Owner)
- Maintenance Tracking — Shared maintenance tab for Costumes and Props:
- "Needs Repair" and "Needs Laundry/Cleaning" status flags
- Quick action buttons to clear maintenance flags
- Contextual placement within each feature module
- Print Reports — Costume Bible — Professional costume documentation:
- Cover page with show branding
- Table of Contents
- Measurements section with all actor sizing
- Scene-by-scene costume plot
- Per-character breakdown
- Budget summary with totals
- Optional receipts appendix
- Print Reports — Quick Change Plot — Focused quick change documentation:
- Statistics summary (total changes, avg duration, locations, dressers)
- Detailed quick change table with timing and assignments
- Per-dresser assignment cards
- 30-second urgency highlighting
Improvements
- Header Grid Layout — Refactored header to CSS Grid for better button organization
- Props Sub-Navigation — Props now uses subtab pattern (Props List + Maintenance)
- Green Button Variant — New button color for Budget Dashboard access
- Silhouette Assets — Body outline diagrams for measurement visualization
Technical
- Added
VIEW_BUDGETpermission to RBAC system - Costumes feature uses modular Zustand slice architecture
- Print reports access costume data independently from RunSheetState
- Firestore security rules updated for costumes and budget collections
Version 2.2.0 — January 2026
New Features
- My Profile Modal — Personal profile management accessible via avatar click:
- Edit phone, emergency contact, bio, and allergies/notes
- View character assignments (read-only)
- User preferences including theme toggle and keyboard shortcuts
- Logout button consolidated in profile modal
- Feed Notification Badge — Real-time unread count on Feed sidebar item:
- Numeric count when sidebar is expanded
- Dot indicator when sidebar is collapsed
- Clears automatically when Feed is viewed
- Personnel Linking (Admin) — Manual user-to-personnel record linking:
- Link modal with search and personnel grouping by type
- Email match highlighting for easier identification
- Bidirectional link/unlink with click-to-unlink on linked display
- Useful for linking users when auto-link via email fails
- Share Link Relocated to Admin — Project sharing moved from File modal to Members page:
- "Invite Collaborators" section in Admin Portal's Members page
- Generate unique share link with one click
- Copy link with visual feedback
- Share tokens reset when switching projects
- Budget Management — Production managers can now configure project-wide budgets:
- New "Budget Setup" tab in Budget tool (permission-gated)
- Set total costume and props budget allocations
- Real-time comparison of allocated vs actual spending
- Color-coded budget health indicators (over budget, at risk, on track)
- Project-wide currency configuration
- New
EDIT_BUDGETpermission for Production Managers and Owners
Improvements
- Header Simplification — Removed standalone Logout button (now in My Profile modal)
- Settings Tab — Project settings now in dedicated Settings tool tab
- Textarea Primitive — New common UI component for consistent form styling
Technical
- Added
normalizeCasthelper for Firestore array/object format handling - New personnelLinking API with bidirectional link/unlink operations
- Improved Firestore transaction ordering (all reads before writes)
Version 2.0.0 — January 2026
New Features
- React Migration Complete — Full rewrite in React 19 with improved performance
- Social Feed — Threaded discussions with rich media support (replacing Forum)
- Custom Report Builder — Block-based template creator for personalized documents
- Stopwatch Timer — Built-in rehearsal timer in Notes toolbar with timer mark insertion
- Event Type Expansion — Scheduler now supports Meetings, Tech Rehearsals, Performances, and Deadlines
- Late Status Tracking — Attendance system now tracks "Late" arrivals with 30-minute window
- Public Sign-In System — QR code links for self-service attendance tracking
Improvements
- Primitive UI Refactor — All modals and forms now use design system primitives
- Floating Toolbar Enhancement — Stronger shadows and automatic button styling
- Side Tray Layout — Improved mobile responsiveness for Blocking Tracker
- Branded Types System — Type-safe ID handling across the codebase (developer improvement)
Bug Fixes
- Fixed PDF import hanging after "analyzing" toast
- Resolved
setStoreUser is not a functionerror on app initialization - Corrected presence permissions for non-existent projects
- Fixed low-priority UI inconsistencies across tabs
Technical
- Upgraded to Vite 7.2 and React 19.2
- Implemented Zustand persistence with rehydration safeguards
- Added Firebase security rules hardening
- Migrated to direct-path document discovery (no collection group queries)
Version 1.5.0 — December 2025
New Features
- AI Script Analysis — Automatic scene/character extraction from PDF scripts
- Set Builder Calibration — Real-world scaling for accurate floorplans
- Choreography Mode — Separate layer for dance/fight blocking
- AEA Compliance Checker — LORT and NEAT contract rule validation
Improvements
- Enhanced offline sync reliability
- Faster cloud sync with sharded Firestore documents
- Improved print layouts for all features
Bug Fixes
- Fixed audio playback on iOS Safari
- Resolved drag-and-drop issues on touchscreens
- Corrected timezone handling in Scheduler
Version 1.0.0 — October 2025
Initial Release
- Show Structure management (Acts/Scenes/Characters)
- Rehearsal Scheduler with calendar view
- Personnel & Tracking matrix
- Set Builder with 2D canvas
- Blocking Tracker
- Props inventory
- Run Sheet editor
- Sound system with Freesound integration
- Notes with TipTap editor
- Forum for team discussions
- Print system for all views
- Cloud sync with Firebase
- Progressive Web App (PWA) support
How to Update
On Book Pro automatically updates when you refresh the page. If you've installed it as a PWA, updates happen in the background.
Force an update:
- Clear your browser cache
- Refresh the page (Ctrl/Cmd + Shift + R)
- The latest version will load
Known Issues
No known critical issues at this time.
Upcoming Features
- Automated email triggers (Phase 3 — advanced scheduling and digest emails)
- Multi-show portfolio management
- Enhanced mobile rehearsal tools
Subscribe to release notifications: GitHub Releases