An AI-powered application that generates PowerPoint presentations from a template and a topic.
- Template Analysis: Upload your corporate or custom PowerPoint templates.
- AI Research: Automatically researches the provided topic using advanced AI agents.
- Text Input: Transform raw text into structured presentations with AI-powered layout selection.
- Content Generation: Generates slide content structured to fit your template's layout.
- PowerPoint Generation: Produces a downloadable
.pptxfile with preserved formatting. - Preview: Review and edit the generated content before downloading.
- Docker (Recommended)
- Or: Python 3.12+ and Node.js (LTS)
-
Clone the repository.
-
Install dependencies:
mise install
(Or manually install backend dependencies with
uvand frontend withpnpm) -
Setup Git hooks (recommended):
# Install pre-commit hooks (runs on commit) pre-commit install # Install pre-push hooks (runs before push) mise run setup-hooks # or alternatively: ./scripts/setup-git-hooks.sh
Create a .env file in the backend directory based on .env.example:
| Variable | Required | Description | Default |
|---|---|---|---|
WATSONX_API_KEY |
Yes | API Key for IBM watsonx | - |
WATSONX_PROJECT_ID |
Yes | Project ID for IBM watsonx | - |
WATSONX_URL |
Yes | IBM watsonx API endpoint | https://us-south.ml.cloud.ibm.com |
| Variable | Required | Description | Default |
|---|---|---|---|
OPENAI_API_KEY |
No | API Key for OpenAI (alternative provider) | - |
ANTHROPIC_API_KEY |
No | API Key for Anthropic Claude (alternative provider) | - |
GOOGLE_API_KEY |
No | API Key for Google Gemini (alternative provider) | - |
HOST |
No | Server host address | 0.0.0.0 |
PORT |
No | Server port number | 8000 |
DEBUG |
No | Debug mode | false |
CORS_ORIGINS |
No | Allowed CORS origins (comma-separated) | http://localhost:5173 |
MAX_UPLOAD_SIZE |
No | Maximum file upload size (bytes) | 10485760 (10MB) |
RESEARCH_TIMEOUT |
No | Research operation timeout (seconds) | 180 |
LOG_LEVEL |
No | Logging level | INFO |
This project uses the BeeAI Framework, which supports multiple LLM providers.
- Sign up at IBM Cloud
- Create a watsonx.ai project
- Get your API key and Project ID from the credentials page
- Set
WATSONX_API_KEY,WATSONX_PROJECT_ID, andWATSONX_URLin.env
OpenAI:
- Get API key from OpenAI Platform
- Uncomment and set
OPENAI_API_KEYin.env
Anthropic Claude:
- Get API key from Anthropic Console
- Uncomment and set
ANTHROPIC_API_KEYin.env
Google Gemini:
- Get API key from Google AI Studio
- Uncomment and set
GOOGLE_API_KEYin.env
Provider Selection Priority: The system automatically selects the first available provider in this order:
- Claude (if
ANTHROPIC_API_KEYis set) - OpenAI (if
OPENAI_API_KEYis set) - Gemini (if
GOOGLE_API_KEYis set) - IBM watsonx (if
WATSONX_API_KEYis set)
- Start the development servers:
mise run dev
- Open your browser to
http://localhost:5173. - Upload a PowerPoint template (
.pptx). - Select the "Web Search" tab.
- Enter a topic (e.g., "The Future of AI").
- Click "Generate Content".
- Review the proposed slides and click "Download PowerPoint".
- Start the development servers (if not already running).
- Open your browser to
http://localhost:5173. - Upload a PowerPoint template (
.pptx) or use the default template. - Select the "Text Input" tab.
- Paste or type your content (up to 10,000 characters).
- Click "Generate from Text".
- The AI will automatically:
- Structure your content into slides
- Select appropriate layouts for each slide
- Handle text overflow with smart strategies
- Balance Two-Column layouts
- Review the proposed slides and click "Download PowerPoint".
Text Input Features:
- AI Layout Selection: Automatically chooses the best layout type for each slide
- Overflow Management: Detects and resolves text overflow using layout changes, page splits, or summarization
- Two-Column Support: Intelligently creates comparison slides with balanced columns
- Timeout Protection: 60-second processing limit with graceful error handling
- Character Counter: Real-time feedback on text length (0 / 10,000)
- Contributing Guide - Development setup and contribution guidelines
- Architecture - System architecture and design
- Troubleshooting - Common issues and solutions
- Test Coverage: Backend 93%, Frontend 93.47%
- Test Success Rate: 100% (74/74 backend, 24/24 frontend)
- E2E Coverage: 100% (Chromium, Firefox, WebKit)
- Code Quality: A+ (94/100)
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
This project uses a 3-stage quality assurance approach:
Time: 5-15 seconds
Automatically runs on git commit:
- Backend: Ruff linting and formatting
- Frontend: Prettier formatting and ESLint
- General: Trailing whitespace, YAML/JSON validation
Managed by .pre-commit-config.yaml.
Time: 1-3 minutes
Automatically runs on git push:
- Backend: Ruff linting + fast unit tests
- Frontend: TypeScript type checking + tests + build verification
Install: mise run setup-hooks or ./scripts/setup-git-hooks.sh
Manual run: mise run pre-push-check
Skip (not recommended): git push --no-verify
Time: 5-15 minutes
Runs on all branches and pull requests:
- Linting and formatting checks
- Backend: Full test suite + coverage
- Frontend: Full test suite + coverage
- E2E tests (Chromium)
- Build verification
# Test commands
mise run test-fast # Fast unit tests only (1-3 min)
mise run test-full # All tests including integration (5-10 min)
# Check commands
mise run build-check # Verify build works
mise run pre-push-check # Run same checks as pre-push hook
# Setup
mise run setup-hooks # Install git pre-push hooks
# Individual tasks
mise run backend:lint # Lint backend only
mise run backend:test # Test backend only
mise run frontend:lint # Lint frontend only
mise run frontend:test # Test frontend onlyMIT - Copyright (c) 2026 PowerPoint Maker Contributors