Introducing the One-Pager Generator
New pipeline agent and standalone CLI tool that distills the full investment memo into a single-page visual summary. Serves as both a standalone deal teaser and a cover sheet for the full memo export.
Changelog - 2026-03-23_05
Introducing the One-Pager Generator
New pipeline agent and standalone CLI tool that distills the full investment memo into a single-page visual summary. Serves as both a standalone deal teaser and a cover sheet for the full memo export.
Why
Investment professionals need a single-page summary for deal screening, LP distribution, and partner meetings. The full 15-30 page memo is comprehensive but impractical for initial evaluation. Previously, one-pagers required manual creation outside the pipeline — defeating the purpose of automated memo generation.
The 10SQ teaser (io/hypernova/deals/10SQ/10SQ-Teaser-11.30.25.pdf) served as the visual reference for layout design: a dense, information-rich single page with a left sidebar for structured data and a main area for narrative and visual proof points.
What Changed
New Agent: one_pager_generator.py
Uses Claude to extract content from the final memo into fixed slots, then renders a branded HTML template with CSS grid layout. Converts to PDF via WeasyPrint.
Content extraction (LLM's job — narrow extraction, not creative writing):
The agent sends the full memo to Claude with a JSON schema defining content slots. Claude extracts and compresses into:
Headline thesis (2 sentences max)
3 key bullets with bold key terms
Deal terms (stage, round, valuation, lead investors)
Syndicate participants
Cap table highlights
Key metrics (label/value pairs)
Market stats with bold figures
Technology/product summary
Competitive positioning
Traction milestones
Recommendation with verdict (PASS/CONSIDER/COMMIT)
Top sources
Different schemas for direct investment vs. fund commitment.
Rendering (template's job — fixed layout, no LLM decisions):
┌──────────────────┬──────────────────────────────────────┐
│ SIDEBAR (30%) │ HEADER: Headline + 3 Key Bullets │
│ ├──────────────────────────────────────│
│ Company Logo │ ┌──────────┐ ┌──────────────────┐ │
│ Deal Overview │ │ MARKET │ │ TECHNOLOGY & │ │
│ Key Metrics │ │ card │ │ PRODUCT card │ │
│ Cap Table │ └──────────┘ └──────────────────┘ │
│ │ ┌──────────┐ ┌──────────────────┐ │
│ │ │ COMPETE │ │ TRACTION card │ │
│ │ │ card │ │ │ │
│ │ └──────────┘ └──────────────────┘ │
│ │ SYNDICATE pills | RECOMMENDATION │
├──────────────────┴──────────────────────────────────────│
│ VC FIRM LOGO | Contact | Confidential │
└─────────────────────────────────────────────────────────┘Output artifacts:
8-one-pager.html— Standalone one-pager HTML8-one-pager.pdf— Single-page PDF (US Letter)8-one-pager-content.json— Extracted content slots (for debugging/iteration)
Pipeline position:
... → integrate_scorecard → one_pager → finalize | human_review → ENDNew CLI: cli/generate_one_pager.py
Standalone CLI for generating or regenerating one-pagers without re-running the full pipeline:
# By company name
python -m cli.generate_one_pager "Metabologic" --firm humain
# Direct path
python -m cli.generate_one_pager io/humain/deals/Metabologic/outputs/Metabologic-v0.2.4
# Dark mode
python -m cli.generate_one_pager "Metabologic" --firm humain --mode dark
# Dry run (show extracted slots without rendering)
python -m cli.generate_one_pager "Metabologic" --dry-runNew Template: templates/one-pager-template.html
Self-contained HTML (~300 lines) with inline CSS. Key design features:
CSS grid layout:
grid-template-columns: 2.3in 1fr(sidebar + main)Card grid: Main area uses
grid-template-columns: 1fr 1frfor 2-column cardsBrand-aware: Uses
--brand-*CSS variables from brand configSingle-page enforcement:
@page { size: letter; margin: 0; }+overflow: hiddenon all containersLight/dark mode:
body.dark-modeclass with adjusted card backgrounds and text colorsSyndicate pills: Investor names as pill badges (lead investor highlighted with accent color)
Type scale: Headline 15pt/700, cards 8.5pt/400, sidebar labels 6.5pt/700 uppercase
New Spec: context-v/specs/Introducing-a-One-Pager-Cover-Sheet-and-Export.md
Full specification document with:
Two layout variants (flat and card-based)
Four syndicate/cap table card variants with when-to-use guidance
Type scale table with sizes/weights/max lines for all elements
Content slot schemas for direct investment and fund commitment
5-phase implementation plan
Open questions for iteration
Design Decisions
Fixed template, not LLM-generated layout: LLMs are unreliable at visual layout. The template provides pixel-perfect consistency across deals. Claude only extracts content into fixed slots.
Temperature 0.1 for extraction: This is deterministic extraction — same memo should produce same slots every time. Lower than other agents (0.3) because no creative judgment is needed.
Separate from full memo export: The one-pager has fundamentally different CSS (single-page grid vs. flowing document). Keeping them separate avoids CSS conflicts. Future --prepend flag will combine at the PDF level.
8-one-pager artifact numbering: Follows the pipeline sequence — 7-* is the final draft, 8-* is derived from it.
Verification
One-pager generated successfully for Metabologic v0.2.4 via CLI. HTML + PDF + content JSON produced. Layout renders with correct Humain Ventures branding (Bunker/Lochinvar color palette).
Files Changed
| File | Change |
src/agents/one_pager_generator.py | Created — Content extraction + HTML rendering agent |
cli/generate_one_pager.py | Created — Standalone CLI tool |
templates/one-pager-template.html | Created — Single-page HTML template with CSS grid |
src/workflow.py | Added one_pager node after integrate_scorecard |
context-v/specs/Introducing-a-One-Pager-Cover-Sheet-and-Export.md | Created — Full spec |
Next Steps
The one-pager template is iteration zero. Expect visual tuning after reviewing real output:
Font sizing adjustments for single-page fit
Card height tuning based on content density
Possible template variants for direct investment vs. fund commitment
--prependflag for combining one-pager + full memo PDFs