Back to skills
SkillHub ClubAnalyze Data & AIFull StackFrontendData / AI

pitch-deck-generator

Guides through AI pitch deck generation workflow and troubleshooting. Use when creating pitch decks, debugging wizard errors, troubleshooting Edge Functions, or working with the PitchDeckWizard component.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
0
Hot score
74
Updated
March 20, 2026
Overall rating
C0.8
Composite score
0.8
Best-practice grade
A92.0

Install command

npx @skill-hub/cli install amo-tech-ai-medellin-spark-pitch-deck-generator
pitch-decktroubleshootingreactsupabaseopenai

Repository

amo-tech-ai/medellin-spark

Skill path: .claude/archive/skills/pitch-deck-generator

Guides through AI pitch deck generation workflow and troubleshooting. Use when creating pitch decks, debugging wizard errors, troubleshooting Edge Functions, or working with the PitchDeckWizard component.

Open repository

Best for

Primary workflow: Analyze Data & AI.

Technical facets: Full Stack, Frontend, Data / AI.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: amo-tech-ai.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install pitch-deck-generator into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/amo-tech-ai/medellin-spark before adding pitch-deck-generator to shared team environments
  • Use pitch-deck-generator for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: pitch-deck-generator
description: Guides through AI pitch deck generation workflow and troubleshooting. Use when creating pitch decks, debugging wizard errors, troubleshooting Edge Functions, or working with the PitchDeckWizard component.
version: 1.0.0
---

# Pitch Deck Generator Skill

## Purpose
Guide Claude through the pitch deck generation workflow using the project's architecture (React + Supabase + OpenAI Edge Functions).

---

## Architecture Overview

**Frontend**: `/src/pages/PitchDeckWizard.tsx`
**Backend**: `/supabase/functions/pitch-deck-assistant/index.ts`
**Database**: `pitch_conversations` table (stores chat history)
**Tables**: `presentations`, `profiles`, `pitch_conversations`

---

## Workflow Steps

### 1. User Journey
```
User → Chat Interface → Edge Function → OpenAI API → Stream Response
     ↓
Progress Tracking (0-100%)
     ↓
Generate Deck Button (appears at 80%+)
     ↓
Create Presentation → Redirect to /presentations/{id}/outline
```

### 2. Key Files to Check

**Frontend Chat**:
- `src/pages/PitchDeckWizard.tsx` - Main wizard interface
- `src/hooks/usePresentations.ts` - Data fetching logic

**Backend**:
- `supabase/functions/pitch-deck-assistant/index.ts` - Chat endpoint
- `supabase/functions/generate-pitch-deck/index.ts` - Deck generation

**Database**:
- `pitch_conversations` - Stores chat progress
- `presentations` - Stores generated decks

---

## Common Issues & Fixes

### Issue 1: AI Not Responding
**Symptom**: Chat message sent but no response
**Check**:
```bash
# Verify Edge Function is deployed
supabase functions list | grep pitch-deck-assistant

# Check function logs
supabase functions logs pitch-deck-assistant --tail
```
**Fix**: Redeploy if not active
```bash
cd supabase/functions/pitch-deck-assistant
supabase functions deploy pitch-deck-assistant
```

### Issue 2: Progress Not Updating
**Symptom**: Progress bar stuck at same percentage
**Check Database**:
```sql
SELECT id, completeness, collected_data
FROM pitch_conversations
ORDER BY created_at DESC LIMIT 1;
```
**Fix**: Ensure `completeness` field updates in Edge Function

### Issue 3: Generate Button Not Appearing
**Symptom**: Chat completes but no button
**Check**:
- Frontend: `PitchDeckWizard.tsx` line ~120 (button visibility logic)
- Condition: `completeness >= 80`
**Fix**: Verify progress reaches 80%+ in database

### Issue 4: RLS Policy Blocking Access
**Symptom**: 401 errors when fetching presentations
**Check**:
```sql
-- Verify RLS is enabled
SELECT tablename, rowsecurity FROM pg_tables
WHERE tablename = 'presentations';

-- Check if presentation is public or owned by user
SELECT id, is_public, profile_id
FROM presentations
WHERE id = '{presentation_id}';
```
**Fix**: Set `is_public = true` for test presentations

---

## Testing Checklist

### Quick Test (2 minutes)
```bash
# 1. Start dev server
pnpm dev

# 2. Navigate to wizard
# http://localhost:8080/pitch-deck-wizard

# 3. Send test message
# "I want to create a pitch deck for TestCorp, an AI company"

# 4. Verify response appears
# ✅ AI responds
# ✅ Progress bar updates
# ✅ No console errors
```

### Full E2E Test (5 minutes)
1. Open wizard: `/pitch-deck-wizard`
2. Complete conversation (3-4 messages)
3. Verify progress reaches 80%+
4. Click "Generate Deck"
5. Wait for redirect to `/presentations/{id}/outline`
6. Verify all 10 slides render

---

## Edge Function Structure

### Request Format
```json
{
  "conversationId": "uuid",
  "message": "User message text",
  "messages": [
    {"role": "user", "content": "Previous message"},
    {"role": "assistant", "content": "Previous response"}
  ]
}
```

### Response Format (Streaming)
```typescript
data: {"type":"progress","completeness":20,"message":"AI response chunk"}
data: {"type":"message","content":"More text"}
data: {"type":"complete"}
```

---

## Environment Variables

**Required in Edge Function** (Supabase secrets):
- `OPENAI_API_KEY` - OpenAI API key
- `SUPABASE_URL` - Project URL
- `SUPABASE_ANON_KEY` - Public key

**Check secrets**:
```bash
supabase secrets list
```

**Set secret**:
```bash
supabase secrets set OPENAI_API_KEY=sk-...
```

---

## Debugging Commands

### Check Edge Function Status
```bash
supabase functions list
```

### View Live Logs
```bash
supabase functions logs pitch-deck-assistant --tail
```

### Test Edge Function Directly
```bash
curl -X POST \
  "https://dhesktsqhcxhqfjypulk.supabase.co/functions/v1/pitch-deck-assistant" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${SUPABASE_ANON_KEY}" \
  -d '{"message":"Test message"}'
```

### Check Database State
```sql
-- Latest conversations
SELECT id, completeness, created_at
FROM pitch_conversations
ORDER BY created_at DESC LIMIT 5;

-- Recent presentations
SELECT id, title, created_at
FROM presentations
ORDER BY created_at DESC LIMIT 5;
```

---

## Performance Optimization

### Frontend
- Use React.memo for chat messages
- Debounce progress updates (max 1/second)
- Stream responses (don't wait for complete response)

### Backend
- Use OpenAI streaming API
- Return chunks immediately (don't buffer)
- Update database in background

### Database
- Add index on `pitch_conversations.profile_id`
- Add index on `presentations.profile_id`

---

## Security Checklist

- [ ] RLS enabled on `pitch_conversations` ✅
- [ ] RLS enabled on `presentations` ✅
- [ ] API keys only in Edge Functions (never frontend) ✅
- [ ] User can only access own conversations ✅
- [ ] Public presentations accessible to all ✅

---

## Quick Reference

**Start Development**:
```bash
pnpm dev
```

**Deploy Edge Function**:
```bash
supabase functions deploy pitch-deck-assistant
```

**Check Logs**:
```bash
supabase functions logs pitch-deck-assistant --tail
```

**Test Locally**:
- Open: http://localhost:8080/pitch-deck-wizard
- Send message
- Verify response

---

*This skill guides Claude through the complete pitch deck generation workflow, from frontend to backend to database.*
pitch-deck-generator | SkillHub