Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ATTRIBUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The following public projects informed parts of the workflow or terminology. The
- AntV chart visualization skills: https://github.com/antvis/chart-visualization-skills
- AntV visualisation ecosystem concepts: https://antv.vision/
- Octagon Financial Skills: https://github.com/OctagonAI/skills
- Teacher PPTX Designer: original predecessor workflow by Tariq Said
- Teacher PPTX Designer: original predecessor workflow by Tariq Said, used as the education-focused foundation for this broader presentation skill.

## Attribution Policy

Expand Down
22 changes: 8 additions & 14 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,14 @@
## [1.0.0] - 2026-05-16

### Added
- Added Claude-focused distribution package under `dist/claude/`.
- Added `presentation-pro-designer.skill` for Claude environments that support custom Skill uploads.
- Added Claude package documentation:
- `00_START_HERE.txt`
- `INSTALLATION.txt`
- `CLAUDE_GUIDE.md`
- `SKILL_SUMMARY.md`
- `README.md`
- Added `THIRD_PARTY_NOTICES.md` for public attribution and license notes.
- Added platform guidance distinguishing ChatGPT ZIP, Claude Skill package, Gemini instructions, IDE agent usage, and CLI usage.

### Fixed
- Clarified package usage by platform.
- Avoided implying that financial data or external APIs are used by default.
- First public release.
- Multi-platform presentation design Skill.
- ChatGPT Skill ZIP package.
- Claude-focused `.skill` package.
- CLI routing, planning, validation, package export, `which-file`, and `validate-dist`.
- Prompt library examples.
- Platform support documentation.
- Attribution and notice files.

---

Expand Down
1 change: 1 addition & 0 deletions NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ The following third-party or external projects informed parts of the workflow, s

**Project / source:** Octagon financial skill examples and financial analyst workflow concepts
**Repository:** https://github.com/OctagonAI/skills

**Use in this project:** Conceptual inspiration for investor-deck sections, financial-analysis routing, income statement, balance sheet, financial growth, analyst estimates, financial health scores, peer analysis, valuation, and risk sections.
**Bundled code:** No.
**Bundled financial data:** No.
Expand Down
82 changes: 36 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,19 +168,19 @@ presentation-pro-designer/
│ └── source-governance.md
├── examples/
│ ├── README.md # This file
│ ├── prompt-library/ # Comprehensive prompt templates
│ ├── business-proposal-full.md
│ ├── corporate-company-profile-full.md
│ ├── data-report-deck-full.md
│ ├── education-lesson-full.md
│ ├── education-workshop-full.md
│ ├── generic-presentation-full.md
│ ├── improve-existing-pptx-full.md
│ ├── investor-public-company-deck-full.md
│ ├── investor-startup-deck-full.md
│ ├── product-service-full.md
│ ├── prompt-index.md
│ └── verification-profile-claim-full.md
│ └── prompt-library/ # Comprehensive prompt templates
│ ├── prompt-index.md
│ ├── education-lesson-full.md
│ ├── education-workshop-full.md
│ ├── corporate-company-profile-full.md
│ ├── business-proposal-full.md
│ ├── product-service-full.md
│ ├── verification-profile-claim-full.md
│ ├── investor-startup-deck-full.md
│ ├── investor-public-company-deck-full.md
│ ├── data-report-deck-full.md
│ ├── improve-existing-pptx-full.md
│ └── generic-presentation-full.md
├── cli/
│ ├── presentation_pro_cli.py
│ ├── router.py
Expand Down Expand Up @@ -242,40 +242,22 @@ Suggested files:
examples/
├── README.md # This file
└── prompt-library/ # Comprehensive prompt templates
├── business-proposal-full.md
├── corporate-company-profile-full.md
├── data-report-deck-full.md
├── prompt-index.md
├── education-lesson-full.md
├── education-workshop-full.md
├── generic-presentation-full.md
├── improve-existing-pptx-full.md
├── investor-public-company-deck-full.md
├── investor-startup-deck-full.md
├── corporate-company-profile-full.md
├── business-proposal-full.md
├── product-service-full.md
├── prompt-index.md
└── verification-profile-claim-full.md
├── verification-profile-claim-full.md
├── investor-startup-deck-full.md
├── investor-public-company-deck-full.md
├── data-report-deck-full.md
├── improve-existing-pptx-full.md
└── generic-presentation-full.md
```

See [examples/README.md](examples/README.md) for detailed guidance on using each prompt.

## Which File Should I Use?

Choose the right file or folder based on your platform:

| Target | File / Folder |
|---|---|
| **ChatGPT Skills** | `dist/presentation-pro-designer-skill.zip` (export with CLI) or create from `skills/presentation-pro-designer/` |
| **Claude local Skills** | `skills/presentation-pro-designer/` copied into your Claude skills directory |
| **Claude Code / IDE Agents** | Full repository as local context or as a project directory |
| **Gemini Gems** | `skills/presentation-pro-designer/agents/gemini.md` as Gem instructions |
| **VS Code Agents** | `skills/presentation-pro-designer/agents/vscode.md` or full repository |
| **Cursor / Windsurf** | Full repository or `skills/presentation-pro-designer/agents/generic-agent.md` |
| **Antigravity** | `skills/presentation-pro-designer/agents/antigravity.md` |
| **Generic AI Agents** | `skills/presentation-pro-designer/SKILL.md` as instructions + reference files |
| **CLI** | Repository root (run commands from here) |

---

## Quick Start

### Option 1: Use a Prompt Template
Expand Down Expand Up @@ -347,7 +329,15 @@ Run from the repository root:
python -m cli.presentation_pro_cli route examples/corporate-profile.md
python -m cli.presentation_pro_cli plan examples/investor-deck.md --type investor_deck
python -m cli.presentation_pro_cli validate-repo .
python -m cli.presentation_pro_cli export-skill --output dist/presentation-pro-designer-skill.zip
python -m cli.presentation_pro_cli export-skill --target chatgpt
```

Default output: `dist/skill.zip`

Advanced (custom output path):

```bash
python -m cli.presentation_pro_cli export-skill --output dist/skill.zip
```

### CLI Commands
Expand Down Expand Up @@ -412,9 +402,11 @@ presentation-pro-designer/SKILL.md
If using the provided CLI:

```bash
python -m cli.presentation_pro_cli export-skill --output dist/skill.zip
python -m cli.presentation_pro_cli export-skill --target chatgpt
```

Do not upload the Claude `.skill` package to ChatGPT unless ChatGPT explicitly supports that format. For ChatGPT, use `dist/skill.zip`.

## Which File Should I Use?

| Target | Use |
Expand All @@ -440,8 +432,6 @@ dist/claude/CLAUDE_GUIDE.md

See [`docs/platform-support.md`](docs/platform-support.md) for detailed platform instructions.

For detailed platform setup, see `docs/platform-support.md`.

For Claude-specific packaged distribution files, see `dist/claude/`.

Supported usage patterns include:
Expand Down Expand Up @@ -497,7 +487,7 @@ python -m cli.presentation_pro_cli validate-repo .
Export the standalone skill:

```bash
python -m cli.presentation_pro_cli export-skill --output dist/presentation-pro-designer-skill.zip
python -m cli.presentation_pro_cli export-skill --target chatgpt
```

## Roadmap
Expand All @@ -516,7 +506,7 @@ Planned improvements:

## License

MIT License. See [`LICENSE`](LICENSE) and [`NOTICE.md`](NOTICE.md).
MIT License. See [`LICENSE.md`](LICENSE.md) and [`NOTICE.md`](NOTICE.md).

Copyright (c) 2026 Tariq Said.

Expand Down
Binary file modified cli/__pycache__/presentation_pro_cli.cpython-312.pyc
Binary file not shown.
7 changes: 6 additions & 1 deletion cli/presentation_pro_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,16 @@ def cmd_plan(args):

def cmd_validate_repo(args):
errors = []
required = ["README.md", "LICENSE", "NOTICE.md", "skill.json", "marketplace.json", "skills/presentation-pro-designer/SKILL.md"]
root = Path(args.path)

required = ["README.md", "NOTICE.md", "skill.json", "marketplace.json", "skills/presentation-pro-designer/SKILL.md"]
for rel in required:
if not (root/rel).exists():
errors.append(f"Missing {rel}")

if not ((root / "LICENSE.md").exists() or (root / "LICENSE").exists()):
errors.append("Missing LICENSE.md (or legacy LICENSE)")

if errors:
print("Repository validation failed:")
for e in errors: print(f"- {e}")
Expand Down
2 changes: 1 addition & 1 deletion examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ You can copy any full prompt and:

## 📝 License

These examples and prompts are part of the Presentation Pro Designer skill and are available under the MIT License. See [LICENSE](../LICENSE) for details.
These examples and prompts are part of the Presentation Pro Designer skill and are available under the MIT License. See [LICENSE.md](../LICENSE.md) for details.

---

Expand Down
1 change: 1 addition & 0 deletions skills/presentation-pro-designer/scripts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Helper scripts for deterministic tasks:
- `clean.py`: clean unused parts from unpacked PPTX folders after low-level edits.
- `add_slide.py`: duplicate or add slides in an unpacked PPTX workflow.
- `route_request.py`: classify prompt text into a presentation route.
- `TEST_CASES.json`: baseline routing fixtures for manual regression checks.
- `deck_manifest.py`: generate a reusable deck manifest from route output.
- `validate_skill.py`: lightweight local skill-folder validation.

Expand Down
12 changes: 12 additions & 0 deletions skills/presentation-pro-designer/scripts/TEST_CASES.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"name": "Corporate company profile routes to corporate",
"input": "Create a corporate company profile presentation for stakeholders, covering company overview, services, capabilities, and digital presence.",
"expected_type": "corporate"
},
{
"name": "Explicit investor language routes to investor_deck",
"input": "Create an investor pitch deck for a Series A fundraising round including traction, valuation, and equity story.",
"expected_type": "investor_deck"
}
]
92 changes: 88 additions & 4 deletions skills/presentation-pro-designer/scripts/route_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,85 @@

ROUTES = {
"education": ["lesson", "students", "learning objective", "syllabus", "classroom", "retrieval", "exit ticket", "teacher", "cpd", "workshop", "curriculum"],
"corporate": ["company profile", "corporate", "stakeholder", "leadership", "internal update", "capabilities", "business overview"],
"corporate": [
"corporate",
"company profile",
"company overview",
"business overview",
"stakeholder",
"stakeholders",
"capabilities",
"services",
"service portfolio",
"about us",
"who we are",
"what we do",
"internal update",
"leadership update",
"company introduction",
],
"business_proposal": ["proposal", "scope", "deliverables", "client", "partnership", "implementation plan", "commercial"],
"product_service": ["product", "service", "saas", "platform", "feature", "demo", "use case"],
"verification_profile_claim": ["verification", "claim", "domain ownership", "profile", "official email", "tracxn", "ownership proof"],
"investor_deck": ["investor", "investors", "investment", "pitch deck", "fundraising", "valuation", "market size", "ticker", "eps", "revenue growth", "target price", "financials", "ask"],
"investor_deck": [
"investor",
"investment",
"pitch deck",
"fundraising",
"raise",
"series a",
"seed round",
"pre-seed",
"valuation",
"traction",
"vc",
"venture capital",
"equity",
"investment committee",
"public company",
"ticker",
"eps",
"ebitda",
"target price",
"analyst estimate",
],
"data_report": ["kpi", "metrics", "dashboard", "performance", "trend", "analysis", "chart", "data report"],
"pptx_editing": ["edit", "redesign", "improve attached", "existing pptx", "template"],
}

EXPLICIT_INVESTOR_TERMS = {
"investor",
"investment",
"pitch deck",
"fundraising",
"raise",
"series a",
"seed round",
"pre-seed",
"valuation",
"traction",
"vc",
"venture capital",
"equity",
"investment committee",
"public company",
"ticker",
"eps",
"ebitda",
"target price",
"analyst estimate",
}

CORPORATE_PROFILE_TERMS = {
"company profile",
"corporate",
"company overview",
"business overview",
"services",
"capabilities",
"stakeholders",
}

REFERENCE_MAP = {
"education": ["education_decks.md", "brand_theme_protocol.md", "qa_checklists.md"],
"corporate": ["corporate_decks.md", "brand_theme_protocol.md", "qa_checklists.md"],
Expand All @@ -35,10 +105,24 @@ def classify(text: str) -> dict:
hits = []
for kw in keywords:
if kw in hay:
score += 3 if route == "investor_deck" and kw in ["investor", "investors", "investment", "fundraising", "valuation", "financials", "ask"] else (2 if " " in kw else 1)
if route == "investor_deck" and kw in EXPLICIT_INVESTOR_TERMS:
score += 2
elif route == "corporate" and kw in CORPORATE_PROFILE_TERMS:
score += 2
else:
score += 2 if " " in kw else 1
hits.append(kw)
scores[route] = (score, hits)
route, (score, hits) = max(scores.items(), key=lambda kv: kv[1][0])

has_explicit_investor_signal = any(term in hay for term in EXPLICIT_INVESTOR_TERMS)
has_corporate_profile_signal = any(term in hay for term in CORPORATE_PROFILE_TERMS)

if has_corporate_profile_signal and not has_explicit_investor_signal:
route = "corporate"
score, hits = scores[route]
else:
route, (score, hits) = max(scores.items(), key=lambda kv: kv[1][0])

if score == 0:
route = "generic_presentation"
hits = []
Expand Down
Loading