Skip to content
Back to Changelog

# CineLog v1.0.66 - Nov 4 - Dec 4, 2025

Dec 3, 2025 v1.0.66

November 4 - December 4, 2025 (version 1.0.66)

Summary

Major release with 201 changed files covering analytics integration, account management, hotkey system overhaul, PDF export, and extensive UI/UX improvements including full phone layout support.


👤 User-Facing Changes

Account Restoration

  • Soft-deleted accounts can be restored within 30 days
  • Shows days remaining until permanent deletion
  • Automatic redirect for soft-deleted users

⌨️ Keyboard Shortcuts

Platform-Aware Hotkeys

  • Uses ⌘ (Command) on macOS, Ctrl on Windows/Linux
  • Platform-specific display in hotkey hints

New Shortcuts

ShortcutAction
⌘/Ctrl+IImport script from file
⌘/Ctrl+PPDF export (Shot List, Storyboard)
Shift+PPopulate shot list from script
Shift+SToggle script panel
1-7Script Editor element formatting
⌘/Ctrl+Shift+TToggle color theming

📄 Script Editor

Import Improvements

  • Real-time progress indicator with step-by-step feedback
  • Shows: loading, parsing, indexing, syncing, complete states
  • Non-blocking import prevents UI freezing on large scripts

Responsive Layout

  • Full layout (940px+): All buttons with labels
  • Compact layout (780px+): Condensed button labels
  • Ultra-compact (<720px): Maximum editor space

Mobile Improvements

  • iOS/Android selection handles and toolbars
  • Phone layout with drawer navigation

🗂️ Shot List

Phone Layout (NEW)

  • Mobile-optimized expandable shot items
  • Swipe actions for edit and delete
  • Bottom navigation to toggle Linear/Production modes
  • Day selector for production scheduling
  • PreVis image carousel with upload support

Desktop Improvements

  • Cmd+Scroll to adjust row height (30-200px)
  • Drag column headers to reorder
  • Long-press custom columns to delete
  • “Sort & Fix Indexes” maintenance tool

PDF Export (NEW)

  • Export shot lists to PDF with customizable options
  • Select which columns to include
  • Choose page format (Portrait/Landscape A4)
  • Custom PreVis image dimensions
  • Document header with project logo
  • Unicode font support (Cyrillic and other scripts)

Edit Overlays

  • Fade-out gradient at bottom of option lists
  • Long-press to delete custom options
  • Auto-save while typing

🎯 Storyboard

Grid View (NEW)

  • Toggle between Linear and Grid layouts
  • Phone: 2-column grid
  • Desktop: Configurable 1-10 columns
  • Cmd+Scroll to adjust column count
  • Drag-and-drop reordering

Linear View Improvements

  • Cmd+Scroll to adjust panel width (200-800px)
  • Tappable shot type, lens, and movement fields
  • Double-tap description to edit inline
  • Single-tap opens expanded view

Expanded View Dialog (NEW)

  • Fullscreen view for shot details and previs images
  • Image carousel with tap zones (left/right to navigate)
  • “Manage PreVis” button for quick access

PDF Export (NEW)

  • Configure columns per page (1-5)
  • Scene selection: Current, Range, or All
  • Adjustable margins and panel spacing

📁 Media Explorer

Improvements

  • Lazy loading with scroll-based pagination
  • Drag-and-drop file reordering (order persists)
  • Phone layout with drawer navigation
  • Filter bar for desktop/tablet, filter sheet for mobile

Entity Media Screen

  • Fullscreen modal dialog on desktop
  • Drag-and-drop file reordering

📱 Phone Layout Support

Added responsive phone layouts across the app:

  • Script Editor, Projects, Account, Help, Roadmap
  • Call Sheets, Cast & Crew, Home, Invoices
  • Media Explorer, Hotkeys Screen

Common Phone Features

  • Unified PhoneAppBar with drawer navigation
  • Project abbreviation in app bar navigates to projects list
  • Keyboard auto-dismiss on tap

🎨 UI/UX Improvements

  • Phone layout uses drawer instead of navigation rail
  • Project selector navigates directly to projects list on phone
  • Help screen with links to docs, support, and legal info

Windows Support

  • Window caption integration
  • Drag-to-move area for window dragging

Error Handling

  • User-friendly network error notifications via snackbar

🔧 Technical Changes

🌐 API & Network Layer

API Client

  • Configurable endpoint prefixes with defaultPrefix parameter
  • Per-endpoint prefix overrides (GraphQL uses root /)
  • SnackbarService integration for network error notifications
  • New endpoints: graphql, updateProfile, deleteAccount, restoreAccount, initiateUpload

Exception Handling

  • OfflineException class for expected network errors (not logged as errors)
  • Async network connectivity checks before reporting errors
  • AuthInterceptor reads requiresAuth from endpoint options

Network Connectivity Service (NEW)

  • NetworkConnectivityService for reliable connectivity detection
  • Uses connectivity_plus for platform state
  • Socket-based internet verification (Google DNS, Cloudflare DNS)
  • onConnectivityChanged stream for real-time monitoring

🔄 CineSync (Transaction Sync)

  • GraphQLCineSyncServer receives ApiClient instance (reuses interceptors)
  • Consolidated graphql_server.dart into server_interface.dart
  • TransactionQueue receives server at construction (no recreation)
  • Dedicated scriptImport mutation for bulk operations
  • Transactions marked for retry when connection restored

📊 Analytics

  • Firebase Analytics integration with AnalyticsService
  • Platform-aware tracking (iOS, macOS, Android, Windows, Linux, Web)
  • app_platform user property for segmentation
  • Session tracking with duration measurement
  • Authentication flow events: login started/code sent/completed/failed, logout
  • Analytics user ID via backend-generated hashed analyticsId
  • Upload tracking: media_file_uploaded, media_file_upload_failed, upload_batch_completed
  • Project events: created, deleted, opened

🔐 Authentication

AuthUser Model

  • New fields: analyticsId, firstName, lastName, roles, deletedAt
  • isDeleted computed property, daysUntilPermanentDeletion
  • toMap(), fromMap(), copyWith() methods

AuthService

  • updateProfile(), deleteAccount(), restoreAccount() methods
  • Clear cached project ID on logout
  • Clear refresh token before new authentication

🧭 Router

  • New routes: /account-restoration, /help, /account
  • Firebase Analytics observer for screen tracking
  • Soft-deleted account redirect logic
  • Post-auth redirect to shot list if project available
  • EntityMediaPageRoute removed (now modal dialog)

🎬 Models & Stores

Scene & Shot Models

  • SceneTimeOfDay: Fixed GraphQL string conversion
  • ShotModel: Added status field toggle
  • ShotListItemListType enum: linear vs production

ShotListItem Model

  • listType field (linear or production)
  • Linear items require productionDay == null
  • copyToProductionList() method

Stores

  • sceneModelProvider keyed by scene ID (UUID) instead of scene number
  • Placeholder scene for deleted scenes
  • sceneNumberExists() validation

📄 Script Editor Internals

Import Transactions

  • ScriptImportDocumentTransaction: Atomic document delete+create
  • ScriptImportNodesTransaction: Batched node creation (200 per batch)
  • ScriptImportTransaction: Single-transaction optimized import

FractionalIndexingIsolate (NEW)

  • Background isolate for fractional indexing
  • Batches of 100 nodes with microtask breaks

FountainAtomicRealtimeController

  • Improved dialogue continuation for empty nodes
  • Character demotion validation
  • NodeRemovedEvent detection for deletions

🗂️ Shot List Internals

Transactions

  • All include listType field
  • ShotListReindexTransaction (NEW): Bulk reindex for corrupted indexes
  • LinearSceneDeletionTransaction: Deletes linear and production items
  • ShotListPopulationTransaction: BULK_DELETE in FK order
  • Deprecated ShotSceneChangeTransaction → use LinearShotMoveTransaction

Services

  • CellEditOverlayService: Tablet dialog support, scene by UUID
  • ShotEditingService: updateStatus() method
  • ShotListPDFExportService (NEW): PDF generation with Unicode fonts
  • ShotListService: Bootstrap splits by listType, scene integrity validation

Utilities

  • Deletion order: remove from list → invalidate provider → delete from store
  • ShotListExportUtils (NEW): JSON export for debugging
  • Linear items always have productionDay: null

🎯 Storyboard Internals

  • StoryboardLayoutMode enum: linear and grid
  • Removed deprecated StoryboardDisplayState
  • StoryboardGridDelegate: Custom grid layout with additionalHeight
  • Renamed LinearStoryboardTopMenuBarStoryboardTopMenuBar

🔥 Firebase & Initialization

Firebase

  • Platform-specific configurations via FlutterFire CLI
  • Web, Android, iOS, macOS, Windows support
  • Linux throws UnsupportedError

Bootstrap

  • 10-second timeout with error UI
  • Auto-logout on bootstrap error
  • Workspace initialization handled by AuthService

Responsive Breakpoints

  • MOBILE → PHONE (0-550px)
  • TABLET (551-1000px)
  • DESKTOP (1001+)

🛠️ Utilities

New

  • Debouncer: Input stabilization
  • GridLayoutUtils: Responsive card sizing
  • FilePickerDiagnostics: Platform-specific logging
  • FileOrderUpdateTransaction: File sort order persistence
  • FileSelectionMixin: Consistent selection behavior

Text Transformers

  • camelCaseSlug handles acronyms
  • camelToSnakeCase extension
  • titleToCamelCaseSlug for special characters

Display Settings

  • storyboardGridCrossAxisCount for grid columns
  • storyboardLinearSize default: 200 → 350

Other

  • log.error() default showSnackbar: false
  • clearRefreshToken() for selective token clearing
  • appBarTheme with consistent text styling
Authentication

Log in or sign up

Verify your email to manage your workspaces and subscriptions.