loading…
Search for a command to run...
loading…
Generate executive-ready presentations via API. 32 slide types, 24 chart types, 15 themes, finance vertical with DCF/comp tables/waterfalls. Renders PPTX from J
Generate executive-ready presentations via API. 32 slide types, 24 chart types, 15 themes, finance vertical with DCF/comp tables/waterfalls. Renders PPTX from JSON IR or natural language prompts.
API-first presentation generation for humans and AI agents
Executive-ready slides, one API call away. Send a JSON intermediate representation (IR) or a natural-language prompt and get back a .pptx file, Google Slides deck, or thumbnail PNG -- with professional layout, consistent branding, and verified quality.
@deckforge/sdk with fluent builder pattern, full type safety, SSE streamingGet from zero to your first rendered deck in under 5 minutes.
# 1. Clone the repo
git clone https://github.com/Whatsonyourmind/deckforge && cd deckforge
# 2. Copy environment config (works out of the box for local dev)
cp .env.example .env
# 3. Start all services (API, workers, PostgreSQL, Redis, MinIO)
docker compose up -d
# 4. Initialize the database (runs migrations, seeds test user + API key)
bash scripts/bootstrap-db.sh
# 5. Verify the API is running
curl http://localhost:8000/v1/health
# => {"status":"healthy"}
The bootstrap script outputs a test API key (dk_test_...). Save it for the examples below.
curl -X POST http://localhost:8000/v1/render \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"title": "Q4 Board Update",
"theme": "corporate-blue",
"slides": [
{
"slide_type": "title_slide",
"elements": [
{"type": "title", "content": "Q4 2026 Board Update"},
{"type": "subtitle", "content": "Acme Corp -- Confidential"}
]
},
{
"slide_type": "stats_callout",
"elements": [
{"type": "title", "content": "Key Metrics"},
{"type": "metric", "content": "$4.2M", "label": "ARR"},
{"type": "metric", "content": "142%", "label": "YoY Growth"},
{"type": "metric", "content": "94%", "label": "Retention"}
]
}
]
}' \
--output board-update.pptx
curl -X POST http://localhost:8000/v1/generate \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Create a 10-slide pitch deck for a B2B SaaS startup in the cybersecurity space, Series A, $2M ARR",
"theme": "executive-dark",
"output_format": "pptx"
}' \
--output pitch-deck.pptx
Note: The
/v1/generateendpoint requires at least one LLM API key configured in.env(Anthropic, OpenAI, Gemini, or Ollama).
# List all 15 themes
curl http://localhost:8000/v1/themes
# List all 32 slide types with example IR
curl http://localhost:8000/v1/slide-types
# Estimate credit cost before rendering
curl -X POST http://localhost:8000/v1/estimate \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"slides": [{"slide_type": "title_slide"}, {"slide_type": "chart_slide"}]}'
Install from npm:
npm install @deckforge/sdk
Fluent builder with full type safety:
import { DeckForge, Presentation, Slides } from "@deckforge/sdk";
const client = new DeckForge({ apiKey: "dk_test_YOUR_KEY_HERE" });
const deck = Presentation.create("Q4 Board Update", "corporate-blue")
.addSlide(
Slides.titleSlide({
title: "Q4 2026 Board Update",
subtitle: "Acme Corp -- Confidential",
})
)
.addSlide(
Slides.statsCallout({
title: "Key Metrics",
metrics: [
{ value: "$4.2M", label: "ARR" },
{ value: "142%", label: "YoY Growth" },
{ value: "94%", label: "Retention" },
],
})
);
const pptx = await client.render(deck);
// => Buffer containing .pptx file
Generate from a prompt with SSE streaming:
const stream = client.generate({
prompt: "Create a PE deal memo for a $500M LBO of a healthcare platform",
theme: "finance-pro",
});
for await (const event of stream) {
console.log(`${event.stage}: ${event.message}`);
}
// intent: Analyzing prompt for presentation structure...
// outline: Creating 12-slide deal memo outline...
// expand: Generating slide content...
// refine: Running QA pipeline (5 passes)...
// complete: Deck ready for download
+------------------+
| Clients |
| (curl/SDK/MCP) |
+--------+---------+
|
+--------v---------+
| FastAPI (uvicorn)|
| /v1/* routes |
| Auth + Rate Limit|
| Credit Billing |
+--+-----+------+--+
| | |
+-----------+ | +----------+
| | |
+--------v------+ +------v--------+ +------v--------+
| Content Worker | | Render Worker | | Sync Path |
| (ARQ + Redis) | | (ARQ + Redis) | | (< 10 slides) |
| NL -> IR | | IR -> PPTX | | Direct return |
+--------+------+ +------+--------+ +------+--------+
| | |
v v v
+--------+------+ +------+---------+ +-----+--------+
| LLM Adapters | | PPTX Renderer | | Google Slides|
| Claude/GPT/ | | Layout Engine | | Renderer |
| Gemini/Ollama | | Theme Resolver | | (OAuth) |
+---------------+ | Chart Renderer | +--------------+
| QA Pipeline |
+------+---------+
|
+------v---------+
| Storage |
| MinIO (dev) |
| R2/S3 (prod) |
+----------------+
+----------------+ +----------------+
| PostgreSQL | | Redis |
| Users, Keys | | Queue, Cache |
| Jobs, Decks | | Rate Limits |
| Billing | | SSE Pub/Sub |
+----------------+ +----------------+
All routes are mounted under the /v1 prefix. Interactive docs at http://localhost:8000/docs.
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/v1/health |
GET | No | Health check |
/v1/render |
POST | API key | Render IR to PPTX/Google Slides |
/v1/generate |
POST | API key | Generate slides from natural language |
/v1/preview |
POST | API key | Generate thumbnail PNGs |
/v1/estimate |
POST | API key | Estimate credit cost |
/v1/jobs/{id} |
GET | API key | Check async job status |
/v1/themes |
GET | No | List available themes |
/v1/slide-types |
GET | No | List slide types with examples |
/v1/decks |
GET/POST/DELETE | API key | Deck CRUD operations |
/v1/batch |
POST | API key | Batch render multiple decks |
/v1/webhooks |
GET/POST/DELETE | API key | Manage webhook subscriptions |
/v1/billing/* |
Various | API key | Stripe subscription management |
/v1/pricing |
GET | No | Current pricing and tier info |
/v1/onboard/signup |
POST | No | Create account and API key |
/v1/analytics/* |
GET | Admin | Usage analytics and metrics |
/v1/auth/google/* |
GET | API key | Google OAuth flow for Slides |
All variables are prefixed with DECKFORGE_. See .env.example for the complete reference with comments and example values.
| Variable | Default | Description |
|---|---|---|
DECKFORGE_DATABASE_URL |
postgresql+psycopg://...localhost |
PostgreSQL connection string |
DECKFORGE_REDIS_URL |
redis://localhost:6379/0 |
Redis connection (queue, cache, pub/sub) |
DECKFORGE_S3_ENDPOINT_URL |
http://localhost:9000 |
S3-compatible storage endpoint |
DECKFORGE_S3_ACCESS_KEY |
minioadmin |
S3 access key (MinIO default for dev) |
DECKFORGE_S3_SECRET_KEY |
minioadmin |
S3 secret key |
DECKFORGE_S3_BUCKET |
deckforge |
S3 bucket name |
DECKFORGE_API_HOST |
0.0.0.0 |
API bind address |
DECKFORGE_API_PORT |
8000 |
API port |
DECKFORGE_DEBUG |
true |
Debug mode (disable in production) |
DECKFORGE_ENVIRONMENT |
development |
development / staging / production |
DECKFORGE_LLM_DEFAULT_PROVIDER |
claude |
Default LLM for content generation |
DECKFORGE_LLM_FALLBACK_CHAIN |
claude,openai,gemini |
LLM fallback order |
DECKFORGE_ANTHROPIC_API_KEY |
-- | Anthropic API key for Claude |
DECKFORGE_OPENAI_API_KEY |
-- | OpenAI API key |
DECKFORGE_GEMINI_API_KEY |
-- | Google Gemini API key |
DECKFORGE_OLLAMA_BASE_URL |
http://localhost:11434 |
Ollama local server URL |
DECKFORGE_STRIPE_SECRET_KEY |
-- | Stripe secret key |
DECKFORGE_STRIPE_WEBHOOK_SECRET |
-- | Stripe webhook signing secret |
DECKFORGE_STRIPE_STARTER_PRICE_ID |
-- | Stripe price ID for Starter tier |
DECKFORGE_STRIPE_PRO_PRICE_ID |
-- | Stripe price ID for Pro tier |
DECKFORGE_GOOGLE_CLIENT_ID |
-- | Google OAuth client ID (for Slides) |
DECKFORGE_GOOGLE_CLIENT_SECRET |
-- | Google OAuth client secret |
DECKFORGE_GOOGLE_REDIRECT_URI |
http://localhost:8000/v1/auth/google/callback |
OAuth redirect URI |
DECKFORGE_UNKEY_ROOT_KEY |
-- | Unkey root key (production auth) |
DECKFORGE_UNKEY_API_ID |
-- | Unkey API ID |
DECKFORGE_X402_ENABLED |
false |
Enable x402 USDC payments |
DECKFORGE_X402_WALLET_ADDRESS |
-- | USDC receiving wallet on Base |
DECKFORGE_X402_FACILITATOR_URL |
https://x402.org/facilitator |
x402 facilitator endpoint |
DECKFORGE_X402_NETWORK |
eip155:8453 |
Base Mainnet chain ID |
DeckForge ships with a production-ready fly.toml and multi-stage Dockerfile.
# 1. Install Fly CLI
curl -L https://fly.io/install.sh | sh
# 2. Login and launch
fly auth login
fly launch --name deckforge-api --region iad
# 3. Provision PostgreSQL
fly postgres create --name deckforge-db --region iad
fly postgres attach deckforge-db
# 4. Provision Redis (via Upstash or Fly Redis)
fly redis create --name deckforge-redis
# Copy the REDIS_URL from output
# 5. Set production secrets
fly secrets set \
DECKFORGE_ENVIRONMENT=production \
DECKFORGE_DEBUG=false \
DECKFORGE_DATABASE_URL="postgres://..." \
DECKFORGE_REDIS_URL="redis://..." \
DECKFORGE_S3_ENDPOINT_URL="https://..." \
DECKFORGE_S3_ACCESS_KEY="..." \
DECKFORGE_S3_SECRET_KEY="..." \
DECKFORGE_S3_BUCKET="deckforge" \
DECKFORGE_STRIPE_SECRET_KEY="sk_live_..." \
DECKFORGE_STRIPE_WEBHOOK_SECRET="whsec_..." \
DECKFORGE_ANTHROPIC_API_KEY="sk-ant-..."
# 6. Deploy
fly deploy
# 7. Run database migrations
fly ssh console -C "alembic upgrade head"
# 8. Verify
curl https://deckforge-api.fly.dev/v1/health
Fly.io configuration highlights:
api (uvicorn) + worker (ARQ)# Start all 6 services
docker compose up -d
# Services:
# api - FastAPI + uvicorn (port 8000)
# content-worker - ARQ worker for NL-to-IR generation
# render-worker - ARQ worker for IR-to-PPTX rendering
# postgres - PostgreSQL 16 (port 5432)
# redis - Redis 7 (port 6379)
# minio - MinIO S3-compatible storage (port 9000, console 9001)
# Check service health
docker compose ps
# View API logs
docker compose logs -f api
# Tear down (preserves data volumes)
docker compose down
# Full reset (removes data)
docker compose down -v
| Environment | Provider | Config |
|---|---|---|
| Local dev | MinIO (via Docker Compose) | Default .env.example values |
| Production | Cloudflare R2 | Set S3_ENDPOINT_URL, S3_ACCESS_KEY, S3_SECRET_KEY |
| Production | AWS S3 | Set S3_ENDPOINT_URL to AWS endpoint |
| Fly.io | Fly Tigris | fly storage create, auto-configured |
| Tier | Price | Credits/month | Rate Limit | Best For |
|---|---|---|---|---|
| Starter | Free | 50 | 10 req/min | Evaluation, hobby projects |
| Pro | $79/month | 500 | 60 req/min | Teams, production apps |
| Enterprise | Custom | 10,000+ | 300 req/min | High-volume, overage allowed |
Each API call consumes credits based on complexity:
For autonomous AI agents that prefer pay-per-call over subscriptions:
| Endpoint | USDC Price | Network |
|---|---|---|
/v1/render |
$0.05 | Base L2 |
/v1/generate |
$0.15 | Base L2 |
| Metadata endpoints | Free | -- |
x402 payments bypass rate limiting (per-call payment is self-throttling).
Five production-quality demo IRs in demos/:
| Demo | Slides | Theme | Use Case |
|---|---|---|---|
| McKinsey Strategy | 12 | corporate-blue | Strategy consulting deck |
| PE Deal Memo | 10 | finance-pro | Private equity investment committee |
| Startup Pitch | 12 | modern-gradient | Series A fundraising |
| Board Update | 8 | executive-dark | Quarterly board meeting |
| Product Launch | 10 | tech-neon | Product launch announcement |
Render any demo:
curl -X POST http://localhost:8000/v1/render \
-H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d @demos/mckinsey-strategy/ir.json \
--output mckinsey-strategy.pptx
DeckForge includes a Model Context Protocol server with 6 tools:
{
"mcpServers": {
"deckforge": {
"command": "python",
"args": ["-m", "deckforge.mcp"]
}
}
}
Tools: render, generate, themes, slide_types, estimate, preview
Annotated typesSee demos/ for integration examples.
git checkout -b feature/my-feature)pytest for Python, cd sdk && npm test for TypeScript)DeckForge -- Executive-ready slides, one API call away.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"deckforge": {
"command": "npx",
"args": []
}
}
}Payments, customers, subscriptions
110+ tools for AI agents spanning social media, finance, gaming, music, AU-specific services, and utilities. Zero-config local tools plus platform connectors. n
Unified API hub for AI agents with 56+ tools across travel (Amadeus, Sabre), prediction markets (Polymarket), crypto, and weather. Pay-per-call via x402 micropa
Deploy live HTTPS websites in seconds. Instant subdomains ($1 USDC) or custom .xyz domains ($10 USDC) on Base chain. Templates for crypto tokens and AI agent pr