Narrative Section Components & CMS-Ready Content Schema
Five rich narrative section components with citations, animations, multi-theme support, and CMS-ready YAML schema.
Changelog - 2025-12-18 (#1)
Dark Matter Site: Narrative Section Components & CMS-Ready Content Schema
Overview
This changelog documents the creation of five rich narrative section components for the Dark Matter Longevity Fund pitch deck, along with comprehensive documentation and a CMS-friendly YAML data structure for future content management.
Key deliverables:
5 Narrative Section Components: Full-featured Astro components with citations, animations, and multi-theme support (light/dark/vibrant)
Design System Showcase Page: A
/design-system/messagespage displaying all narrative sections for iterationContent Documentation: Markdown files documenting each section's data structure, visual layout, and key messages
Zod Schema: Type-safe content collection schema for validating narrative YAML frontmatter
The narrative sections tell the complete investment story:
The Aging Crisis (Problem) — $1T+ healthcare costs from age-related diseases
Aging Population (Opportunity) — 2B people over 60 by 2050
Our Differentiation (Team) — Scientific depth, exclusive access, IP focus
Exit Potential (Returns) — IPO and M&A paths to liquidity
Fund Strategy (Fund) — $100M fund, 25 investments, stage allocation
Changes by Area
1. Design System Messages Page (src/pages/design-system/messages.astro)
Created a showcase page for iterating on narrative section designs:
Imports all 5 narrative section components
Displays each section with a labeled badge showing its purpose
Uses
BaseThemeLayoutwith dark mode as defaultProvides visual reference for the complete pitch deck flow
<BaseThemeLayout title="Messages - Design System" mode="dark">
<div class="variant-section">
<div class="variant-label">The Aging Crisis: The Problem We're Solving</div>
<TheAgingCrisis />
</div>
<!-- ... more sections ... -->
</BaseThemeLayout>2. Narrative Section Components (src/layouts/sections/narratives/)
Created 5 comprehensive section components, each with:
Hero Opening: Large stats, animated text, scroll indicators
Content Sections: Cards, grids, visualizations with scroll-triggered reveals
Citations System: Inline citation popovers with Sources section
Theming: Full support for light, dark, and vibrant modes
Animations: IntersectionObserver-based scroll reveals with staggered delays
TheAgingCrisis.astro
Hero: "$1T+" stat with disease list
Disease cost cards (CVD, Diabetes, Cancer, Chronic Conditions)
Healthspan vs Lifespan gap visualization
US demographics stats (55M+ Americans 65+)
Cost implications (per-retiree costs, annual increases)
7 citations from healthcare sources
AgingPopulation.astro
Hero: "2B" people over 60 by 2050
Demographic statistics (global aging projections)
Scientific breakthroughs (CRISPR, Senolytics, AI)
Longevity economy stats ($7T+ market)
7 citations from UN, NIH, McKinsey
DarkMatterDifferentiation.astro
Four pillars of differentiation:
Deep Scientific Expertise
Proprietary Deal Flow (Stanford, Cedars-Sinai)
Longevity Leader Network
IP-Protected Solutions
Team section with photos linked to pillars
6 citations from Stanford and Cedars-Sinai
ExitPotential.astro
Hero stats ($2B+ IPOs, 17.9% CAGR, $5B+ funding)
Two exit paths: IPOs vs M&A (side-by-side cards)
Market growth visualization ($5.7B → $34.6B)
Example deal structure (Pharma-Senolytics model)
5 citations from Wellington, Crunchbase, Labiotech
FundPortfolioConstructionDetails.astro
Hero metrics ($100M fund, 10 years, 25 investments)
Fund economics (2% fee, 20-25% carry, GP commitment)
Stage allocation bar chart (50% Seed, 30% A/B, 20% Follow-ons)
Geographic donut chart (70% US/Europe, 30% RoW)
Check sizes and ownership targets
Follow-on pyramid (tiered capital concentration)
LP benefits (3 numbered cards)
3. Citations Infrastructure (src/lib/citations/ and src/components/citations/)
Leveraged existing citation system for all narrative sections:
CitationReferencetype with hexCode, title, url, source, publishedDatebuildCitationIndex()for sequential numberingInlineCitation.astrofor popover referencesSources.astrofor numbered source lists
4. Narrative Content Documentation (src/content/narratives/)
Created 5 documentation files with CMS-ready YAML frontmatter:
section--the-aging-crisis.md
slug: the-aging-crisis
component: TheAgingCrisis.astro
order: 1
category: problem
title: The Aging Crisis
subtitle: Age-related diseases cost $1T+ annually...
hero:
stat: "$1T+"
label: annual global healthcare costs
diseases: [Alzheimer's, Cancer, CVD, Diabetes, Renal Failure]
diseaseCosts:
- disease: Cardiovascular Disease
cost: "$1.8T"
timeframe: by 2050 (US)
description: Leading cause of death globally...
citationKey: alyqs4
# ... more cards
citations:
alyqs4:
title: Key Drivers of 2025 Health Care Cost Increases
url: https://...
source: Parrott Benefit Groupsection--aging-population.md
Demographic statistics array
Science breakthroughs array (no citations)
Economy points with citations
section--dark-matter-differentiation.md
Pillars array with bullet points and citation keys
Team array with photo paths and pillar mappings
section--exit-potential.md
IPO and M&A path objects with points
Market growth projection
Deal example with rationale and terms
section--fund-portfolio-construction.md
Hero metrics, economics, geography arrays
Stage allocation with percentages
Follow-on tiers with highlight flags
LP benefits
5. Content Collection Schema (src/content/narratives/narratives.config.ts)
Updated the Zod schema to validate all narrative YAML structures:
export const narratives = defineCollection({
type: 'content',
schema: z.object({
// Section metadata
slug: z.string(),
component: z.string(),
order: z.number().optional(),
category: z.enum(['problem', 'opportunity', 'solution', 'team', 'returns', 'fund']).optional(),
// Display configuration
title: z.string(),
subtitle: z.string().optional(),
eyebrow: z.string().optional(),
// Section-specific schemas
hero: z.object({ ... }).optional(),
diseaseCosts: z.array({ ... }).optional(),
pillars: z.array({ ... }).optional(),
// ... 20+ optional field schemas
// Citations library
citations: z.record(z.string(), citationSchema).optional(),
}).passthrough(), // Allow iteration
});Key schema features:
Reusable
statCardSchemafor stat/label/description patternscitationSchemafor citation referencesclosingSchemafor CTA sectionsSection-specific schemas (pillars, tiers, paths, etc.)
.passthrough()for iteration flexibility
Files Changed Summary
New
Section Components:
src/layouts/sections/narratives/TheAgingCrisis.astro— Problem statement with disease costs and demographicssrc/layouts/sections/narratives/AgingPopulation.astro— Opportunity with demographics and science breakthroughssrc/layouts/sections/narratives/DarkMatterDifferentiation.astro— Competitive advantages and teamsrc/layouts/sections/narratives/ExitPotential.astro— IPO/M&A paths and deal structuresrc/layouts/sections/narratives/FundPortfolioConstructionDetails.astro— Fund mechanics infographic
Design System:
src/pages/design-system/messages.astro— Showcase page for all narrative sections
Content Documentation:
src/content/narratives/section--the-aging-crisis.md— YAML schema + documentationsrc/content/narratives/section--aging-population.md— YAML schema + documentationsrc/content/narratives/section--dark-matter-differentiation.md— YAML schema + documentationsrc/content/narratives/section--exit-potential.md— YAML schema + documentationsrc/content/narratives/section--fund-portfolio-construction.md— YAML schema + documentation
Modified
src/content/narratives/narratives.config.ts— Comprehensive Zod schema for narrative content validation
Technical Details
Theming Architecture
Each section supports three visual modes via CSS selectors:
:global([data-mode="light"]) .section { ... }
:global([data-mode="dark"]) .section { ... }
:global([data-mode="vibrant"]) .section { ... }Color schemes by section type:
Problem (Aging Crisis): Red/orange warning tones
Opportunity (Aging Population): Purple/violet brand colors
Team (Differentiation): Purple brand with green team accents
Returns (Exit Potential): Green growth tones, amber for deals
Fund (Portfolio): Blue institutional tones, multi-color subsections
Animation System
Scroll-triggered reveals using IntersectionObserver:
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const delay = parseInt(entry.target.style.getPropertyValue('--delay') || '0');
setTimeout(() => entry.target.classList.add('revealed'), delay);
}
});
},
{ threshold: 0.15, rootMargin: '0px 0px -50px 0px' }
);Staggered delays via CSS custom properties:
<div class="reveal-item" style="--delay: 100ms;">...</div>Citation Hex Codes
Citations use 6-character hex codes as keys (e.g., alyqs4, 1d3uza) for:
Compact inline references
Collision-resistant identifiers
Easy copy/paste from research sources
Notes / Follow-Ups
Content Integration: The YAML frontmatter documents current component data but is not yet wired to the components. Future work would modify components to read from content collection.
CMS Readiness: The schema is designed for eventual CMS integration (e.g., Decap CMS, Keystatic). The team can edit YAML files directly or through a CMS UI.
Team Photos: Referenced photos in differentiation section:
/photos/headshot__Skinner-Layne.png/photos/headshot__Mark-Moline.jpeg/photos/headshotOf__Thomas-Vu.jpeg/photos/headshotOf__Anthony-Borquez.jpeg
Citation Sources: All citations have been verified with URLs and publication dates from:
Healthcare: Parrott Benefit Group, Watkins Insurance, WorldatWork
Demographics: UN, NIH/NIA, McKinsey, PRB
Scientific: Stanford Medicine, Cedars-Sinai, Stanford Center on Longevity
Markets: Wellington Management, Crunchbase, Labiotech, Spherical Insights
Design System Page: Access at
/design-system/messagesto view all sections in sequence for iteration and stakeholder review.