Skip to content

Application Architecture

CutReady application overview CutReady application overview
CutReady's main interface with sidebar, sketch editor, and chat panel

CutReady is a Tauri v2 desktop application with a split architecture:

┌─────────────────────────────────────────────────────────┐
│ CutReady Desktop App │
├─────────────────────────┬───────────────────────────────┤
│ Frontend (WebView) │ Backend (Rust) │
│ │ │
│ React 19 + TypeScript │ Tauri Commands │
│ Zustand State Store │ ├── project.rs │
│ Tailwind CSS │ ├── sketch.rs │
│ CodeMirror │ ├── storyboard.rs │
│ @dnd-kit │ ├── note.rs │
│ │ ├── interaction.rs │
│ │ ├── screenshot.rs │
│ │ ├── import.rs │
│ │ ├── agent.rs │
│ │ └── versioning.rs │
│ │ │
│ │ AI Layer │
│ │ └── Azure OpenAI (reqwest) │
│ │ │
│ │ Sidecar │
│ │ └── Playwright (Node.js) │
├─────────────────────────┴───────────────────────────────┤
│ Tauri v2 Runtime │
│ (WebView + Rust + IPC Bridge) │
└─────────────────────────────────────────────────────────┘

The frontend is a React 19 single-page application bundled with Vite:

TechnologyPurpose
React 19UI component framework
TypeScriptType-safe frontend code
ZustandCentralized state management
Tailwind CSSUtility-first styling
CodeMirrorMarkdown editing (notes)
@dnd-kitDrag-and-drop (storyboard list, table rows)
react-markdownMarkdown preview rendering

All application state flows through a single Zustand store (appStore.ts):

  • Project state (current project, recent list)
  • Document state (sketches, storyboards, notes)
  • UI state (sidebar, tabs, panels, theme)
  • Recording state (profiles, active session)
  • Version history (snapshots, timeline, dirty flags)

The store dispatches Tauri commands to the Rust backend for all filesystem and system operations.

The Rust backend handles:

ModuleResponsibility
project.rsProject CRUD, recent projects, sidebar persistence
sketch.rsSketch document CRUD, list summaries
storyboard.rsStoryboard CRUD, sketch ordering
note.rsMarkdown note CRUD
interaction.rsBrowser profile detection, recording sessions
screenshot.rsMonitor detection, screen/region capture
import.rsDocument import (docx, pdf, pptx conversion)
agent.rsAI chat and agent commands
versioning.rsSnapshot save/restore, timeline, stash

Lower-level implementations:

  • interaction.rs — CDP browser communication, Playwright sidecar management
  • screenshot.rs — Native screen capture via xcap crate
  • versioning.rs — Git operations via gix (gitoxide)

CutReady integrates with Azure OpenAI for AI-powered features:

  • API communication via reqwest with configurable endpoints and OAuth support
  • Function calling for structured sketch manipulation (add rows, update fields)
  • Streaming responses delivered to the frontend via Tauri channels
  • Silent mode for sparkle buttons — results are applied directly without chat UI

The AI layer supports 3 built-in agents (Script Writer, Demo Planner, Sketch Improver) plus user-defined custom agents.

Shared data types:

  • action.rs — Tagged union of browser/native actions
  • script.rs — Script rows with metadata
  • session.rs — Recording session with captured actions
  • sketch.rs — Sketch, Storyboard, VersionEntry, GraphNode

Browser automation runs in a Node.js sidecar process managed by Tauri:

  1. The Rust backend spawns a Playwright Node.js process
  2. Communication happens over stdio (JSON messages)
  3. The sidecar connects to Chrome/Edge via CDP (Chrome DevTools Protocol)
  4. Actions are streamed back to the Rust backend in real-time

This architecture isolates browser automation from the main process, preventing UI freezes during recording.

FeatureWindowsmacOSLinux
UI & Navigation
Sketch Editor
Screen Capture✅ (PipeWire)
Browser Recording⚠️ Experimental🚧🚧
Version History

CutReady uses GitHub Actions for automated cross-platform builds:

  • macOS — ARM (Apple Silicon) + Intel (x86_64) builds
  • Windows — MSI + NSIS installers
  • Linux — DEB + AppImage packages (Ubuntu 24.04)

Releases are triggered by pushing a v* git tag and create draft GitHub releases with all platform artifacts.