---
url: "https://docs.on-book.app/pro/user/changelog.md"
description: "Review recent On Book Pro feature updates and implementation notes."
---

# Changelog

> **Latest updates and features for On Book Pro.**

***

## Current App Release

On Book Pro is currently version **1.29.4**. The app now uses Release Please for semantic app releases and the canonical generated release log lives in the product repository `CHANGELOG.md`.

Recent releases expanded preserved-write handling, project invitations, script import resilience, profile settings, dashboard feed visibility, Notes reporting, communication audiences, Notes collaboration recovery, mobile usability, scene-order propagation, script-import dedupe, sound-control safety, calendar/security hardening, shared report generation, workspace navigation customization, schedule attendance behavior, project notification isolation, invitation reissue handling, rehearsal script access, and communication-send feedback:

* **1.29.4** keeps the Functions promise-lint ratchet at a zero-warning baseline.
* **1.29.3** replaces Prompt Book controls with shared UI primitives.
* **1.29.2** preserves the project-invite authentication handoff so accepted invitations carry the intended organization/project state through sign-in.
* **1.29.1** shows send progress in manual Communications composers while email delivery is in flight.
* **1.29.0** adds a Rehearsal Script view for script-text-enabled projects, giving limited cast-facing users a focused reading surface with assigned-character highlights and speech navigation.
* **1.28.7** restricts Feed media deletion to the expected project-scoped Storage paths.
* **1.28.6** makes project-invite retries idempotent.
* **1.28.5** replaces Performance controls with shared UI primitives.
* **1.28.4** routes accepted project invitations to the Dashboard with the accepted organization/project selected.
* **1.28.3** reuses the existing pending project invitation when an admin reissues an invite, keeping the invitation record and recipient validation aligned.
* **1.28.2** isolates in-app project notifications by active organization and project so notification trays do not mix activity across productions.
* **1.28.1** improves scheduler calendar attendance defaults and production milestone recognition.
* **1.28.0** lets users reorder the primary tools in each workspace sidebar; the command palette keeps workspace and tool commands alphabetized while the sidebar preserves the user's per-workspace order.
* **1.27.4** completes cloud write authority cleanup and routes Costumes and Budget writes through the project write authority.
* **1.27.3** replaces typed raw controls with shared UI primitives.
* **1.27.2** replaces Notes controls with shared UI primitives.
* **1.27.1** splits personnel profile privacy documentation.
* **1.27.0** adds a shared Reports modal that groups print and CSV report actions, including the Actor Rehearsal Hours report for called rehearsal time by actor and attendance status.
* **1.26.11** routes Settings toasts through the app toast provider so settings feedback appears consistently.
* **1.26.10** displays admin member join dates from member records.
* **1.26.9** guards callable email sends so malformed or incomplete requests fail before delivery.
* **1.26.8** restricts personnel shard writes to the intended server-authorized paths.
* **1.26.7** aligns mobile phone shell headers and propagates scene reorder changes into script surfaces.
* **1.26.6** repairs calendar subscription token regeneration.
* **1.26.5** secures trashed file cleanup.
* **1.26.4** scopes personal script imports to the caller.
* **1.26.3** further restricts actor-visible workspace tools.
* **1.26.2** hardens calendar subscription feeds.
* **1.26.1** replaces Sound control buttons with shared UI primitives so transport and utility controls keep explicit non-submit behavior.
* **1.26.0** improves mobile Profile and Feed usability and propagates Show Structure scene order into script, lighting, props, sound, print, and CSV surfaces.
* **1.25.0** improves mobile Files and Calendar usability, including phone-first file actions and agenda-first calendar browsing.
* **1.24.1** prevents duplicate imported props when script repair or production-element import results overlap existing scene-linked props.
* **1.24.0** improves mobile phone usability across the app shell, Personnel, notifications, and navigation, and upgrades the Notes editor workflow with attachments, outline/report-map navigation, snapshots, text import, and Markdown export.
* **1.23.6** flushes sent project invites from the outbound queue after delivery.
* **1.23.5** rediscovers project scope after stale local storage points at the wrong organization/project route.
* **1.23.4** hardens limited beta recovery paths.
* **1.23.3** prevents Blocking utility controls from submitting surrounding forms.
* **1.23.2** moves remaining cloud writes to server authority, including project bootstrap, access and role changes, roster/personnel authority, scoped imports, and attendance sign-in handling.
* **1.23.1** cleans up project invites and audience management, including personnel-backed invite invalidation, invite preview/acceptance behavior, and audience panel editing.
* **1.23.0** adds audience review and delivery history metadata to deadline pings.
* **1.22.2** clarifies agent branch hygiene in the Pro repository.
* **1.22.1** hardens collaborative Notes persistence and adds recovery snapshot tooling for legacy local note data.
* **1.22.0** adds the audience review flow to manual Call Sheet and Announcement sends.
* **1.21.2** replaces admin and file buttons with shared UI primitives.
* **1.21.1** adds explicit button types to admin modals so utility buttons do not submit forms unexpectedly.
* **1.21.0** adds the communication audience delivery foundation.
* **1.20.4** updates canonical documentation links.
* **1.20.3** records the current design backlog and roadmap audit.
* **1.20.2** makes shared buttons default to non-submit behavior so modal utility buttons do not accidentally submit forms.
* **1.20.1** prevents email composer close buttons from submitting forms.
* **1.20.0** routes rehearsal and meeting reports through configurable communication audiences with a recipient review step.
* **1.19.1** stabilizes Notes collaboration.
* **1.19.0** adds editable tables to the Notes editor.
* **1.18.6** uses login avatars for personnel cards.
* **1.18.5** populates personnel avatars from profile photos.
* **1.18.4** records the coverage ratchet result.
* **1.18.3** finalizes cloud-write task tracking.
* **1.18.2** selects the latest debug script job.
* **1.18.1** hides known-conflict controls for non-cast profiles.
* **1.18.0** adds right-click copy for script block text in the Script subtab.
* **1.17.1** preserves production elements generated during script import.
* **1.17.0** improves profile and file UI, including profile settings tied to linked personnel records.
* **1.16.3** routes nightly backlog automation.
* **1.16.2** updates Gemini model routing.
* **1.16.1** preserves remaining project write surfaces through the project-write authority.
* **1.16.0** connects Profile settings to project personnel records and makes the split-panel selector scrollable.
* **1.15.0** adds the Production Feed widget to the Dashboard.
* **1.14.7** aligns project write rules with the authority model, recovers stale conflict resolutions, compacts project-access invite lists, and stabilizes Notes/backend error handling.
* **1.14.6** improves conflict-review decision readability.
* **1.14.5** keeps cloud state authoritative over stale local browser state, preserves script block parentheticals and structure links, links loaded script block assignments, and lets stage-management roles edit personnel conflict metadata.
* **1.14.4** stabilizes Show Structure hydration for script-text-enabled projects.
* **1.14.3** repairs the personnel invite queue and clarifies the update toast.
* **1.14.2** stabilizes retries for preserved-write conflict resolution.
* **1.14.1** restores server-backed email callables.
* **1.14.0** adds the project invite onboarding gateway.
* **1.13.1** binds collaborative Notes documents to the active organization/project scope so identically named note ids cannot bleed across projects.
* **1.13.0** preserves artifact finalization writes after uploads complete, including generated script, file, and feed-media artifacts.
* **1.12.0** routes the remaining project write surfaces through the project-write authority where they are safe to apply automatically, while keeping unsafe bulk replacements in review.
* **1.11.x** consolidated structured project writes and added preserved attendance writes.
* **1.7.0-1.10.0** moved schedule, line notes, file metadata, and blocking writes through the project outbox.

This page remains a curated feature-history guide. The historical sections below predate the Release Please baseline and should not be read as the current semantic app version.

***

## Historical Feature Snapshot — 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 3.1 Flash Lite) for all users; "Pro" tier with Gemini 3.1 Pro 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](https://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.ts` — `subscribeToAttendance`, `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.ts` — `PerformanceSlice` 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.ts` — `savePerformanceLog`, `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.ts` — `loadDemoProject()` 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:
  * **Manual Communication Cards**: Current visible cards include Call Sheet, Deadline Ping, Project Invite, and Announcement; report emails are sent from feature workflows
  * **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 Integration** — `SendLineNotesModal` 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**: Planned future work; automatic meeting transcripts are not currently shipped
* **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`; transcript retrieval was later deferred as future work
* 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 `RunSheetState` → `ProjectState` throughout codebase
  * Renamed `CastMember` → `Personnel` 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 (`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 `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](https://github.com/alderac/on-book-pro/releases)*
