Blueprint Design System · ActBlue · 2024

Blueprint:
A Design System
at the Scale of Democracy

Five products. One visual language. ActBlue's fundraising infrastructure powers billions in small-dollar donations—it deserves a design system built to that ambition. Here's how.

5
Products to Unify
1
Source of Truth
Campaign Themes
Core Fundraising secure.actblue.com
Raise by ActBlue simplified fundraising
ActBlue Field Tools p2p · phone banking · canvassing
Website Builder campaign site builder
AB Charities nonprofit fundraising
Blueprint Design Principles

Four Principles.
One Coherent System.

Blueprint's principles aren't aesthetic preferences—they're commitments to the people who use these tools to make democracy work. Every design decision should serve these values.

Principle 01
🫀
Humanistic

People—donors, volunteers, organizers—are the center of every interaction. Design that respects their time, their intent, and the weight of the moment when they choose to give.

Principle 02
🏛️
Classic

Democracy has been practiced for centuries. Blueprint's visual language borrows that permanence—clean, trustworthy, and enduring rather than trend-chasing.

Principle 03
🎯
Purposeful

Every component exists to serve a function. No decorative flourish without intent. The design system removes cognitive load so donors can focus on why they're giving—not how.

Principle 04
Inclusive

Democracy belongs to everyone. WCAG AA minimum at all times. Mobile-first always. Every component tested with keyboard navigation, screen readers, and high-contrast modes.

The Problem We're Solving

Five Products.
Five Fragmented Languages.

In 2022, ActBlue's design and engineering libraries fell out of sync—legacy components, one-off patterns, undocumented decisions. The result: a fractured user experience across products that should feel unified.

💰
Core Fundraising
Rounded corners · Solid blue · 4px radius
🚀
Raise
Pill-shaped · Purple palette · 100px radius
🗂️
Field Tools
Square corners · Green tones · 0px radius
🌐
Website Builder
Rounded · Amber accent · 10px radius
🤝
AB Charities
Slight radius · Red palette · 2px radius
⚠️

Notice anything? Five products, five different button shapes, five color palettes, five input styles. A donor who uses Core Fundraising and then visits Raise by ActBlue encounters what feels like a different company. Blueprint's mandate is to unify these into one coherent, trustworthy experience—without erasing the legitimate product differences that make each tool right for its context.

47+
Duplicate component variants in Figma libraries (est.)
~30%
Components out-of-sync between Figma & Storybook
Campaign theme variations needed via token layer
The Solution: Token Architecture

Change One Token.
Update Five Products.

A robust design token system is the connective tissue between Blueprint's design intent and its engineering reality. Change a single primitive token and watch it cascade through every product simultaneously—including ActBlue's campaign theming layer.

Token Editor — Live Demo
Source Token
--color-brand-primary
#2B5CE6
Quick Presets
campaign themes
vs White — Contrast
4.8:1
✓ WCAG AA
--color-brand-primary --button-bg-primary --link-color --input-border-focus --selection-bg React components Figma variables Campaign themes
↓ All five products update simultaneously from this single token change
💰 Core Fundraising
$10
$25
$50
Learn more
🚀 Raise
$5
$15
$35
Set up auto-give
🗂️ Field Tools
New
Prog
Done
View all contacts
🌐 Website Builder
Hero
Bio
CTA
Preview site
🤝 AB Charities
$25
$50
$100
Tax deductible
Component Showcase

Blueprint Components.
Built for Every Campaign.

Production-quality components built to WCAG AA standards, with full keyboard support, focus states, and a theming layer that lets any campaign customize their donation form without breaking the system.

Button — Primary & Secondary

Blueprint's action button. Maintains 3:1+ contrast ratio across all approved campaign themes. Focus ring uses rgba of primary color for brand coherence. Keyboard-navigable, focus-visible polyfilled.

✓ WCAG AA ↹ Keyboard 44px Touch Target
Enter a custom amount or select below
Form Input — Text Field

Click the field above to see the focus state. The 3px focus ring uses the primary token color at 20% opacity—high visibility without visual noise. Error and hint states included.

✓ Focus Ring Label Associated Error States
Jane Smith for Senate
Powered by ActBlue
🔒 Secure · Contributions are not tax deductible
Donation Card — Campaign Theme

The core Blueprint component. Switch themes above—the card updates instantly via CSS tokens. Campaign branding editor overrides only approved token slots, never component structure.

✓ WCAG AA Theme-Safe Mobile-First
The Figma → Production Pipeline

One Workflow.
Zero Sync Problems.

The 2022 drift between Figma and Storybook happened because there was no enforced pipeline. Blueprint needs a single source of truth with guardrails at every handoff. Here's the proposed workflow—click any step for detail.

1
🎨
Design Tokens
JSON source of truth in tokens.json
2
🔷
Figma Variables
Token Studio sync · Auto-imported
3
🧩
Figma Components
Variables bound · Variants built
4
📖
Storybook
Code Connect · Live docs
5
⚛️
React Components
CSS vars · TypeScript props
🎨 Step 1: Design Tokens — The Non-Negotiable Source of Truth
// tokens/brand.json — committed to git, owned by design system team { "color": { "brand": { "primary": { "value": "#2B5CE6", "type": "color" }, "primary-dark": { "value": "#1a3a9c", "type": "color" }, "primary-light": { "value": "#eff6ff", "type": "color" } }, // Campaign theming layer — these slots are open to branding editor "campaign": { "primary": { "value": "{color.brand.primary}", "type": "color" }, "accent": { "value": "{color.brand.primary}", "type": "color" } } }, "radius": { "button": { "value": "8px", "type": "borderRadius" }, "card": { "value": "16px", "type": "borderRadius" } } }
🔷 Step 2: Figma Variables — Design Side Sync
// Token Studio plugin reads tokens.json → creates Figma Variable collections // Collections mirror token structure exactly — no manual drift possible Collection: Brand/Color ├── brand/primary → #2B5CE6 ├── brand/primary-dark → #1a3a9c └── brand/primary-light → #eff6ff Collection: Campaign Theme ← branding editor maps to this ├── campaign/primary → alias: brand/primary └── campaign/accent → alias: brand/primary // Components bind to Campaign Theme variables, NOT Brand/Color directly // This is what makes theming safe: campaigns can't break component structure Button fill → campaign/primary (overrideable) Button text → always white (locked, accessibility protected)
🧩 Step 3: Figma Components — Built with Variables, Documented with Specs
// Every Blueprint component follows this structure in Figma: Component: Button/Primary ├── Frame (auto-layout, 11px 22px padding) │ Fill → campaign/primary ← variable binding │ Radius → radius/button ← token binding │ ├── Properties: │ variant: Primary | Secondary | Destructive │ size: sm | md | lg │ state: Default | Hover | Focus | Disabled │ iconLeft: boolean │ iconRight: boolean │ └── Annotations: a11y notes, usage guidelines, do/don't examples → Figma Code Connect maps this to React <Button> props exactly
📖 Step 4: Storybook — Where Design & Engineering Meet
// Blueprint Storybook runs at blueprint.actblue.com/storybook // Figma Code Connect pulls Figma thumbnails directly into Storybook // Button.stories.tsx export default { title: 'Blueprint/Button', component: Button, parameters: { design: { // Links to Figma frame type: 'figma', url: 'https://figma.com/file/...' } } } satisfies Meta<typeof Button>; // Each story maps directly to a Figma variant export const Primary: Story = { args: { variant: 'primary' } }; export const Secondary: Story = { args: { variant: 'secondary' } }; export const WithIcon: Story = { args: { iconRight: true, children: 'Donate Now' } };
⚛️ Step 5: React Components — Tokens as CSS Custom Properties
// The CSS token layer — generated from tokens.json at build time :root { --color-brand-primary: #2B5CE6; --color-campaign-primary: var(--color-brand-primary); --button-bg: var(--color-campaign-primary); --button-radius: 8px; } // Campaign theme override — one attribute, all components update [data-theme="jane-smith-senate"] { --color-campaign-primary: #1a472a; /* only this token is overrideable */ } // Button component uses only token references, never raw values .bp-button-primary { background: var(--button-bg); border-radius: var(--button-radius); }
Why Mikel Rosenthal

What I Bring
to Blueprint.

I've spent years building and scaling design systems—not just designing components, but establishing the governance, tooling, and cross-functional relationships that make a design system actually work. This role aligns with everything I care about.

🔷
Figma Expert — Variables & Code Connect

Deep expertise with Figma's variable system, component properties, and the new Code Connect API. I can build a Figma library where every component is variable-bound and every state is documented—so designers and engineers work from the same source.

🎨
Design Token Architecture

I've designed and implemented multi-tier token systems: primitives → semantics → component-specific. I understand the theming challenge ActBlue faces with its branding editor and have a clear approach to creating a token layer that supports infinite campaign customization safely.

Accessibility-First Design

WCAG AA is a floor, not a ceiling. I've built components with color contrast ratios exceeding 4.5:1, implemented visible focus management, tested with VoiceOver and NVDA, and documented a11y decisions in component specs so engineering can implement correctly the first time.

⚛️
Design–Engineering Collaboration

I speak engineering. I've worked directly with React developers, written Storybook stories, maintained CSS token systems, and conducted design reviews against code output. I know where the handoff breaks—and how to fix it structurally, not just case-by-case.

📐
Multi-Product Design Systems

I understand the tension between system consistency and product differentiation. A design system for five products isn't one size fits all—it's a shared foundation that each product extends thoughtfully. I've navigated that balance and built governance models that scale.

🗳️
Mission Alignment

ActBlue's mission—making it easier for people to participate in democracy—matters to me personally. Good design at ActBlue isn't about aesthetics. It's infrastructure. Every friction removed from a donation form is a real person more empowered to act on their values.

Design is democracy's infrastructure.

When a first-time donor can navigate a form without confusion, when a volunteer can log contacts without training, when a campaign can customize their donation page without breaking the experience—that's Blueprint doing its job. I want to build the system that makes all of that possible, at the scale ActBlue operates.

🗳️

Values Aligned