Skip to content

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/adk v0.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: AskBarryChip component provides inline AI assistance at friction points throughout the app
  • 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: useDeviceGate hook and DeviceGateBanner component 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
  • 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_ALL at 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 preserveLineBreaks field, 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/adk v0.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.ts components 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); JobProgressContext simplified 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-motion system 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 ExportCSVButton component 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.ts API: inheritRoleTemplates, resetRoleToTemplate, isRoleCustomized
  • New useRoleTemplates hook for org-level template CRUD
  • Firestore security rules added for project invitations subcollection
  • 17 unit tests for CSV export functions
  • New MicPackView.tsx component with three-zone layout (setup/matrix/swaps)
  • New mic-swap-utils.ts with generateSwapSuggestions, calculateMinimumPacks, buildActorScenePresence
  • New LockState type ('normal' | 'locked' | 'lowPriority') replacing locked: boolean in MicAssignment
  • New PrintMicPlot.tsx report integrated into PrintConfigModal
  • 23 unit tests for mic swap algorithm
  • New LightingSlice Zustand store slice managing lightingCues, followSpotCues, followSpots
  • New PrintLxCueList.tsx and PrintFollowSpotSheet.tsx print report components
  • New EDIT_LIGHTING permission added to RBAC system
  • Lighting registered as 'lxcuelist' and 'followspot' report types in PrintConfigModal.tsx
  • New SplitLayout.tsx — recursive renderer consuming LayoutConfig via react-resizable-panels (Group/Panel/Separator)
  • New Liquid Glass components: GlassRegular, GlassClear, GlassPanel, PanelSeparator with CSS module tokens
  • New glass.module.css with GlassKit design tokens and accessibility fallbacks (reduced transparency, reduced motion, increased contrast)
  • New PanelConfig, LayoutConfig interfaces and isPanelConfig() type guard in workspace-config.ts
  • Added splitToggle prop to ToolActionBar for split view toggle button
  • Desktop-only viewport guard via window.matchMedia('(min-width: 1024px)') in MainLayout
  • Panel size persistence to localStorage via onLayoutChanged callback
  • New pdfjs-dist dependency (Apache 2.0) for client-side PDF rendering in backdrop upload
  • New ImportButtons.tsx with ImportScriptButton standalone component for PDF script import
  • Admin Portal access moved from Header.tsx to SettingsTab.tsx (superadmin-gated)
  • SidebarTabs component now supports optional badge prop for notification counts
  • AdminLayout queries pending approvals via useAdminProjects and passes badge to Members tab
  • SettingsTab.tsx refactored to inline all file management operations (cloud sync, open/download/new project)
  • BlockingTab.tsx upgraded with handleUploadBackdrop supporting both images and PDF-to-canvas rendering
  • New useScriptJobStatus hook subscribing to script_jobs Firestore changes for real-time status + repair actions
  • New ScriptJobStatusChip.tsx toolbar component with 4 visual states (processing/partial/failed/completed)
  • New ScriptRepairPopover.tsx with phase-selective repair checkboxes and error summaries
  • SidebarTool extended with statusIndicator prop for colored status dots (processing/warning/success)
  • subscribeToLatestScriptJob() added to ai-api.ts for full job document subscriptions
  • ScriptJobStatus type expanded with phaseErrors field and ScriptJobStatusValue type alias
  • New motion package (MIT, ~32KB gzip) for declarative enter/exit/layout animations
  • New useMotionConfig hook centralizing transition presets (overlay, subtle, morph) with useReducedMotion integration
  • AnimatePresence wrappers on Modal, ToastContext, WorkspaceSelector, sidebar accordions
  • Sidebar collapse uses motion.div with layout prop for automatic size animation
  • Barry FAB uses Framer Motion layoutId for positional morph between FAB and panel states
  • 6 dead CSS @keyframes removed (fadeIn, fadeInZoomIn, fadeOutZoomOut, zoomIn, fadeOut, zoomOut)
  • New BarryPanel.tsx with WelcomeMessage, MessageBubble, ThinkingIndicator, SuggestionChip sub-components
  • New useBarryChat.ts hook managing send/receive, loading states, error handling
  • New barry/store.ts Zustand 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.ts with 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 useAskBarry hook and AskBarryChip component for lightweight inline AI contextual help
  • New roster-sync-api.ts with linkRosterToPerson, buildPersonnelFromRoster for org↔project roster linking
  • New Cloud Functions: onPersonnelWritten (upward sync with change detection), onRosterPersonWritten (downward sync to linked projects)
  • New RosterPickerModal.tsx for project-level "Add from Roster" with search and category filtering
  • RosterCategory type expanded from 3 to 6 values: staff, volunteer, board, student, guest, contractor
  • RosterPerson type extended with linkedProjects, workHistory, externalSource fields
  • PendingRosterUpdate type and organizations/{orgId}/pendingUpdates subcollection for admin review queue
  • AttentionRequired component now queries pending roster updates and surfaces them in the dashboard
  • RosterPersonModal work history tab upgraded with vertical timeline styling and linked projects badges
  • New org-types.ts with InventoryItem, InventoryItemInput, ItemSource, ItemCondition, ItemAvailability types
  • New inventory-api.ts — Full CRUD for organizations/{orgId}/inventory collection
  • New useOrgInventory.ts hook 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
  • AdminProject type extended with optional milestones field
  • 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 with attendanceRecords, setAttendanceRecords, clearAttendance actions
  • New attendance/attendance-api.tssubscribeToAttendance, ensureAttendanceRecord, writeActorStatus Firestore API
  • New useAttendanceSync.ts — real-time onSnapshot subscription 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 via requestFullscreen API
  • Updated PublicSignInPage.tsx — Shows Present/Late status from Cloud Function response
  • attendanceRecords excluded from LocalStorage persistence (storage version unchanged)
  • Firestore security rules added for projects/{id}/attendance/{eventId} subcollection
  • Legacy AttendanceState, AttendanceStatus, updateAttendance removed from cast/store.ts and cast/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
  • EmptyState component enhanced with actions array prop for structured multi-button CTAs
  • ProjectMember type extended with onboardingDismissed per-project flag
  • UserProfile type extended with welcomeDismissed global flag
  • RosterSearch integrated into BatchOnboardingComposer for consistent invite UX
  • Contextual empty states upgraded across 7 modules: Show Structure, Cast, Dashboard, Props, Costumes, Notes, Blocking
  • New performance/types.ts with PerformanceCue, FiredCue, ShowMarker, QuickNote, PerformanceState, PerformanceLog interfaces
  • New performance/store.tsPerformanceSlice Zustand 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.tssavePerformanceLog, saveDraftLog, getPerformanceLogs Firestore API
  • New CALL_SHOW permission added to RBAC system (Owner + Stage Manager default)
  • Performance workspace registered as 'performance' in workspace-config.ts with lazy import in MainLayout.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.tsloadDemoProject() hydrates Zustand store via setState() 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 sendDeadlinePing Cloud Function
    • Sends personalized reminder emails to assigned personnel with deadline details
  • 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 validation
    • types.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 fetch to Postmark SDK with template support
  • Refactored Meeting Invites — Consolidated from standalone file into the shared email module
  • Line Notes IntegrationSendLineNotesModal now calls the real sendLineNotes Cloud 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 EmailTab with 5 action cards (4 composable + 1 info card for feature-page emails)
  • Expanded EmailTemplate type, EmailResult, and request data interfaces
  • Replaced stubbed sendBatch with per-type callable API wrappers and Firestore history reads
  • Added emailOptOut field to Personnel record for notification preferences
  • All Cloud Functions use POSTMARK_SERVER_TOKEN as a Firebase secret
  • RBAC validation (validateEmailSender) integrated into all email functions
  • New src/features/feed/feed-api.ts with Firestore CRUD for feed subcollections
  • New useFeedSync hook for real-time onSnapshot listeners on feed/ and feedComments/
  • Feed data excluded from LocalStorage partialize (storage version bumped to 8)
  • Firestore security rules added for feed/{postId} and feedComments/{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
  • useProductionPhase hook detects production phase from scheduler milestone events
  • useMyCalls hook filters events by user ID and permission-derived groups
  • useMemberGroups hook 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 ScriptBlock type with type, text, sceneId, actId, characterId fields
  • 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:
    • ScheduleEvent refactored 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 RunSheetStateProjectState throughout codebase
    • Renamed CastMemberPersonnel in 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-*
  • Cloud Storage Schema Update — Firestore persistence modernized:
    • Schema version bumped from 3 → 4
    • Cloud storage now uses personnel field instead of legacy cast field
    • 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 FocusState interface mismatch (castMemberIdcastId)
  • 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 MeasurementEditor component with canMarkComplete prop for context-aware rendering
  • Added pronouns field to Personnel/CastMember type
  • Added isComplete, completedBy, completedAt fields 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 ScheduleEvent type 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=crew pattern
  • Reuses existing ActorsTable and CrewTable for 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_BUDGET permission 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_BUDGET permission 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 normalizeCast helper 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 function error 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:

  1. Clear your browser cache
  2. Refresh the page (Ctrl/Cmd + Shift + R)
  3. 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