Map customer journeys from text

Morning Coffee RunMaya, Remote Worker31, needs caffeine + a quiet seat before her9am standupWaryHopefulFrustratedDelightedArriveSpot the line out the doorFind the mobile-order shortcutOrderApp crashes mid-checkoutLost her saved payment methodReorder at the counterEnjoySnag the last window seatFirst sip, latte is perfectWorth the wait — back tomorrow
source
journey-map Morning Coffee Run

persona Maya, Remote Worker
  31, needs caffeine + a quiet seat before her 9am standup

[Arrive]
  Spot the line out the door score: 2, emotion: Wary
  Find the mobile-order shortcut score: 4, emotion: Hopeful

[Order]
  App crashes mid-checkout score: 1, emotion: Frustrated
    pain: Lost her saved payment method
  Reorder at the counter score: 3

[Enjoy]
  Snag the last window seat score: 4
  First sip, latte is perfect score: 5, emotion: Delighted
    thought: Worth the wait  back tomorrow

Overview

Journey maps visualize a user’s experience across a process or service, plotting emotional highs and lows as a continuous curve. Each step has a score (1–5, high is good) that drives the emotion landscape. Phases group related steps, annotations capture pain points, opportunities, and thoughts, and tags add cross-cutting dimensions like channel or touchpoint.

Journey maps are ideal for UX research, customer experience mapping, service design, and identifying friction points.

Syntax

journey-map Title

persona Name

[Phase Name]
  Step Name score: N
  Step Name score: N, emotion: Label

The first line must be journey-map followed by a title. Phases use bracket syntax at indent 0. Steps are indented within phases.

Persona

Declares the journey’s protagonist:

persona Tech-Savvy Shopper
  28yo developer, price-sensitive, does extensive research

Name is everything after persona . Indented lines add description text. Only one persona per diagram.

Phases

Phases group steps into logical stages:

[Research]
  Compare specs score: 4
  Watch reviews score: 5

[Purchase]
  Add to cart score: 3
  Complete payment score: 3

Phases are optional — steps can appear at root level for a flat continuous flow.

Steps

Steps appear indented within phases (or at indent 0 in flat mode).

Score Syntax

The score is set with the score: key in same-line metadata:

Step Name score: 4                              // bare score
Step Name score: 4, emotion: Delighted          // score + emotion label
Step Name score: 4, ch: Web                     // score + tag metadata
Step Name score: 4, emotion: Delighted, ch: Web // score + label + metadata
Step Name                                       // no metadata = scoreless step
  • Score scale: 1–5 integer (high = good)
  • Emotion label: optional single word after the score (e.g., Frustrated, Delighted, Neutral). It renders as a caption beside the step’s face on the curve — naming the specific feeling the score alone can’t convey (anxious vs. bored both score low).
  • Scoreless steps: render as cards but produce no emotion curve point

Annotations

Deeper-indented lines under a step add context:

  Forced account creation score: 1, emotion: Frustrated
    pain: Wants guest checkout
    opportunity: Add guest checkout option
    thought: Why do I need an account?
    description: User abandoned cart twice
PrefixRendering
pain:Pain point (red accent)
opportunity:Improvement opportunity (green accent)
thought:User thought (italic)
description:General context text

Multiple annotations per step are allowed.

Tag Groups

Tags add color-coded dimensions like channel or touchpoint:

tag Channel as ch
  Web blue
  Mobile purple
  In-Person green

[Research]
  Compare specs score: 4, ch: Web
  Ask friends score: 4, ch: In-Person

Reference tag values in step metadata via the alias.

Flat Mode

Steps at root level (no [Phase] brackets) render as a continuous horizontal strip:

Quick FeedbackFrustratedRelievedOpened appSearched for featureHit errorNo helpful error messageContacted supportGot resolution
source
journey-map Quick Feedback

Opened app score: 4
Searched for feature score: 3
Hit error score: 1, emotion: Frustrated
  pain: No helpful error message
Contacted support score: 2
Got resolution score: 5, emotion: Relieved

Directives

DirectiveEffect
no-legendHide the score legend
active-tag GroupNameColor by a group other than the first declared (which is active by default); none suppresses

Complete Example

Buying a LaptopTech-Savvy Shopper28yo developer, price-sensitive, doesextensive researchChannelWebMobileEmailIn-PersonEngagedFrustratedDelightedResearchCompare specsChecked 12 laptops across 4 reviewsitesWebWatch reviewsMobileAsk friendsIn-PersonPurchaseAdd to cartWebForced account creationWants guest checkoutPassword requirements too strictWebComplete paymentWebDeliveryTrack packageMobileUnboxingInclude setup guideExcited to try it outIn-Person
source
journey-map Buying a Laptop

persona Tech-Savvy Shopper
  28yo developer, price-sensitive, does extensive research

tag Channel as ch
  Web blue
  Mobile purple
  Email teal
  In-Person green

[Research]
  Compare specs score: 4, ch: Web
    description: Checked 12 laptops across 4 review sites
  Watch reviews score: 5, emotion: Engaged, ch: Mobile
  Ask friends score: 4, ch: In-Person

[Purchase]
  Add to cart score: 3, ch: Web
  Forced account creation score: 1, emotion: Frustrated, ch: Web
    pain: Wants guest checkout
    pain: Password requirements too strict
  Complete payment score: 3, ch: Web

[Delivery]
  Track package score: 4, ch: Mobile
  Unboxing score: 5, emotion: Delighted, ch: In-Person
    opportunity: Include setup guide
    thought: Excited to try it out