{"id":50945182,"url":"https://github.com/mizzlelover/content-first-ppt","last_synced_at":"2026-06-17T19:04:57.290Z","repository":{"id":363356801,"uuid":"1262443600","full_name":"mizzlelover/content-first-ppt","owner":"mizzlelover","description":"内容为王的路演 PPT 技能 · 面向 Claude Code / Codex 的 AI Agent Skill。专精产出单文件 HTML：内容超高自动适配绝不裁切，内建常驻面包屑与非线性附录跳转。","archived":false,"fork":false,"pushed_at":"2026-06-08T14:08:08.000Z","size":90,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T16:12:02.034Z","etag":null,"topics":["agent-skill","claude-code","codex","content-first","html-presentation","html-slides","pitch-deck","presentation","python","roadshow","slides"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mizzlelover.png","metadata":{"files":{"readme":"README.en.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-08T01:56:11.000Z","updated_at":"2026-06-08T14:08:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mizzlelover/content-first-ppt","commit_stats":null,"previous_names":["mizzlelover/content-first-ppt"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mizzlelover/content-first-ppt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzlelover%2Fcontent-first-ppt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzlelover%2Fcontent-first-ppt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzlelover%2Fcontent-first-ppt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzlelover%2Fcontent-first-ppt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mizzlelover","download_url":"https://codeload.github.com/mizzlelover/content-first-ppt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzlelover%2Fcontent-first-ppt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34461643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skill","claude-code","codex","content-first","html-presentation","html-slides","pitch-deck","presentation","python","roadshow","slides"],"created_at":"2026-06-17T19:04:56.580Z","updated_at":"2026-06-17T19:04:57.285Z","avatar_url":"https://github.com/mizzlelover.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# roadshow-deck · A content-first deck builder\n\n![License](https://img.shields.io/github/license/mizzlelover/content-first-ppt?style=flat-square)\n![Stars](https://img.shields.io/github/stars/mizzlelover/content-first-ppt?style=flat-square)\n![Skill](https://img.shields.io/badge/Skill-Agent-111111?style=flat-square)\n![Claude Code](https://img.shields.io/badge/Claude%20Code-Supported-6B5B95?style=flat-square)\n![Codex](https://img.shields.io/badge/Codex-Supported-222222?style=flat-square)\n![Output](https://img.shields.io/badge/Output-single--file%20HTML-0A7CFF?style=flat-square)\n\n\u003e 🌏 **中文版：[README.md](./README.md)**\n\nAn AI-agent skill for **Claude Code / Codex** that turns **your own material** into a presentation built **for a specific audience** — one you can actually stand up and deliver. It outputs **one self-contained HTML file** — it specializes in HTML (no PPTX): persistent breadcrumbs, non-linear appendix jumps, and per-slide auto-fit so even dense slides never clip.\n\nMost PPT tools start by picking a good-looking template. This one starts by getting the content right. **Content is the core; visuals are the finish** — even with zero generated images, the typography of the text itself should carry the quality.\n\n\u003e **Design principle**: the most important thing a deck does is **organize the same material differently for different audiences**. Every deck should be content-driven; visuals are only a finishing touch. Get the content right and the audience stops noticing the visuals at all.\n\n---\n\n## Install in 30 seconds\n\nOne command, installed for both Claude Code and Codex (recommended):\n\n```bash\nnpx skills add mizzlelover/content-first-ppt --skill roadshow-deck -a claude-code -a codex\n```\n\nThen just tell your agent:\n\n```text\nTurn this material into a roadshow deck — but first help me pin down who the audience is.\n```\n\n## What makes it different\n\n- **Compute goes into the content first**: it ingests the source in full (every word, mark, and image — no skimming), then models it objectively, *before* any layout.\n- **Audience-adaptive**: it confirms the audience with you up front (big boss / line manager / dept head / group exec / external exec / client operator / engineers…) and re-orders the narrative by what that audience cares about — not just reworded copy.\n- **Problem-first**: it opens with one line that removes the information gap, then unfolds why-now / pain / how / edge / why-you / how-we-work / business-model — in an order that shifts with the audience.\n- **Built for live delivery**: a persistent **breadcrumb** on every page plus **non-linear appendix jump + return** — for when you're interrupted, asked to go deeper, or have more than the body can hold.\n- **Readability-first layout**: large type, high contrast, dense information, **no animation**; font scale is hard-validated, and it splits a page rather than shrinking type.\n- **Single-file HTML, done well**: one self-contained `.html` that opens anywhere and presents offline; **per-slide auto-fit means dense slides scale to fit instead of clipping** (not screenshots of a webpage).\n- **Images optional**: zero-image decks stand on their own; when useful, it calls an image model in one step (provider-agnostic, and it skips silently with no API key).\n\n## Install\n\n### Option 1 — one command (recommended)\n\n```bash\nnpx skills add mizzlelover/content-first-ppt --skill roadshow-deck -a claude-code -a codex\n```\n\n`-a claude-code -a codex` installs for both platforms; omit it to choose interactively. To list the skills in the repo first:\n\n```bash\nnpx skills add mizzlelover/content-first-ppt --list\n```\n\n### Option 2 — paste this to any AI with shell access\n\n\u003e Install the `roadshow-deck` Claude Code skill:\n\u003e 1. Make sure `~/.claude/skills/` exists.\n\u003e 2. `git clone https://github.com/mizzlelover/content-first-ppt.git /tmp/cfp`\n\u003e 3. Copy `/tmp/cfp/roadshow-deck` into `~/.claude/skills/roadshow-deck`.\n\u003e 4. Verify `~/.claude/skills/roadshow-deck/` contains `SKILL.md`, `method/`, `core/`.\n\n### Option 3 — manual\n\nThe skill itself lives in the repo's `roadshow-deck/` subfolder; drop that into your skills directory:\n\n```bash\ngit clone https://github.com/mizzlelover/content-first-ppt.git\ncp -r content-first-ppt/roadshow-deck ~/.claude/skills/roadshow-deck   # Claude Code (user-level)\n# Codex: merge content-first-ppt/roadshow-deck/adapters/codex/AGENTS.md into your project's root AGENTS.md\n```\n\nHTML rendering and validation are **pure standard library — zero dependencies**; no `pip install` after `git clone`. (Only the optional image backends need extra packages.)\n\n### Triggers\n\nOnce installed, Claude Code discovers and invokes it automatically. Common phrasings:\n\n- \"Turn this material into a roadshow deck\"\n- \"Make a slide deck from this document / notes / data\"\n- \"Build a report / proposal / pitch deck\"\n- \"把这份材料做成路演 PPT\"\n\n## Capabilities\n\n- 🧠 **Full ingestion** — reads every word, mark, and image; builds an objective model before touching slides\n- 🎯 **Audience emphasis matrix** — re-orders the story per audience: altitude and resources for execs, capability and delivery for operators\n- 🧭 **Persistent breadcrumb** — small but always-present \"where we are now\" indicator\n- 🔀 **Non-linear appendix** — body pages link out to appendix detail and jump back to where you were\n- 🔠 **Hard readability checks** — font scale, contrast, jump targets, structure; errors must be fixed\n- 🎨 **Content-driven style** — matches one of 7 mainstream styles by domain / audience / data density, not a fixed template\n- 🖼 **Optional images** — OpenAI / Gemini / Stability backends, provider-agnostic, off by default\n- 🛡 **Never clips** — overlong slides auto-fit to one screen; the bottom is never cut off\n- 📄 **Single-file delivery** — one self-contained HTML, opens anywhere, easy to share\n\n## Good fit / not a fit\n\n**✅ Good**: roadshows, fundraising pitches, project reports, proposals, business reviews, explaining a long document or dataset to a specific person.\n\n**❌ Not**: pure art posters, keynote-stage shows that need item-by-item animation, \"just make the webpage pretty\" with no regard for information density.\n\n## Platform support\n\n| Platform | Status | Notes |\n|----------|--------|-------|\n| Claude Code | ✅ Supported | Auto-discovered once in the skills directory; primary target of this release |\n| OpenAI Codex | ✅ Supported | Merge `adapters/codex/AGENTS.md` into your root `AGENTS.md`; includes the optional image flow |\n| Other CLIs / Agents | ⚪ Not officially targeted yet | The skill is host-agnostic (read files + run Python), but this version is tuned and verified only for the two above |\n\n## Workflow\n\nThe skill is a structured protocol the agent runs stage by stage (**the model is the brain; the `core/` scripts are just deterministic hands**):\n\n1. **Ingest in full** — every word and image, nothing dropped (`method/01-ingest.md`)\n2. **Model objectively** — organize the raw material, flag gaps (`02-structure.md`)\n3. **Confirm the audience** — ask about audience and setting, apply the emphasis matrix (`03-audience.md`)\n4. **Problem-first ordering** — sequence by audience, split body vs. appendix (`04-narrative.md`)\n5. **Author pages** — assertion headlines + evidence → `deck.json` (`05-authoring.md`)\n6. **Visual system** — last step, content-driven style / type / light-dark rhythm (`06-visual-system.md`)\n\nThen validate and render with deterministic scripts:\n\n```bash\npython core/build.py validate work/deck.json        # readability + structure checks (must pass)\npython core/build.py html     work/deck.json -o out/ # single-file HTML (-o accepts a dir)\npython core/build.py styles                          # the 7-style library with contrast ratios\npython core/build.py recommend --domain ai --audience technical --density mid  # content → style\n```\n\n## Delivery: a single HTML file\n\n- `out/\u003cname\u003e.html` — single file, self-contained, presents offline: `← →` to page, `Enter` for a quick page index, `Backspace` to return, click \"expand\" to jump to the appendix.\n- **Per-slide auto-fit**: an overlong slide scales to one screen instead of clipping; large type, high contrast, readability first.\n- Double-click to present — no PowerPoint/Keynote needed; easy to share, screenshot, or project.\n\n## Style library (content-driven, not fixed templates)\n\nYou don't pick a skin first. The skill matches a style from content signals (domain / tone / audience / data density), you can override it, and it falls back to `minimal` when signals are weak:\n\n| Style | Tone | Fits |\n|-------|------|------|\n| `swiss` | Grid · sans-serif · single accent · hairlines | tech / engineering / data / design / product |\n| `editorial` | Serif headlines + sans body + mono labels, warm | humanities / brand / culture / media / story |\n| `corporate` | Dark, restrained, authoritative, fine gold accents | business / strategy / finance / management |\n| `consulting` | Light, blue-grey, chart-driven, structured | data / analysis / reports / operations / research |\n| `minimal` | Near black-and-white + single accent, max whitespace | universal, product, the safe default |\n| `tech` | Dark, cool cyan / blue accent, modern product feel | AI / SaaS / startup / launch |\n| `bold` | Heavy type, high contrast, loud emphasis | fundraising / marketing / vision / campaign |\n\n## Images (optional, off by default)\n\nUsed only when they genuinely help, never as decoration. Enable by setting any of `OPENAI_API_KEY` / `GEMINI_API_KEY` / `STABILITY_API_KEY` …; with none set it **skips images and still ships the deck**. It generates text-free concept images by default and overlays text as native blocks to avoid garbled glyphs.\n\n## Repository layout\n\n```\ncontent-first-ppt/\n├── README.md / README.en.md   ← repo intro (zh / en)\n├── LICENSE                     ← AGPL-3.0\n├── CONTRIBUTING.md\n└── roadshow-deck/              ← the skill itself (this is what goes into ~/.claude/skills/)\n    ├── SKILL.md                ← Claude Code entry point\n    ├── method/                 ← methodology (the skill's \"brain\")\n    ├── core/                   ← deterministic rendering (the \"hands\")\n    ├── adapters/codex/         ← Codex integration snippet\n    └── examples/               ← sample deck + one ready-to-open render\n```\n\n## FAQ\n\n**Why HTML-only, no PPTX?** Concentrating on one medium is what lets the layout, whitespace, readability, and the \"never clip\" guarantee get polished. A single HTML file double-clicks into a show, is easy to share, and is the easiest format for an agent to read, edit, and verify. Need a static copy? Print to PDF from the browser.\n\n**Why no animation?** A real roadshow isn't a keynote stage. Content should appear all at once, not fly in item by item; animation is a liability there.\n\n**Can I use it with no images?** Yes. Images are off by default; a zero-image deck should still look sharp on typography alone — that's the whole point.\n\n**Can I change the style?** Yes. Style is auto-recommended; you can also set `meta.style` to one of the 7. See `CONTRIBUTING.md` to add more.\n\n## Contributing\n\nIssues and PRs welcome — new styles, more `method/` methodology, extra validation rules, layout fixes. See [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## License \u0026 author\n\n**AGPL-3.0** © 2026 [**谁是专家 (Who-Is-Expert)**](https://github.com/mizzlelover)\n\nThis skill (the `method/` methodology, the `core/` render pipeline, and the style library) is original work. You may use, modify, and distribute it, but **derivatives — including network-served versions — must also be released under AGPL-3.0 with attribution preserved**. Full terms in [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizzlelover%2Fcontent-first-ppt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmizzlelover%2Fcontent-first-ppt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizzlelover%2Fcontent-first-ppt/lists"}