Claude-skill-registry gamma-sdk-patterns
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/gamma-sdk-patterns" ~/.claude/skills/majiayu000-claude-skill-registry-gamma-sdk-patterns && rm -rf "$T"
manifest:
skills/data/gamma-sdk-patterns/SKILL.mdsource content
Gamma SDK Patterns
Overview
Learn idiomatic patterns and best practices for the Gamma SDK to build robust presentation automation.
Prerequisites
- Completed
setupgamma-local-dev-loop - Familiarity with async/await patterns
- TypeScript recommended
Instructions
Pattern 1: Client Singleton
// lib/gamma.ts import { GammaClient } from '@gamma/sdk'; let client: GammaClient | null = null; export function getGammaClient(): GammaClient { if (!client) { client = new GammaClient({ apiKey: process.env.GAMMA_API_KEY, timeout: 30000, retries: 3, }); } return client; }
Pattern 2: Presentation Builder
// lib/presentation-builder.ts import { getGammaClient } from './gamma'; interface SlideContent { title: string; content: string; layout?: 'title' | 'content' | 'image' | 'split'; } export class PresentationBuilder { private slides: SlideContent[] = []; private title: string = ''; private style: string = 'professional'; setTitle(title: string): this { this.title = title; return this; } addSlide(slide: SlideContent): this { this.slides.push(slide); return this; } setStyle(style: string): this { this.style = style; return this; } async build() { const gamma = getGammaClient(); return gamma.presentations.create({ title: this.title, slides: this.slides, style: this.style, }); } }
Pattern 3: Error Handling Wrapper
// lib/safe-gamma.ts import { GammaError } from '@gamma/sdk'; export async function safeGammaCall<T>( fn: () => Promise<T> ): Promise<{ data: T; error: null } | { data: null; error: string }> { try { const data = await fn(); return { data, error: null }; } catch (err) { if (err instanceof GammaError) { return { data: null, error: err.message }; } throw err; } }
Pattern 4: Template Factory
// lib/templates.ts type TemplateType = 'pitch-deck' | 'report' | 'tutorial' | 'proposal'; const TEMPLATES: Record<TemplateType, object> = { 'pitch-deck': { slides: 10, style: 'bold' }, 'report': { slides: 15, style: 'professional' }, 'tutorial': { slides: 8, style: 'friendly' }, 'proposal': { slides: 12, style: 'corporate' }, }; export function fromTemplate(type: TemplateType, title: string) { return { ...TEMPLATES[type], title }; }
Output
- Reusable client singleton
- Fluent builder pattern
- Type-safe error handling
- Template factory system
Error Handling
| Pattern | Use Case | Benefit |
|---|---|---|
| Singleton | Multiple modules | Consistent config |
| Builder | Complex presentations | Readable code |
| Safe Call | Error boundaries | Graceful failures |
| Factory | Repeated templates | DRY code |
Resources
Next Steps
Proceed to
gamma-core-workflow-a for presentation generation workflows.