journey — Lattice component

journey

ProgressionTimelineStructure

Native user-journey chart — sections of tasks, each tagged with actor(s) and a 1-5 mood. Renders as section bars, task chips, plumb lines, and mood faces.

Open in Playground
Variant

Use when a process or experience needs charting as a horizontal sequence of moments, each scored for affect. Five variants reshape the same source list: default (Mermaid-style classic), heatmap (mood-tinted chips), curve (mood polyline with axis), swimlane (per-actor rows), weighted (chip widths proportional to +volume).

processassessmentwalkthrough

When to use

  • Affect is part of the story. When a process matters not just for its steps but for how each step feels. The 1-5 mood score makes the emotional contour part of the chart instead of buried in narration.
  • Actors share the trail. Use when multiple actors hand off through the sequence — customer, sales, onboarding, support. The @actor tokens make the handoff visible on every task chip.
  • One source, five lenses. Author the journey once and re-render under any variant. Heatmap for fastest scan, curve for trend, swimlane for actor load, weighted for traffic-mix — same data, different argument.

When not to use

  • Process without affect. If the mood scores are all the same or arbitrary, the chart is doing less work than timeline or list-steps. Reserve journey for sequences where the affect changes meaningfully.
  • More than ten tasks. Past ten tasks the chips compress and the labels become unreadable. Group into fewer sections, or split the journey at a natural break.
  • Volume tokens without weighted. The +N volume token is meaningful only under the weighted variant. On the other four it is parsed but invisible — strip it from the markdown or commit to weighted.

Common mistakes

  • Treating the mood scale as if 1 were best instead of worst. The mood scale runs 1 (worst) to 5 (best) — authoring it inverted flips heatmap tinting and the curve variant's trend direction.
  • Assuming an omitted :N mood token leaves the task unplotted. Omitting :N silently defaults the task to a neutral mood of 3 — it still plots normally under every variant, just without a deliberate score. Always give an explicit :N so the chart reflects real affect instead of a silent default.

Authoring

<!-- _class: journey -->

## Walking through my Tuesday morning.

- Wake up
  - Hit snooze `@me` `:2`
  - Make coffee `@me` `:4`
- Commute
  - Subway `@me` `:1`
  - Walk `@me` `:5`
- Work
  - Standup `@team` `:3`
  - Deep work `@me` `:5`

Slots

SlotSelectorRequiredDescription
headingh1, h2yesSlide heading naming the journey or process.
sectionsul > liyesTop-level li per section. Lead with the section name; nested ul carries tasks. Each task carries inline-code tokens: @actor (one or more), :N mood 1-5, optional +N volume (used by .weighted).

Anatomy

┌─────────────────────────────────────────┐
│  header                                 │
│          User journey heading           │
│                                         │
│        [Awar] → [Sign] → [Use ]         │
│                                         │
│         :)        :|        :)          │
│          (satisfaction track)           │
│  footer                           1/19  │
└─────────────────────────────────────────┘

Variant decision rule

  • default (no modifier)The classic Mermaid-style read — the plainest, most familiar rendering of the sequence.
  • heatmapThe fastest scan matters more than a precise trend — mood-tinted chips let the audience read the emotional contour at a glance.
  • curveThe trend across the journey is the point — a mood polyline with an axis makes the trajectory, not just each moment, legible.
  • swimlaneActor load and handoff is the story — splits the journey into one row per actor.
  • weightedTraffic volume through each step matters as much as mood — chip width encodes the +N volume token.

Variants

heatmapheatmap

Stages shade by score.

<!-- _class: journey heatmap -->

## heatmap shades the stages by score.

- Evaluate
  - Read case study `@prospect` `:5`
  - Book demo `@prospect` `:4`
- Trial
  - Trial signup `@prospect` `:3`
  - Workspace setup `@user` `:1`
- Activate
  - First report `@user` `:3`
  - Daily use `@user` `:5`

curvecurve

A sentiment line rides the stages.

<!-- _class: journey curve -->

## curve draws the sentiment line.

- Evaluate
  - Read case study `@prospect` `:5`
  - Book demo `@prospect` `:4`
- Trial
  - Trial signup `@prospect` `:3`
  - Workspace setup `@user` `:1`
- Activate
  - First report `@user` `:3`
  - Daily use `@user` `:5`

swimlaneswimlane

One lane per actor.

<!-- _class: journey swimlane -->

## swimlane splits the journey by actor.

- Evaluate
  - Read case study `@prospect` `:5`
  - Live demo `@prospect` `@sales` `:4`
- Trial
  - Trial signup `@prospect` `:3`
  - Workspace setup `@user` `@onboarding` `:1`
- Activate
  - First report `@user` `:3`
  - Daily use `@user` `:5`

weightedweighted

Stage size carries weight.

<!-- _class: journey weighted -->

## weighted sizes the stages by importance.

- Discover
  - Search `@prospect` `:4` `+45`
  - Referral `@prospect` `:5` `+18`
- Convert
  - Pricing page `@prospect` `:3` `+12`
  - Checkout `@prospect` `:2` `+10`
- Support
  - Settings `@user` `:3` `+8`
  - Help docs `@user` `:4` `+7`

Related

  • list-stepsprocess needs descriptive body per step, no chart
  • ganttschedule of overlapping tasks across lanes
  • kanbancurrent status by stage rather than sequence over time