A tool for creating service blueprints from spreadsheet data. Load your lanes, phases, and cards from CSV or TSV files and generate an editable Figma diagram or a shareable HTML preview — no coding required.
Service blueprints map out what happens during a service journey: what the person does, what staff do, what systems do, and what policies apply. This tool lets you define that structure in a spreadsheet and generate a formatted diagram automatically.
Two outputs:
- Figma plugin — generates an editable blueprint directly in your Figma file, with individually moveable cards
- HTML preview — renders in any browser; export as a PNG to share with people who don't have Figma
- Open
preview/index.htmlin your browser - Upload your structure file and one or more content files
- Click Render
- Click Export PNG to save a full-width image
- Install dependencies and build:
npm install npm run build
- In Figma: Plugins → Development → Import plugin from manifest
- Select
dist/manifest.json - Run the plugin from the Plugins menu
All files can be CSV or TSV. Column headers are case-insensitive.
Defines the lanes (rows) and phases/sub-phases (columns) of the blueprint. Row order determines render order.
type,id,label,parent
lane,applicant,Applicant,
lane,system,System,
lane,policy,Policy,
phase,apply,Apply for Benefits,
subphase,discover,Discover,apply
subphase,submit,Submit Application,apply
phase,review,Review,
subphase,caseworker-review,Caseworker Review,review
| Column | Description |
|---|---|
type |
lane, phase, or subphase |
id |
Unique identifier (used to link content) |
label |
Display name shown in the diagram |
parent |
For subphases: the id of their parent phase |
Each row is one card. You can use multiple content files — they are merged. This is useful for separating content by contributor or topic (e.g. a separate file for policy citations).
lane,subphase,type,text,subtext
applicant,discover,applicant,Search for benefits online,Via agency website
system,submit,system,Generate confirmation number,
system,submit,domain-event,intake.application.submitted,
policy,submit,policy,7 CFR § 273.2(g),Agency must accept any application on the date of first contact.
| Column | Description |
|---|---|
lane |
The id of the lane this card belongs to |
subphase |
The id of the sub-phase column |
type |
Card type (see below) |
text |
Main card text (header) |
subtext |
Optional secondary text (body) |
Multiple rows with the same lane + subphase create multiple cards in that cell, in the order they appear.
Overrides the default card types. If omitted, the built-in types are used.
id,label,headerBg,bodyBg,headerFg,bodyFg,icon
applicant,APPLICANT,#D97C20,#FDECD4,#3D1800,#3D1800,person-single
system,SYSTEM,#137C69,#F1FFFD,#FFFFFF,#0A3A2E,gear
The id column must match the type values used in your content file. The icon column accepts: person-single, person-group, gear, document, lightning, diamond-alert, lightbulb, building, bar-chart, mail, diamond, help.
| Type | Color | Use for |
|---|---|---|
applicant |
Orange | Actions taken by the person applying |
caseworker |
Purple | Actions taken by a caseworker |
supervisor |
Indigo | Actions taken by a supervisor |
system |
Green | Automated system processing |
domain-event |
Teal | Events emitted by the system |
communications |
Blue | Notices, letters, or messages sent |
pain-point |
Red | Friction or barriers in the experience |
opportunity |
Amber | Ideas for improvement |
policy |
Beige | Regulatory requirements |
metrics |
Light teal | Performance indicators |
question |
Gray | Open questions or knowledge gaps |
touchpoint |
Dark gray | Service channels or touchpoints |
note |
Yellow | General annotations |
If you're working from workshop output, interview notes, or a pile of sticky notes rather than an already-structured spreadsheet, this section is for you.
Before touching content, decide on your lanes and phases. This is the hardest design decision and everything else follows from it.
Lanes (rows) represent actors or systems: the person receiving the service, front-line staff, back-office staff, systems, policy. Start with 4–6 and add more only if the content demands it.
Phases represent major stages of the journey (e.g. Awareness → Apply → Review → Decision → Appeal). Sub-phases break each phase into finer steps. If you're unsure, start with phases only and add sub-phases once you have real content to fill them.
Write your structure file first, render an empty blueprint, and review it with your team before adding any cards.
Each piece of content (a sticky note, an observation, a policy citation) belongs in one cell: the intersection of a lane and a sub-phase. Work through your raw material and assign each item a lane and subphase value from your structure file.
A card also needs a type — pick the one that best describes what kind of thing it is, not who it belongs to (the lane handles that):
| You have... | Use type |
|---|---|
| Something a person does or decides | applicant |
| Something a caseworker does | caseworker |
| An automated system action | system |
| A notice, letter, or message sent | communications |
| A regulation or policy that applies | policy |
| A pain point or barrier you observed | pain-point |
| An idea for improvement | opportunity |
| An open question | question |
| Something you want to annotate | note |
If you have a large volume of raw content (e.g. hundreds of sticky notes exported from Miro, or interview transcripts), an AI assistant can help convert it to CSV quickly.
Paste your raw content and prompt it with something like:
I'm building a service blueprint. My lanes are:
applicant,caseworker,system,policy. My sub-phases are:discover,apply,submit,review,decision. Convert each item below into a row with columns: lane, subphase, type, text, subtext. Use these card types: applicant, caseworker, system, communications, policy, pain-point, opportunity, question, note. If an item doesn't clearly fit a cell, put it in thenotetype and flag it.
Review the output carefully — AI will make judgment calls about categorization that may not match your intent. Treat the result as a first draft to edit, not a finished product.
Load your files, render the blueprint, and look for:
- Cells that are overloaded (too many cards) — consider splitting the sub-phase
- Cells that are empty across a whole lane — does that lane belong?
- Card types that feel wrong — it's easy to retype a
typecolumn value
The CSV format is designed to make this iteration fast. Small edits in a spreadsheet, re-upload, re-render.
The examples/ folder contains a complete service blueprint for a benefits application submission flow:
structure.csv— lanes and phasescontent.csv— system actions, events, and person actionscontent-policy.csv— policy citations as a separate file (demonstrating multi-file loading)
Load all three to see a full blueprint rendered.
npm install # install dependencies
npm run build # build the Figma plugin to dist/
npm run watch # rebuild on file changesSource files:
src/
config/
card-types.ts # default card type colors and labels
icons.ts # SVG icon paths
types.ts # TypeScript type definitions
parser.ts # CSV/TSV parsing
renderer.ts # Figma rendering logic
main.ts # Figma plugin entry point
ui.html # Plugin UI
preview/
index.html # Standalone HTML preview (no build needed)
examples/ # Sample CSV files