Run it locally, then point your AI at your deck.
Two buttons. One copies a setup prompt for Claude Code / Cursor / Codex. The other opens the repo on GitHub. Pick whichever path fits.
Clone and run
Paste the prompt below into Claude Code, Cursor, or Codex from any folder β your AI clones the repo, installs dependencies, and starts the dev server. Or do it manually.
Set up the nopoint deck repo locally and start the dev server. Steps: 1. git clone https://github.com/drmrduck/nopoint.git nopoint 2. cd nopoint 3. bun install (fall back to npm install if bun isn't available) 4. cp .env.local.example .env.local 5. bun dev (or: npm run dev) β keep it running in the background 6. Open http://localhost:6829 in my browser when the server says it's ready Then read README.md and AGENTS.md so you have context for what I ask next. Stop and tell me if any step fails β don't fix unrelated issues.
Prefer to run it by hand?
git clone https://github.com/drmrduck/nopoint.git nopoint cd nopoint bun install # or: npm install cp .env.local.example .env.local bun dev # or: npm run dev β http://localhost:6829
Bring your existing deck
We don't process uploads here β the smart move is to attach your source material directly to the AI editor you just started. Drop the prompt below into Claude Code / Cursor / Codex, then attach what you've got. The AI rebuilds the deck from scratch as React components.
PDF, PPTX, Keynote export, or a markdown outline. Drag-drop the file straight into your editor's chat β Claude Code / Cursor / Codex all read attachments natively.
One screenshot per slide, in order. Paste or drag them all in at once. Best route when the source is locked behind a viewer (Pitch, Beautiful, Google Slides without export rights).
I want to recreate my existing pitch deck in this nopoint repo, slide for slide. I'll attach the source in this same chat β either: β’ the original file (PDF, PPTX, Keynote export, or a markdown outline), or β’ a screenshot per slide (paste or drag them in, in slide order). Read whatever I attach. Then: 1. Read AGENTS.md and components/decks/seed-2026/ first β match the SlideDefinition shape, the context field convention, and the 1280Γ720 design canvas rules. 2. Pick a short slug for my deck (ask me if it's not obvious from the title). 3. Create components/decks/<slug>/ with: - slides/index.ts exporting SLIDES: SlideDefinition[] - one component per slide under slides/ - DECK.md (principles, slide plan, hard rules) - REFERENCES.md (citation table β leave entries blank where I need to fill them) 4. Register the deck in components/decks/index.ts. 5. Add the slug to a credential's accessTo array in lib/investors/credentials.server.ts. 6. Open http://localhost:6829/investors/decks/<slug> when ready. Constraints: - Build it from scratch as React components β don't try to embed the source file. The source is reference material only. - Lift the deck's voice and structure; don't pad. Keep slide copy tight. - Author against the 1280Γ720 design canvas. No sm:/md:/lg: breakpoints inside slide components. - For each slide, fill context.nailsThis, context.goals, context.whatItIsNot, context.storyThread honestly. - Stop and ask me before dropping, reordering, or inventing slides.
Or fork a template
Every public deck below is a complete worked example you can copy and rewrite. Open one to see how slides, context, and DECK.md fit together.
Founder-led seed raise. Tight, opinionated, story-first.
Classical narrative arc. Good when investors want the canonical shape.
Stress-test the runtime with something irreverent.
Traction-led. Real example of a deck that closed $500K in 7 days.
Early Airbnb deck recreated. Clean, sparse, market-led.
Bright, off-format. Useful for visual experimentation.
Extending data source pulling
Slides are React components, so a slide can render whatever data you can fetch. Two patterns cover almost everything: a managed embed for charts, or a Node route handler for anything else.

Embeddable charts pulled live from your CRM, warehouse, Stripe or GA, with optional AI commentary (board-style summaries). Drop a <ChartcastrSource> into a slide and it stays current β exports cleanly to PDF / PPTX too.
Set CHARTCASTR_API_KEY in .env.local β grab one at chartcastr.com/admin/settings/api-keys.
It's just Node. Add a route handler under app/api/<source>/route.ts that fetch()es your data, then call it from a Server Component slide. Credentials stay server-side.
// app/api/stripe-mrr/route.ts
export async function GET() {
const r = await fetch('https://api.stripe.com/v1/...', {
headers: { Authorization: `Bearer ${process.env.STRIPE_KEY}` },
next: { revalidate: 300 },
})
const data = await r.json()
return Response.json({ mrr: data.mrr })
}
// components/decks/<deck-id>/slides/mrr-slide.tsx
export async function MrrSlide() {
const { mrr } = await fetch('http://localhost:6829/api/stripe-mrr').then(r => r.json())
return <div className="text-9xl font-bold">${mrr.toLocaleString()}</div>
}Read the conventions
Three short docs cover everything an AI agent needs to author slides without drift.
Host it live
Push to your own GitHub repo, deploy to Vercel or Railway, and put it on a custom domain. No vendor lock-in, no hosted cloud, no per-investor pricing tier.
- Fork & commit
Push your local clone to a private GitHub repo of your own. Decks live in git history β versioned with the rest of your code.
- One-click deploy
Import to Vercel or Railway β both auto-detect Next.js. Set
INVESTOR_SESSION_SECRETin the dashboard and you're live. - Custom domain
Point
decks.yourcompany.comat the deployment. Send investors a link on your own domain β not a shared SaaS host.