For engineers and contributors. User-facing documentation lives at /docs.

PMFKit Typography Refactor — Implementation Summary

Completed per the plan in .cursor/plans/ (PMFKit Typography System Refactor).

1. Summary of changed files

AreaFiles
Font setupapp/layout.tsx, app/globals.css
Report / resultapp/result/page.tsx, app/result/cdo/page.tsx
Componentsapp/components/OverviewStrip.tsx, app/components/ValuePropClarityCard.tsx, app/components/TractionDashboard.tsx, app/components/roles/CMOResults.tsx, app/components/roles/CDOResults.tsx, app/components/roles/CmoFirstReportView.tsx
Landingapp/page.tsx
OG & assetsapp/og/route.tsx, app/icon.svg, public/og-image.svg, public/logo.svg, public/brand/pmfkit-lockup.svg, public/brand/pmfkit-wordmark.svg, public/brand/og-template.svg, public/brand/logo-lockup-light.svg, public/brand/banner-x.svg
Docsdocs/BRAND.md, README.md, TECHNICAL_OVERVIEW.md
Dependenciespackage.json (removed geist)

2. Components and pages updated

  • app/layout.tsx — Switched from Geist to next/font/google: Instrument Sans (--font-primary), JetBrains Mono (--font-system); variables applied on <html>.
  • app/globals.css@theme inline: --font-sans and --font-mono now use var(--font-primary) and var(--font-system).
  • app/result/page.tsx — Overall score and section scores use font-mono; factor scores (e.g. factor.score/factor.weight) use font-mono font-medium.
  • app/result/cdo/page.tsx — Overall score and section score labels use font-mono and typography scale.
  • app/components/OverviewStrip.tsx — All value variants (default, indigo, green, amber, red) use font-mono font-medium for metric-style values.
  • app/components/ValuePropClarityCard.tsx — Score badge uses font-mono font-medium.
  • app/components/TractionDashboard.tsx — Engagement score uses font-mono font-medium.
  • app/components/roles/CMOResults.tsx, CDOResults.tsx — Confidence scores and consistency score use font-mono / opacity-80 where appropriate.
  • app/components/roles/CmoFirstReportView.tsx — Score breakdown factor values use font-mono font-medium.
  • app/page.tsx — Hero scale set to text-4xl md:text-5xl; example DRL block uses font-mono for 65/100 and level label.
  • app/og/route.tsx — OG text container uses fontFamily: "'Instrument Sans', system-ui, sans-serif" (fallback to system at edge).
  • SVGs — All listed brand/OG SVGs now use Instrument Sans in the font-family stack (with system fallbacks).

3. Confirmation: no legacy fonts remain

  • Geist: Grep for Geist, font-geist, --font-geist, geist/font across .tsx, .ts, .css, .json, .md returns no matches.
  • Inter (font): No app or config code uses the Inter font; SVG font-family references to Inter were replaced with Instrument Sans. Remaining “Inter” matches are content (e.g. “Intercom”) or generated reports (e.g. playwright-report), not typography.

4. Verification notes

  • Build: npm run build completes successfully.
  • Lint: No linter errors on modified app/components files.
  • Font loading: Instrument Sans and JetBrains Mono are loaded via next/font/google with display: "swap" to avoid FOUT; variables are applied on <html> so --font-sans and --font-mono resolve globally.
  • Dark mode / mobile: No layout or structural changes; existing dark theme and responsive classes unchanged. Recommend manual check: landing, one report view, dashboard in light/dark and a narrow viewport.
  • OG image: Edge route uses 'Instrument Sans', system-ui, sans-serif; if the font is not available at edge, fallback is system-ui.

Typography rules in effect

  • Primary (Instrument Sans): All UI text, headlines, body, nav, buttons, forms, marketing, report copy. Weights 400, 500, 600.
  • Secondary (JetBrains Mono): Metrics, scores, percentages, stage labels, evidence tags, confidence, system output, code, report metadata. Used via font-mono and the updated OverviewStrip/role components.
  • Scale: Hero text-4xl md:text-5xl font-semibold tracking-tight; section headers text-2xl md:text-3xl font-medium; scores text-xl md:text-2xl font-mono font-medium; metadata text-sm font-mono opacity-80 where applied.