AI-native prototype quality toolkit — Agent Skill + review workflow CLI
Project description
fppt
AI-generated decks stop at title-only outlines. fppt is the missing presentation workflow that turns your brief into a presentable, theme-polished deck — with a built-in feedback loop that keeps every iteration sharp. An open-source alternative to Gamma and Beautiful.ai.
The Problem: The "Title-Only Outline" Trap
Asking AI to "make me a deck" always starts promising. It spits out a neat outline in seconds. But that's where it stops.
Because AI lacks presentation design discipline, it fills slides with placeholder titles, reuses the same generic layout for every page, and has no idea what your brand looks like. What you hoped would be a ready-to-present deck becomes a title-only outline — a skeleton you'll have to manually flesh out, design, and polish yourself.
Why does this happen? AI is great at generating structure forward, but has zero taste for visual storytelling. It doesn't know your audience, your brand, or what makes a slide memorable. It's like asking a copy machine to be an art director.
WITHOUT fppt
Prompt: "Make a pitch deck for our SaaS product"
Output: 15 slides, all title-only
Slide 3: "Market Opportunity" ← no data, no chart, no narrative
Slide 7: "Product Demo" ← no screenshots, no flow, no story
Slide 12: "Team" ← just names, no credibility
Result: You spend 6 hours filling content and 3 more making it look decent.
WITH fppt
Prompt: "Make a pitch deck for our SaaS product"
Step 1: MECE outline confirmed with you ✓
Step 2: Every slide filled with claims, data, diagrams, and speaker notes ✓
Step 3: You pick a theme — cyberpunk, executive, or your own brand ✓
Step 4: AI authors a polished, theme-specific presentation UI ✓
Step 5: You review, give feedback, fppt rebuilds — loop until perfect ✓
Result: A presentable deck. From brief to screen. In one workflow.
What fppt Does
fppt transforms your AI from a "slide-title generator" into a complete presentation author. It locks the AI into a structured workflow: confirm the story first, fill every slide with real content, then render it through a visual theme you choose.
Instead of generating a flat list of slide titles, the AI must build a MECE content structure, populate audience-facing material, and produce a theme-authored HTML presentation. fppt then validates, packages, and quality-checks the output — catching empty slides, broken navigation, and missing data before you ever open the file.
flowchart TD
Brief(["Your Brief: topic, audience, goal"]) --> MECE["Step 1: MECE Outline"]
MECE -.->|"Confirm with you"| MECE
MECE --> Content["Step 2: Fill Every Slide"]
Content --> Theme["Step 3: Pick a Theme"]
subgraph "🎨 Theme System"
Theme --> BuiltIn["Built-in: cyberpunk, paper, executive..."]
Theme --> Custom["Custom: your brand, your style"]
end
BuiltIn --> Author["Step 4: AI Authors Presentation UI"]
Custom --> Author
Author --> Validate["Step 5: fppt deck validate"]
Validate -.->|"❌ Errors found"| Content
Validate --> Build["Step 6: fppt deck build"]
Build --> Check{"Step 7: fppt deck check"}
Check -.->|"❌ Fails: missing data, broken nav"| Author
Check -->|"✅ Passes"| Review["Step 8: You Review"]
Review -.->|"🔄 Feedback"| Content
Review -->|"✅ Approved"| Done(["Presentable Deck"])
style Check fill:#ffe6e6,stroke:#ff6b6b,stroke-width:2px
style Theme fill:#e6f0ff,stroke:#4a90d9,stroke-width:2px
Why fppt
For Individuals (Founders, Consultants, Speakers)
You have the point. fppt brings the presentation.
You know your topic cold. What you don't have is 10 hours to design slides. fppt takes your brief, builds a structured narrative, fills every slide with substance, and renders it through a theme you choose. You review, you refine, you present. No design skills required.
For Teams (Brands, Agencies, Developer Advocates)
One brand. One theme. Every deck, every time.
Your team gives talks, pitches clients, and runs webinars. Without a system, every deck looks different — different fonts, different colors, different quality. fppt lets you define your brand as a custom theme once, then every deck your team generates automatically inherits it. Consistency at scale, without a design bottleneck.
Use Cases
Scenario 1: From Brief to Presentable — One Workflow, Zero Design Time
Problem: You have a talk next week. You know the topic, the audience, and the key points. But turning that into a polished deck means: outline → content → design → tweak → export. Each step is a different tool, a different skillset, and hours of manual work.
fppt Solution: You give the AI your brief — topic, audience, goal, must-cover points. The AI proposes a MECE outline for your approval. Once confirmed, it fills every slide with claims, data, Mermaid diagrams, ApexCharts, demo steps, and speaker notes. You pick a theme. The AI authors a complete, theme-polished HTML presentation. From brief to presentable. One workflow. One tool.
Brief: "I need a 20-min investor pitch for our AI devtool startup.
Audience: seed-stage VCs. Must cover: problem, solution,
traction, team, ask."
fppt: MECE outline → you confirm →
18 slides with market data charts, product demo flow,
team credibility matrix, financial projections →
you pick "executive" theme →
AI authors presentation UI →
you review, tweak 2 slides, rebuild →
done. Presentable.
Scenario 2: Your Brand, Your Theme — Define Once, Apply Everywhere
Problem: Your company has a brand guide — specific colors, fonts, logo placement, tone. But every AI-generated deck ignores it. You end up manually restyling every slide, every time. And when your colleague generates a deck? Completely different look. Brand consistency is impossible.
fppt Solution: Create your brand as a custom theme once. Define your color palette, typography, chart style, and layout preferences in a single YAML file. Every deck your team generates — pitch decks, webinars, conference talks, internal reports — automatically renders in your brand. Change the brand color? Update one theme file, rebuild all decks. Consistency at scale.
Step 1: fppt theme create acme-brand --prompt "
Acme Inc brand: deep navy #0A1628, accent coral #FF6B6B,
Inter font family, clean Swiss-design layouts,
data-heavy charts with coral highlights,
minimal animation, board-room confidence."
Step 2: Any deck with themes: [acme-brand] now renders in your brand.
Step 3: Rebrand? Update acme-brand.yaml. Rebuild. Every deck syncs.
Scenario 3: The Feedback Loop — Iterate Without Starting Over
Problem: You review a deck. Slide 5 needs a different chart. Slide 8 is too dense. The CTA on slide 15 is weak. In traditional tools, you manually edit each slide. With AI-generated decks, you usually have to re-prompt and hope it doesn't mess up the rest. There's no structured way to say "fix these three things and leave everything else alone."
fppt Solution: fppt's feedback loop is built into the workflow. Content lives in YAML — the single source of truth. Visual presentation lives in themed HTML. When you give feedback, the AI updates the YAML (for content changes) or the theme/authored UI (for visual changes), then re-validates and rebuilds. Only what changed is affected. The rest stays intact. Iterate until it's right — without starting over.
Review Round 1:
You: "Slide 5: swap bar chart for a trend line.
Slide 8: split into two slides.
Slide 15: stronger CTA, add a quote."
fppt: AI updates deck YAML → validate → rebuild → check.
Only slides 5, 8, 15 change. Everything else untouched.
Review Round 2:
You: "The executive theme feels too cold. Try cyberpunk."
fppt: Swap theme in deck YAML → AI authors new presentation UI →
validate → build → check. Same content, new look.
Review Round 3:
You: "Perfect. Ship it."
fppt: Build static HTML. Ready to share.
Features
- End-to-End Workflow: From brief to presentable deck in one tool. MECE outline → content population → theme selection → AI-authored UI → validate → build → review loop.
- Built-in Theme Library: Start with polished themes — cyberpunk, executive, paper, and more. Each theme defines color systems, typography, chart palettes, Mermaid styles, and animation rhythm.
- Custom Theme System: Define your brand once as a custom theme. Colors, fonts, layout preferences, chart styles — all in a single YAML file. Every deck inherits it. Rebrand by updating one file. Themes live in your workspace (
.fppt/themes/), never mixed into public packages. - MECE Content Structure: AI proposes a mutually exclusive, collectively exhaustive outline before writing a single slide. You confirm the story first, then the AI fills every slide with audience-facing substance.
- AI-Authored Presentation UI: Not a generic YAML renderer. The AI designs a unique, theme-aware HTML presentation with layout systems, motion, diagrams, and charts tailored to your content.
- Dual-Layer Architecture: Theme-neutral Shell (outline, i18n, theme switcher, present mode) + themed Presentation pages. Switch themes without touching content.
- Built-in Quality Gates:
deck validatechecks YAML structure.deck buildpackages deterministically.deck checkverifies data injection, hash navigation, and shell/presentation boundaries. - Iterative Feedback Loop: Content lives in YAML (SSOT). Visuals live in themed HTML. Feedback updates the right layer. Validate → build → check → review. Repeat until perfect.
- Static HTML Delivery: Final output is a self-contained
index.html. No server, no login, no dependencies. Share it, host it, present it anywhere. - Multi-Agent Support: Works with GitHub Copilot, Cursor, Claude Code, OpenCode, and more.
Highlights: The Quality Mechanisms
To keep the AI honest and the output presentable, fppt enforces a structured workflow with automated quality gates at every step.
- 🫂 Human in the Loop: MECE outline, theme selection, and final review all pause for your explicit confirmation. The AI proposes; you decide.
- ✅ Forward Validate:
fppt deck validatechecks YAML structure, slide completeness, diagram references, and theme compatibility before building. - 🔁 Backward Check:
fppt deck checkscans the built HTML for injected data, hash navigation support, shell/presentation boundary violations, and missing slide content after packaging.
Supported Agents
| Agent | Command |
|---|---|
| GitHub Copilot | fppt enable copilot |
| Cursor | fppt enable cursor |
| Claude Code | fppt enable claude |
| Trae IDE | fppt enable trae |
| Qwen Code | fppt enable qwen-code |
| OpenCode | fppt enable opencode |
| OpenClaw | fppt enable openclaw |
| OpenAI Codex | fppt enable codex |
Installation
pip install fppt
Verify:
fppt --version
Quick Start
# 1. Initialize fppt in your project
cd your-talk-project
fppt init
# 2. Install skills into your AI agent
fppt enable copilot # or: cursor, claude, trae, qwen-code, opencode, openclaw
# 3. Prompt your AI Agent
# Just tell it what you want to present (e.g., "Build a pitch deck for our SaaS product").
# The installed fppt skill will guide it through MECE outline → content → theme → build.
# 4. Preview the result
# Open build/<deck-id>/index.html in your browser.
# Use Arrow keys to navigate, click outline to jump, press P for present mode.
Workspace
.fppt/
├─ preference.csv # Your reusable presentation preferences
├─ themes/ # Your custom brand themes
│ └─ acme-brand.yaml
└─ projects/<project>/
├─ project.json
├─ decks/<deck-id>.yaml # Content SSOT (MECE structure)
├─ presentations/<deck-id>/ # AI-authored themed UI
│ ├─ cyberpunk.html
│ └─ executive.html
└─ build/<deck-id>/ # Packaged output
├─ index.html # Neutral shell
├─ manifest.json
└─ presentations/
├─ cyberpunk.html
└─ executive.html
Commands
# Project management
fppt project list
fppt project create my-talk --title "How to Build Agent Skills"
# Preferences
fppt preference list
fppt preference add "Prefer concise slide copy"
# Themes
fppt theme list
fppt theme create acme-brand --prompt "Clean Swiss design, navy and coral"
# Deck workflow
fppt deck init demo --project my-talk
fppt deck validate demo --project my-talk
fppt deck build demo --project my-talk
fppt deck check demo --project my-talk
For Contributors
fppt is fundamentally a tool for Agent Engineering — we welcome contributors looking to expand the theme library, harden validation mechanics, or add support for new AI agents.
Getting Started
# 1. Fork and clone the repository
git clone https://github.com/<your-username>/fppt.git
cd fppt
# 2. Install inside a virtual environment for development
pip install -e ".[test]"
# 3. Run the test suite (fppt maintains 100% coverage)
PYTHONPATH=src pytest --cov=fppt --cov-report=term-missing --cov-fail-under=100
# 4. Want to add a new built-in theme?
# Add your YAML prompt template in: src/fppt/themes/
# 5. Want to add a new AI Agent to `fppt enable`?
# Add yours directly in: src/fppt/skills.py
Star History
License
This project is licensed under the MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fppt-1.0.0.tar.gz.
File metadata
- Download URL: fppt-1.0.0.tar.gz
- Upload date:
- Size: 53.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c69d76b194a9835a52ee9dc937ed86aaad64760c975a649b230f2b9f57fc9d76
|
|
| MD5 |
068139662ad19416f90ee1255dd327df
|
|
| BLAKE2b-256 |
ef23ee196ce2bd8a43ca512e7f5275578d93fe3c56d8c5b0577a18c41813aab7
|
Provenance
The following attestation bundles were made for fppt-1.0.0.tar.gz:
Publisher:
release.yml on lijma/fppt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fppt-1.0.0.tar.gz -
Subject digest:
c69d76b194a9835a52ee9dc937ed86aaad64760c975a649b230f2b9f57fc9d76 - Sigstore transparency entry: 2078641926
- Sigstore integration time:
-
Permalink:
lijma/fppt@9e1d5e0ab602b075c3d3613330fbf4f0f2d2dd64 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/lijma
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9e1d5e0ab602b075c3d3613330fbf4f0f2d2dd64 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fppt-1.0.0-py3-none-any.whl.
File metadata
- Download URL: fppt-1.0.0-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f909e864e74714e057d3af6b71630f481af5c5e954a088ebb146d9ce5b3b86f3
|
|
| MD5 |
9d118e953dc8fbf9e3c58d132ff7519d
|
|
| BLAKE2b-256 |
7fbd5e161719fdb6d25d00a3ec7a8d3155fbe5562fcfdcdef384e0a827f20c2b
|
Provenance
The following attestation bundles were made for fppt-1.0.0-py3-none-any.whl:
Publisher:
release.yml on lijma/fppt
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fppt-1.0.0-py3-none-any.whl -
Subject digest:
f909e864e74714e057d3af6b71630f481af5c5e954a088ebb146d9ce5b3b86f3 - Sigstore transparency entry: 2078641995
- Sigstore integration time:
-
Permalink:
lijma/fppt@9e1d5e0ab602b075c3d3613330fbf4f0f2d2dd64 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/lijma
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9e1d5e0ab602b075c3d3613330fbf4f0f2d2dd64 -
Trigger Event:
push
-
Statement type: