Presentation editor engine.
Slide editor with a dedicated presentation engine. Text elements, shapes, per-slide backgrounds. Content stored as JSON snapshots in Calisto Box. PPTX import and export. PDF export at 16:9. Three built-in templates plus custom templates. Merge fields. Generate decks from a prompt with outline preview. Per-save version history. Brand Check. Slideshow API for Display and TV.
,0,
export formats (PPTX, PDF)
,0,
built-in templates
,0,
generation endpoints (generate, outline, improve)
,0,
scoped contexts (deals, proposals, lessons)
Presentation engine. JSON snapshots. Box storage.
Calisto Slides wraps a dedicated presentation engine for the runtime, the slide data model, and the editing surface. Content persists as JSON snapshots in Calisto Box.
Presentation Engine
Built on a dedicated presentation engine. The editor runs client-side. Slide state is a JSON snapshot with pages, pageOrder, and pageElements. Each element has position coordinates (left, top, width, height) and typed content (shapeText with paragraphs and textRuns).
- Presentation engine with editing surface
- Client-side slide model
- Core runtime integration
- SlideEditor + SlideEditorHandle ref API
Text Elements and Shapes
Text elements with configurable font size, bold, and positioning. Each slide contains a pageElements map of typed objects. Title elements and bullet elements are placed at specific pixel coordinates within the slide canvas.
- Per-element font size (7pt to 48pt)
- Bold and regular text styles
- Pixel-level element positioning
- Title + bullet element types
Per-Slide Backgrounds
Each slide stores a background color as an RGB hex value in the snapshot. The PDF exporter detects dark backgrounds and switches text to white. The theme API provides account-level primary color with brand kit fallback.
- Per-slide RGB background color
- Dark/light text auto-detection
- Brand kit color sync
- Modern and classic template names
Snapshot Storage in Box
Every save serializes the slide snapshot to JSON and uploads to Calisto Box. Files are stored with .univer extension. The editorFiles.boxFileId column points to HEAD. Presigned download URLs load content on open.
- JSON snapshot format (.univer)
- Box-backed object storage
- Presigned download URLs (300s TTL)
- editorType: "slide" in editorFiles
Editor renders. Box stores. Snapshots persist.
The editor runs the presentation engine client-side for the runtime, the slide model, and the editing surface. Every save serializes state to a JSON snapshot uploaded to Calisto Box. The editorFiles table tracks HEAD; editorFileVersions tracks history.
Blank. Templates. Generate. PPTX import. Merge fields.
Six ways to start a presentation. Blank canvas, three built-in templates, account-level custom templates, generate from a text prompt, PPTX file import, and merge field tokens for reusable decks.
Blank Presentation
Title input and a single-click create. The API (POST /api/slides/new) inserts an editorFiles row with editorType "slide" and uploads an empty snapshot to Box. The editor opens immediately.
- POST /api/slides/new
- Empty single-page snapshot
- Redirect to /slides/[fileId]
Built-in Templates
Three templates ship with every account: Property Pitch Deck (investor or agency presentations), Training Module (staff onboarding), and Quarterly Review (business performance). Selected via templateId on create.
- Property Pitch Deck
- Training Module
- Quarterly Review
Custom Templates
Any presentation can be saved as a template (isTemplate flag on editorFiles). The GET /api/templates endpoint returns up to 50 account-level templates filtered by editorType "slide" and isTrashed: false.
- isTemplate flag per file
- Up to 50 per account
- GET /api/templates endpoint
AI Generation
POST /api/slides/ai/generate accepts a natural-language prompt and slide count (default 5). Returns a full presentation snapshot with title slides, bullet slides, and a summary slide. Speaker notes included per slide. A separate /ai/outline endpoint returns just titles and bullets for review before generating. /ai/improve rewrites individual slide text.
- Prompt-to-snapshot generation
- Outline preview before full build
- Per-slide speaker notes
- Text rewrite via /ai/improve
PPTX Import
Drag-and-drop or file picker for .pptx files up to 50 MB. POST /api/slides/import stores the raw file in Box. On first editor open, the client-side importer converts the PPTX to snapshot format. First auto-save writes the .univer file.
- .pptx files up to 50 MB
- Raw PPTX stored in Box
- Client-side conversion
- needsConversion metadata flag
Merge Fields
The MergeFieldPicker in the editor header inserts {{key}} tokens. POST /api/slides/merge-fields walks every text element across every slide and resolves tokens against a MergeFieldContext object. Uses the shared merge-fields engine.
- {{key}} token syntax
- Recursive snapshot resolution
- Shared merge-fields engine
,0,
creation paths (blank, built-in, custom, AI, import, URL prompt)
,0,
MB max PPTX import size
,0,
custom templates per account
,0,
merge field syntax: {{key}}
Present from the editor. Export as PPTX or PDF.
Full-screen presentation mode via the presentation engine. The slideshow API serves read-only snapshots to Display and TV apps. PPTX export runs client-side. PDF export runs server-side at 16:9 with background colors and slide numbers.
Full-screen playback. Slideshow API. Speaker notes.
Present directly from the editor with one click. The slideshow API serves read-only snapshots to Display and TV apps for lobby screens and digital signage.
Full-Screen Presentation
The "Present" button in the editor header calls editorRef.current.enterPresentationMode(). The presentation engine handles full-screen rendering and slide navigation. No separate app or plugin required.
- enterPresentationMode() via ref handle
- Native engine playback
- Triggered from editor header CTA
Slideshow API for Display/TV
GET /api/slides/slideshow?fileId=xxx returns a read-only snapshot with slide count for embedding in Calisto Display and TV apps. A list mode (?list=true) returns up to 50 recent presentations for slideshow scheduling.
- Read-only snapshot endpoint
- slideCount in response
- List mode for scheduling (50 max)
- Box presigned URL content fetch
Speaker Notes
Generated presentations include a "notes" field per slide with talking points. The outline endpoint (POST /api/slides/ai/outline) also returns notes for each slide in the review step before full generation.
- Per-slide notes field
- Included in AI generation
- Included in AI outline preview
PPTX client-side. PDF server-side. Two formats.
PPTX export runs in the browser via the editor SDK. PDF export runs on the server with the PDF export service, rendering each slide at 16:9 with background colors, positioned text, and slide numbers.
PPTX Export
Client-side export via the editor SDK. POST /api/slides/export with format "pptx" echoes the snapshot back to the client, where the client-side exporter handles the conversion. The output is a standard .pptx file compatible with PowerPoint, Keynote, and Google Slides.
- Client-side editor SDK conversion
- Browser-based PPTX export
- Standard OpenXML .pptx output
PDF Export
Server-side render via the PDF export service. The SLIDE_16_9 preset defines page dimensions. Each slide becomes a PDF page with background color fill, text elements with word-wrap, and a slide number in the bottom-right corner. Dark backgrounds trigger white text rendering.
- 16:9 slide dimensions
- Per-page background color
- Word-wrapped text with bold support
- Slide numbers (e.g. "3 / 12")
Per-save versioning. Scoped decks. Four platform connections.
Every save writes an immutable snapshot to Box with a version record. Presentations can be scoped to deals, proposals, or University lessons. Brand Check, Media Library, Box storage, and Display/TV integration.
Every save is a snapshot. Box stores the history.
Each save writes a new JSON snapshot file to Box and creates a version record with size, changelog, and format version. The editorFiles row always points to HEAD.
Per-Save Version Records
Every save creates a new Box file upload and inserts a row in editorFileVersions. Version numbers increment monotonically starting at 1. The editorFiles.boxFileId column always points to the latest version (HEAD). Changelog text is optional per version.
- Monotonic version numbers
- HEAD pointer via boxFileId
- Optional changelog per version
- sizeBytes tracked per snapshot
Snapshot Format Versioning
Each version record stores a formatVersion field (currently "0.5.x"). This tracks compatibility between snapshot format and the presentation engine version. Content metadata also records the format version on upload to Box.
- formatVersion: "0.5.x"
- Stored in editorFileVersions
- Also in Box upload metadata
Save Notifications
A fire-and-forget in-app notification triggers every 5th version to reduce noise. The notification includes the presentation title and current version number. Category key: slides_presentation_saved.
- Every 5th save triggers notification
- In-app channel, low priority
- Includes title and version number
Deals. Proposals. Lessons. One editor, three contexts.
Presentations can be created from within deal, proposal, and lesson views. Each stores a scope ID in editorFiles metadata. The parent view queries its own endpoint to list associated decks.
Deal Presentations
POST /api/slides/deal creates a presentation scoped to a deal. The dealId is stored in editorFiles.metadata as JSONB. The deal detail view queries GET /api/slides/deal?dealId=xxx to list associated decks. Default title pattern: "Pitch Deck" + deal name.
- dealId in metadata JSONB
- GET lists by dealId filter
- Notification: slides_deal_deck_created
- Box scope: "deal"
Proposal Presentations
POST /api/slides/proposal creates a presentation scoped to a proposal. The proposal detail view can embed the slide deck. Same editorFiles pattern with proposalId in metadata. Default title pattern: "Proposal" + proposal name.
- proposalId in metadata JSONB
- GET lists by proposalId filter
- Notification: slides_proposal_deck_created
- Box scope: "proposal"
Lesson Presentations
POST /api/slides/lesson creates a presentation scoped to a University lesson. Stores both lessonId and courseId in metadata. The lesson view embeds slide content. Default title pattern: "Lesson" + lesson name.
- lessonId + courseId in metadata
- GET lists by lessonId filter
- Notification: slides_lesson_deck_created
- Box scope: "lesson"
Brand Check. Media Library. Box. Display apps.
Slides connects to four platform services: Ethos Integrity for brand compliance, Media Library for image assets, Box for snapshot storage, and Display/TV for slideshow playback.
Ethos Brand Check
The editor header includes a brand check button that scans presentation content against account brand guidelines via Ethos Integrity. Returns pass/fail with a percentage score and a list of specific issues. Color resolution falls back to the active brand kit primary color.
- useEthosIntegrity hook
- Score percentage + issue list
- Brand kit color sync to theme API
Media Library
The Media Library modal opens from the editor header. Browse and select images from the centralized media library for insertion into slides.
- Media Library modal component
- Centralized asset management
- Image selection from editor header
Calisto Box Storage
All presentation snapshots are stored in Calisto Box (cloud storage). The settings page includes a BoxStorageView showing quota usage. Box provides presigned download URLs with 300-second TTL for content loading.
- BoxStorageView in settings
- Quota monitoring per app
- Presigned URLs (300s TTL)
Display and TV Apps
The slideshow API (GET /api/slides/slideshow) serves read-only snapshots for Calisto Display and TV. List mode returns up to 50 presentations for scheduling rotation on lobby screens and digital signage.
- Read-only snapshot endpoint
- List mode for scheduling
- Cross-app via slideshow API
High-Performance Ops. Zero Monthly Overhead.
Get all 15 Core modules at no monthly cost. You only pay 2% of processed revenue.
Slides
Presentation editor with collaboration and version history.
Part of Work Suite
Wallet-debit
Add to Pro Shop