Learn how to create beautiful presentations using Vision Deck's web interface and API
Vision Deck is a markdown-based presentation builder. You can create presentations through our user-friendly web interface or programmatically via our REST API.
Open your web browser and navigate to your Vision Deck instance. If you're running it locally, this is typically http://localhost:3000.
In the header, locate the presentation selector dropdown. It displays the current presentation name (starts with "Example Presentation" by default).
Click the dropdown to open it, then click the "Create Presentation" button from the menu.
Required. Choose a descriptive name for your presentation.
Example: "Q4 Product Roadmap"Brief description of your presentation's purpose.
Example: "Company strategy and upcoming product launches"Click the "Create" button to create your presentation. The dialog will close and you'll be automatically switched to your new presentation.
/api/presentationsCreates a new presentation programmatically
application/jsonname(string, required) Presentation namedescription(string, optional) Presentation descriptiontheme(string, optional) Theme name (defaults to "default")curl -X POST http://localhost:3000/api/presentations \
-H "Content-Type: application/json" \
-d '{
"name": "My API Presentation",
"description": "Created via REST API",
"theme": "dark"
}'const response = await fetch('http://localhost:3000/api/presentations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'API Generated Presentation',
description: 'Automated presentation creation',
theme: 'default'
})
});
const presentation = await response.json();
console.log('Created presentation:', presentation.id);import requests
response = requests.post(
'http://localhost:3000/api/presentations',
json={
'name': 'Python Generated Presentation',
'description': 'Created with Python requests',
'theme': 'default'
}
)
presentation = response.json()
print(f"Created presentation: {presentation['id']}"){
"id": "my-api-presentation",
"name": "My API Presentation",
"description": "Created via REST API",
"theme": "dark",
"created": "2024-01-12T23:17:31.000Z",
"modified": "2024-01-12T23:17:31.000Z",
"slideCount": 0
}{
"error": "Presentation name is required"
}Your presentation is stored in the filesystem with this structure:
presentations/
└── my-presentation/
├── config.json # Presentation metadata
└── slides/ # Your .mdx slide files go here
├── 01-intro.mdx
├── 02-content.mdx
└── ...slides/ directorynpm run validateLearn how to format your slides using Vision Deck's slide types and MDX components. This guide covers all available formatting options for creating beautiful presentations.
Purpose: Large, impactful title slides with animated backgrounds.
type: "hero" (required)title: Main heading text (required)subtitle: Smaller subtitle text (optional)---
type: hero
title: "Welcome to Vision Deck"
subtitle: "The future of presentations"
---Purpose: Display chronological events or milestones with a curved timeline visualization.
type: "timeline" (required)title: Timeline title (required)subtitle: Timeline subtitle (optional)points: Array of timeline points (required)date: Date string (e.g., "2024 Q1", "Jan 15, 2024")title: Event title---
type: timeline
title: "Product Roadmap"
subtitle: "2024 Development Timeline"
points:
- date: "Q1 2024"
title: "MVP Launch"
- date: "Q2 2024"
title: "User Feedback Integration"
- date: "Q3 2024"
title: "Advanced Features"
---Purpose: Showcase key messages or features in card format with icons.
type: "messages" (required)title: Section title (required)cards: Array of message cards (required)number: Display number (e.g., "01", "1")title: Card titleicon: Lucide React icon namedescription: Card description text---
type: messages
title: "Why Choose Us"
cards:
- number: "01"
title: "Lightning Fast"
icon: "zap"
description: "Built for performance with modern technologies"
- number: "02"
title: "Secure by Design"
icon: "shield"
description: "Enterprise-grade security from day one"
---Purpose: Display metrics and KPIs with animated counters and progress bars.
type: "stats" (required)title: Stats section title (required)subtitle: Section subtitle (optional)stats: Array of stat items (required)value: Number or string valuelabel: Stat labelprefix: Text before value (e.g., "$")suffix: Text after value (e.g., "%", "+")layout: Layout style (optional, default: "grid")"grid": 4-column grid with card backgrounds"row": Single row layout"columns": 2-column vertical layout---
type: stats
title: "2024 Performance"
subtitle: "Key Metrics"
layout: "grid"
stats:
- value: 1250000
label: "Active Users"
suffix: "+"
- value: 99.9
label: "Uptime"
suffix: "%"
---Purpose: Display testimonials or inspirational quotes with author attribution.
type: "quote" (required)quote: Quote text (required)author: Author name (optional)title: Author title (optional)company: Author company (optional)avatar: Avatar image URL (optional)background: Background style (optional, default: "gradient")"gradient": Multi-color gradient"minimal": Black background"accent": Purple accent gradient---
type: quote
quote: "Vision Deck transformed how we present to stakeholders."
author: "Sarah Chen"
title: "VP of Product"
company: "TechCorp Inc."
background: "accent"
---Purpose: Showcase code examples, commands, and technical demonstrations.
type: "terminal" (required)title: Terminal section title (required)commands: Array of command/code blocks (required)prompt: Command prompt (optional, defaults to >)command: Code or command text (required)output: Command output (optional)language: Programming language (optional)theme: Syntax highlighting theme (optional, default: "dark")"dark": Dark theme"light": Light theme"monokai": Monokai theme---
type: terminal
title: "Getting Started"
theme: "dark"
commands:
- prompt: "~"
command: "npm install vision-deck"
output: "added 42 packages in 3.2s"
- command: |
import { createDeck } from 'vision-deck'
const deck = createDeck({
slides: ['./slides/*.mdx']
})
language: "typescript"
---MDX components can be used within slide content for rich formatting and interactive elements.
Purpose: Highlight important information with styled boxes.
type: Callout style (optional, default: "info") - "info", "warning", "success", "error", "tip"title: Callout title (optional)<Callout type="warning" title="Important">
This action cannot be undone.
</Callout>Purpose: Highlight important text with colored backgrounds.
color: Highlight color (optional, default: "yellow") - "yellow", "green", "blue", "pink", "purple"This feature is <Highlight color="green">new</Highlight>!This feature is highlighted in yellow by default.
This is highlighted in green for success.
This shows blue highlighting for information.
This uses pink highlighting for emphasis.
This demonstrates purple highlighting for special content.
Purpose: Display status indicators or labels.
variant: Badge style (optional, default: "default") - "default", "success", "warning", "error", "outline"size: Badge size (optional, default: "md") - "sm", "md", "lg"<Badge variant="success" size="sm">New</Badge>Purpose: Show progress bars with animated fill.
value: Current progress value (required)max: Maximum value (optional, default: 100)label: Progress bar label (optional)showValue: Show percentage (optional, default: true)size: Bar thickness (optional, default: "md") - "sm", "md", "lg"color: Bar color (optional, default: "white") - "white", "green", "blue", "purple"<Progress value={75} label="Completion" color="green" />Purpose: Inline code formatting.
language: Programming language (optional)Use the <Code>npm install</Code> command.Use the npm install command to get started.
You can also highlight function names and variables inline.
Purpose: Animated number counters.
value: Target number (required)duration: Animation duration in seconds (optional, default: 1)prefix: Text before number (optional)suffix: Text after number (optional)<Counter value={1500000} prefix="$" suffix="+" />Purpose: Precise animated numbers with decimal support.
value: Target number (required)decimals: Decimal places (optional, default: 0)duration: Animation duration in seconds (optional, default: 1)<AnimatedNumber value={3.14159} decimals={2} />Purpose: Numbered step-by-step instructions.
number: Step number (required)title: Step title (required)active: Highlight as active step (optional, default: false)<Step number={1} title="Install Dependencies">
Run `npm install` to install packages.
</Step>Purpose: Collapsible content sections.
title: Accordion title (required)defaultOpen: Start expanded (optional, default: false)<AccordionItem title="Advanced Configuration">
Detailed configuration options go here.
</AccordionItem>npm run validatenpm run devNeed help with creating slides? Check out the example presentation or visit our GitHub repository for more documentation.