Context > Templates: How I Built a Presentation Generator That Reads Your Data
Everyone has slide templates. Nobody uses them. I built something different: a system that pulls from 7 live data sources — call recordings, CRM, marketplace data, case studies, team headshots, brand assets — and generates presentations, business reviews, one-pagers, and case studies that know your customers by name. 10,000+ slides generated and counting.
The Insight: Templates Are Dead Weight
I had access to beautiful slide templates. Somebody spent weeks designing them. They sat in a shared drive, untouched.
The problem wasn't design. It was effort. A sales rep has a call with a prospect in 20 minutes. They need a tailored pitch deck with that prospect's industry, their specific pain points from the last call, relevant case studies from similar companies, and up-to-date metrics. Filling in a template takes an hour. So they wing it.
The insight that changed everything: the value isn't in the template. It's in the context. A mediocre-looking deck filled with the right customer data beats a gorgeous template filled with generic lorem ipsum. Every time.
So I stopped trying to build better templates and started building a system that knows things about each customer.
What It Actually Does
The system generates branded HTML presentations using reveal.js. But that's the boring part. The interesting part is what gets injected into the AI prompt before generation:
Call Recordings
Up to 5 recent calls fetched in parallel. 20K-word transcripts injected for context. The AI extracts pain points, objections, and decisions.
CRM Data
Live account data: MRR, health score, lifecycle phase, industry, company size, contract dates. Pulled at generation time, always current.
Marketplace Stats
30-day performance metrics: clickthrough rates, conversion rates, payout trends. Real numbers for business reviews and performance reviews.
Resource Library
424 articles indexed with semantic search. The AI suggests relevant case studies and resources by similarity score.
Brand Assets
175 web-optimized images on CDN. Logos, icons, screenshots, team photos. All available for slide embedding.
Partner Database
113 known agency partners cross-referenced. If the prospect works with a known partner, the system surfaces relevant talking points.
Team Data
Role detection, headshots, names. Auto-populates "Your team" slides and personalizes content based on presenter role (different roles).
When a rep asks for a pitch deck, the system doesn't start from a blank template. It starts from everything known about that account and works backward to the slides.
Beyond Presentations: The Use Cases Nobody Expected
I built this for pitch decks. It grew. The same context injection engine powers:
Quarterly Business Reviews
business reviews are the killer use case. A business review template with placeholder charts is useless. A business review with the customer's actual 6-month payout trends, their MRR trajectory, their call transcript highlights, and their performance compared to similar accounts — that's a meeting that drives action.
The business review template auto-populates 10 slides with live CRM data. The rep doesn't fill in a single field. They generate, review, and present. Total prep time: 5 minutes.
Case Studies
This one surprised me. A case study is just a presentation with a different structure: problem → solution → results. The same data sources work perfectly:
- Problem: Pulled from call transcripts — the AI finds the customer's original pain points from their first calls
- Solution: Pulled from feature usage data and implementation notes
- Results: Pulled from CRM metrics — MRR growth, conversion improvement, retention rates
The rep picks a customer, selects "Case Study" template, and gets a draft with real numbers and real quotes from real calls. No interviewing the customer. No waiting 3 weeks for marketing to write it.
One-Pagers
A single-slide summary for a specific prospect: their industry context, relevant product features, and a proof point from a similar customer. Sales reps send these before discovery calls to demonstrate they've done their homework.
Feature Walkthroughs
11-slide deep dives on specific product capabilities. The AI pulls relevant screenshots and documentation, then structures a walkthrough that matches the customer's use case rather than a generic product tour.
Internal All-Hands
Team leads submit metrics via a form, the system generates a branded "State of the Team" deck with 44 headshots auto-embedded, charts, and spotlight sections. No designers needed. The first one shipped for a company-wide all-hands meeting.
Upsell Pitches
Product-specific pitch decks (there are 6 product-line templates) that auto-inject the customer's current usage data alongside the upgrade benefits. The AI frames the upsell in terms of what the customer is already doing, not generic feature lists.
The Prompt Architecture
The core of the system is a ~300-line system prompt that gets injected into every generation. It contains:
- Brand rules — colors, fonts, logo placement, slide dimensions
- Component vocabulary — 10 slide types the AI can use (title-slide, card-grid, stat-grid, split-layout, screenshot-slide, fragment-list, section-break, interactive, timelapse, code-slide)
- Template structure — locked sections that must be preserved, flexible sections the AI can modify
- Data context — all 7 sources, injected dynamically per generation
- Role personalization — different context for different stakeholder roles
- Vertical keywords — industry-specific stats and talking points triggered by keywords (e.g., "eCommerce" triggers conversion optimization stats)
I inject context through system prompts, not separate templates. This means personalization is additive: team context + vertical context + account data + call insights all layer on top of each other. 21 templates × 7 data sources × role variations = thousands of possible outputs from a single architecture.
Template Guardrails
Templates have locked sections — slides that must appear in every deck. The AI prompt includes "preserve required sections" guidance, but it's a soft nudge rather than a hard constraint. The AI can rewrite content within locked slides but can't remove them.
This solved a real problem: early versions let the AI restructure everything, and it would occasionally drop the CTA slide or the pricing section — exactly the slides the rep needed most.
Editing by Title, Not Number
After generation, reps can edit individual slides via chat: "make the ROI slide more aggressive" or "add a competitive comparison to the features section." The system matches by slide title, not position number. This means edits still work after slides are reordered.
The Prospect Tracking Layer
Generated decks can be shared via a public link. When a prospect opens it, I track:
- Slide-by-slide dwell time — which slides hold attention, which get skipped
- Total viewing time — with safeguards: 1-hour cap per slide, tab visibility detection, 2-hour session expiry
- Device and location — who's looking at it and from where
- Click tracking — which links within slides get clicked
- Feedback widget — "Was this helpful?" at the end of the deck
The analytics panel shows time-per-slide charts, so the rep knows exactly which topics the prospect cared about before the next call. "I noticed you spent 3 minutes on the integration slide — want to dive deeper on that?"
I learned hard lessons here: the first version had no dwell time caps, and I accumulated 8,659 junk rows from tabs left open overnight. Five safeguards later (accumulator reset, 1-hour cap, tab visibility pause, 2-hour session expiry, server-side guard), the data is clean.
The Stack
Frontend: React + Vite + TypeScript + Tailwind
Presentations: reveal.js (HTML slides, 10 component types, responsive breakpoints)
AI: Gemini Pro (generation), Gemini Flash (editing)
Data: Supabase Postgres + Edge Functions + CDN (175 brand assets)
CRM Integration: Live queries to CRM + call recording platforms
Hosting: Vercel (internal app + public viewer on separate domain)
Tracking: Slide-level dwell time, click tracking, feedback collection
Templates: 21 templates in 5 groups (Sales, CS/AM, Upsell, Marketing, General)
Role-based access: Each role sees only relevant templates
What I Learned
1. Context injection > few-shot examples
I tried fine-tuning. I tried few-shot prompting with example slides. Both were worse than just injecting the customer's actual data into the system prompt. The AI is already good at making presentations. What it's missing is information about this specific customer. Give it that, and the output quality jumps dramatically.
2. Structured data hallucinates; narrative data doesn't
When I inject call transcripts, the AI extracts insights accurately. When I inject numerical metrics (MRR, conversion rates), it occasionally invents numbers or misattributes them. The fix: for structured data, I generate slides programmatically (real HTML with real numbers), then let the AI fill in the narrative sections around them. Hybrid generation — programmatic where precision matters, AI where creativity matters.
3. Role-based visibility reduces cognitive load
CS reps don't need sales templates. Sales reps don't need business review templates. Showing everyone everything led to choice paralysis. Role-based filtering (detected from the user's profile) cut template selection time in half.
4. Dwell time tracking needs guardrails from day one
I shipped tracking without caps and got 8,659 rows of garbage data (tabs left open, browser crawlers, duplicate sessions). Build the safeguards before launch, not after. Five rules: accumulator reset on slide change, 1-hour max per slide, tab visibility detection, 2-hour session expiry, server-side sanity check.
5. Locked sections prevent the worst AI mistakes
The AI will occasionally decide that a pricing slide "doesn't fit the flow" and remove it. Or it'll merge two sections into one, losing the CTA. Locked sections (soft constraint in the prompt) solved this with zero additional code — just a line in the system prompt.
6. The real product is the data layer, not the slides
The presentations are the output. But the product is the data layer: 7 live sources, constantly updated, queryable by the AI at generation time. Once you have that layer, presentations are just one output format. Case studies, one-pagers, email drafts, meeting prep notes — they all come from the same data. The slide generator is just the first interface.
"I used to spend an hour prepping for business reviews. Now I spend 5 minutes reviewing what the system generated. And the deck is better than anything I made manually."
— a customer success manager, after using the system for 3 months
What's Next
The architecture is proven. The roadmap is about expanding the output formats:
- PDF export — one-click download for offline sharing
- Email draft generation — same data layer, different output format
- Programmatic generation for metrics-heavy content — no AI for numbers, AI for narrative
- Vertical benchmarks — "here's how you compare to other companies in your industry"
(I use Brain Kit to track insights like these across sessions — the architecture decisions, prompt patterns, and lessons learned from each project get captured into persistent memory that every AI tool can access.)
The playbook: build the data layer first. Connect your CRM, your call recordings, your content library, your brand assets. Once the context is unified, generating any sales material becomes a prompt and a template. The slides are just the beginning.
Dash Biz Suite ($59)
Dash Biz Suite uses the same context-over-templates philosophy. Your business data drives every feature โ invoicing, client insights, profit analysis. No generic templates.
Get Dash Biz Suite โ $59Like what I build? Check out the shop — deploy-ready kits starting at $14.
More from the build log
I write about the honest experience of building AI-powered tools. No hype, just what works.
Read more posts