- Given
- I land on the homepage and the inline quote builder is visible above the fold
- When
- I select trip type (4 tiles) → enter pickup & destination → enter date & passenger count → enter email + mobile
- Then
- I see a Quote Results page with 3–6 buses, each showing price, operator, on-time %, rating, and a photo, within 5 seconds of submitting
- Then also
- I receive an email + SMS magic link within 60 seconds to return to the same results later
- Edge
- If 0 buses match: show "talk to a planner" CTA and capture lead in Salesforce immediately
- Edge
- If trip is < 48 hrs out: warn about expedited fees on Step 2 before user finishes Step 4
- Design
- Stepper visible on each step (H1 Visibility). Auto-save state every field blur. Mobile = full-screen step; desktop = inline.
US Coachways
UX Dossier.
A reference-grade UX dossier prepared the way the skill prescribes: business framed before user, user framed before screen, screen framed before code. Every framework below cites its primary source. Every claim about a user is tagged with confidence — VALIDATED, INFERRED, or ASSUMED — because the difference matters at handoff.
Is the business context clear enough to design from?
The skill prescribes a 5-question gate before any UX work begins. The point is to surface assumptions, not pretend they don't exist. Below is the assessment for the US Coachways rebuild as of intake.
STRATEGY CHECK · US Coachways rebuild ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. VALUE PROPOSITION [x] Clear [ ] Fuzzy [ ] Unknown "America's largest, most-trusted charter bus broker — 35 years, 300K+ trips, FEMA-approved, Fortune 500-trusted, now with instant pricing and a 110% Trip Guarantee no other broker offers." 2. REVENUE MODEL [x] Defined [ ] Exploring [ ] Unknown Brokerage commission on charter bookings, 10% deposit at booking + balance due 30 days pre-trip. Recurring revenue from corporate shuttle accounts (highest-LTV cohort). 3. TARGET SEGMENT [~] Specific [x] Broad [ ] Unknown Broad-but-known. 9 audience types collapse to 3 archetypes (see Personas § 05). Highest-LTV is corporate/government; highest volume is group leaders (weddings, schools, religious). 4. COMPETITIVE POSITION [x] Mapped [ ] Vague [ ] Unknown Mapped against CharterUP (instant-quote marketplace, 2018) and GoGo Charters (phone-driven broker, 2012). See § 02 Business Context for full competitor analysis. USC's moat: tenure + government/F500 credentials + network depth (7,000 vehicles). 5. SUCCESS METRICS [~] Defined [x] Fuzzy [ ] Unknown Defined directionally, not numerically. Primary: cost-per-booked-trip from paid acquisition ↓ Secondary: organic share-of-voice on high-intent queries ↑ Tertiary: % of trips repeat-booked via accounts ↑ Targets not set numerically yet — flag for sprint 0. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ RECOMMENDATION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0-1 Unknown: Proceed with UX work → 2 Unknown (Target segment specificity, Success metric quantification) 2-3 Unknown: Flag gaps, proceed with assumptions documented 4-5 Unknown: Recommend business strategy session before UX Verdict: PROCEED with documented assumptions. Set numeric KPIs in sprint 0; the UX direction is independent of the exact threshold and won't be invalidated by setting one.
Assumptions we are designing under (flagged)
- Assumption 1 — Buyers will trust an instant quote from USC because of tenure, even though USC has not previously offered one. INFERRED from CharterUP's growth trajectory.
- Assumption 2 — Corporate procurement buyers (David archetype) are willing to self-serve on standard trips and only escalate to a planner on complex ones. ASSUMED; needs validation interviews.
- Assumption 3 — A publicly-stated Trip Guarantee will not surface adverse selection (operators racing to bottom on price). INFERRED from network depth (7,000 vehicles); needs ops modeling.
- Assumption 4 — Mobile-vs-desktop is roughly 60/40 weighted to mobile for paid traffic, 70/30 desktop for organic high-intent. ASSUMED from industry norms; needs analytics confirmation.
What this gate let us skip · what it didn't
With the gate passing at 2 unknowns, we proceed to user research and IA work without a full business-strategy session. We're not designing for a business model that isn't real.
What we still defer until later sprints: setting the numeric KPI thresholds (conversion rate target, LTV/CAC ratio), formalizing the Trip Guarantee ops policy (eligible operator pool, payout SLA), and primary-research validation of the David archetype's self-serve appetite.
Gate result · proceed
Strategy is sufficiently mapped to design from. The two remaining gaps (segment specificity, KPI quantification) are addressable inside the design process, not blockers to starting it. The dossier continues with full Business Context next, then audit of the current site against Norman + Krug + Garrett, then JTBD research.
The competitive structure of the charter bus industry, applied to US Coachways.
Four frameworks, ordered from least-to-most adversarial: Lean Canvas (what the business is), SWOT (where it stands), Competitor Analysis (who else is in the room), Porter's Five Forces (the structural forces acting on everyone). Each ends with the UX implications.
2.1 Lean Canvas
Problem
- Booking a charter bus takes days of phone tag and PDFs.
- Buyers can't tell good operators from bad — no visible safety / reviews.
- Last-minute cancellations leave groups stranded (industry pattern).
Existing alternatives
- Google a local operator → call → wait 2 days.
- CharterUP's marketplace.
- Internal motorpool / employees driving themselves.
Solution
- Instant verified quote pulling SubOut.com inventory (parity with CharterUP).
- Operator transparency — DOT rating, on-time %, photos, reviews per operator.
- Public USC Trip Guarantee — 110% refund + 2hr backup.
Key metrics (AARRR)
- Acq: CPA on paid + organic share-of-voice.
- Act: % visitors who complete quote builder.
- Ret: % bookers who return within 12mo.
- Rev: avg order value · take-rate.
- Ref: referral-link conversion (post-trip).
Unique Value Proposition
"Charter buses that show up — backed by 35 years and a 110% guarantee."
"Real prices in 60 seconds, from the broker FEMA and the Fortune 500 use, with the only Trip Guarantee in the industry."
High-level concept
Kayak for charter buses, run by the people who already move FEMA.
Unfair Advantage
- Tenure — 35 yrs, 300K trips. Cannot be bought.
- Federal credentials — GSA Schedule + FEMA partner.
- SubOut.com marketplace tech — already operational on operator side.
- Network depth — 7,000 vehicles, 10,000 drivers, 44 states.
- 9.3 NPS, 4.6 Trustpilot — earned, not bought.
Customer Segments
- Coordinators · weddings, schools, corporate events
- Procurement · F500, hospitals, government
- Group leaders · senior clubs, religious, sports
Early adopters (Maurya: where to start)
- NYC-metro corporate shuttle coordinators (existing USC customers).
- Repeat religious / senior group leaders booking 4+ trips/yr.
Channels
- Paid Google search (current)
- Organic SEO (city / route / trip-type / comparison)
- Federal / GSA channel partnerships
- Operator-referral (offline)
- Eval: instant quote, comparison page, reviews
- Buy: self-serve checkout, 10% deposit
- Deliver: live tracking dashboard, driver chat
- Retain: Team Account, recurring shuttles
Cost Structure / Revenue Streams
- Operator payout (largest line item)
- Paid acquisition
- Trip Guarantee absorption (new)
- Payment processing (Stripe ~2.9%)
- ~75 employees · planners, ops, eng
- Salesforce + Heroku + new Vercel
- SubOut.com ongoing dev
- Brokerage margin on each trip (~15–25%)
- Take-rate scales with avg order value ($1.8K–$85K)
- Dynamic (operator + USC margin + season)
- 10% deposit at booking
- Balance auto-charge 30d pre-trip
- Negotiated MSA pricing for corporate accounts
What this canvas tells design
The UVP and Unfair Advantage do most of the work — every screen should restate "35 years, FEMA, Trip Guarantee" in some form. The Key Metrics row tells us what to instrument: every flow needs measurable conversion. The Channels row tells us the SEO surface (city/route/trip-type/comparison) and the Account surface are co-equal priorities, because Channels covers both Awareness and Retention.
2.2 SWOT
| Helpful · achieving the rebuild's goal | Harmful · achieving the rebuild's goal | |
|---|---|---|
| Internal (org attributes) |
STRENGTHS
UX leverage: Surface these everywhere. Trust badges, logo wall, founder story page, "since 1990" in nav, DOT/MC numbers in footer. |
WEAKNESSES
UX leverage: Trip Guarantee directly addresses cancellation reputation. Instant quote + dashboard + account close the product gaps. |
| External (environment) |
OPPORTUNITIES
UX leverage: Build the Account layer competitors haven't. Programmatic SEO templates capture organic ahead of competitor catch-up. |
THREATS
UX leverage: Build switching costs via Account (sticky data). Lean harder on federal / regulatory advantages competitors can't replicate. |
Strategic implications · S-O · W-O · S-T · W-T
S-O · Use strengths to capture opportunities
- Federal-grade SEO surface. Build a "/government" + "/disaster-response" cluster nobody can match.
- Convert tenure into trust-on-screen. Founder story + 300K trip counter + FEMA case study on landing.
- Use SubOut.com's existing supply data to power the instant-quote UX competitors approximate.
W-O · Overcome weaknesses by exploiting opportunities
- Ship the Account layer first. The biggest competitor gap is the biggest USC gap — closing it is a double win.
- Programmatic route pages close the SEO gap with content competitors don't have either.
- Trip Guarantee turns the BBB cancellation history into proof we know how to handle it.
S-T · Use strengths to avoid threats
- Lean on government & F500 credentials to defend the high-LTV B2B segment from CharterUP's product-led push.
- 9.3 NPS is a moat against new-entrant Uber Charter — surface in every comparison.
- 44-state operator network is the credible answer to "What if my operator cancels?"
W-T · Minimize weaknesses, avoid threats
- Speed-of-iteration risk. Modern stack (Vercel + Next.js) is non-negotiable so we can ship as fast as CharterUP.
- Don't pick a fight on raw city-page volume with GoGo — win on route depth + comparison pages instead.
- Lock in repeat corporate accounts before Uber Charter scales its motorcoach product.
2.3 Competitor Analysis
Competitor identification
Direct (same solution, same buyer)
- CharterUP — instant-quote marketplace, founded 2018, ~$50M+ raised
- GoGo Charters — broker, founded 2012, phone-driven
- BookBuses — NY-based broker, smaller
Indirect (different solution, same job)
- Local operator direct (Coach USA, Greyhound charter division)
- Limousine / sprinter van companies
- Internal employer motorpools
- Group-rate Amtrak / commercial bus (Megabus)
Substitute (non-consumption)
- "Everyone drives themselves" (the most common alternative)
- Rideshare + caravan
- Postpone / cancel the event
Competitor profile · CharterUP
| Founded · HQ · Funding | 2018 · Atlanta GA · VC-backed (multiple rounds) |
| Target segment | Mass-market group travel + recurring corporate; "Fortune 500 companies and businesses of all sizes" |
| Positioning | "The first and only marketplace that provides real-time quotes and availability." 60-second booking is the headline promise. |
| Pricing model | Dynamic, marketplace-priced, 10% deposit at booking, balance due per operator policy. Prices on marketplace are non-negotiable. |
| Key features | Instant quote · real-time inventory · operator safety ratings · on-time % · reviews · self-serve checkout · live tracking · driver messaging · 24/7 phone |
| UX strengths | Product-led, fast, real-time data exposed to consumer, strong city-page SEO, modern stack, mobile-first |
| UX weaknesses | Less authority on enterprise/government, "feels startup", limited account/recurring features, instant-book → operator-cancel risk surfaces in reviews |
| User sentiment | Positive on speed and ease; mixed on operator quality variance; some negative for last-minute reallocations |
Competitor profile · GoGo Charters
| Founded · HQ · Funding | 2012 · Atlanta GA · privately held |
| Target segment | Wide — leans heavily on city-specific group lead-gen (weddings, schools, sports) |
| Positioning | "Personalized quote in a timely fashion." Phone-first; "24/7 live reservation agents." |
| Pricing model | Email-PDF quote → call to confirm → 10% deposit → balance due 30 days pre-trip |
| Key features | Massive city-page SEO footprint · local phone numbers per metro · published price-range pages · 24/7 sales |
| UX strengths | SEO breadth (hundreds of city pages), trust-friendly tone, transparent pricing FAQ, fast phone response |
| UX weaknesses | No instant online quote, no self-serve booking, no account, no tracking, no operator profiles, generic content templates |
| User sentiment | Positive on customer service; quote-to-book friction is the most cited complaint |
Feature comparison matrix
| Feature | USC (today) | USC (proposed) | CharterUP | GoGo |
|---|---|---|---|---|
| Instant online quote | N | Y | Y | N |
| Self-serve checkout | N | Y | Y | N |
| Operator profile (safety, ratings, on-time %) | N | Y | Y | N |
| Live trip tracking + driver message | N | Y | Y | N |
| Trip Guarantee (110% refund + backup) | N | Y | P | N |
| Federal / GSA contractor | Y | Y | N | N |
| Recurring shuttle / account product | N | Y | N | N |
| Programmatic route pages (A→B) | N | Y | P | P |
| City pages (programmatic depth) | P | Y | Y | Y |
| Published pricing | N | Y | Y | P |
| Tenure / scale credibility | 35y | 35y | 8y | 14y |
| 24/7 phone & chat support | Y | Y | Y | Y |
Positioning map · Trust × Speed
The two axes that matter most to charter-bus buyers are trust the operator will show up (vertical) and speed to a real price (horizontal). Plotting the field:
The empty top-right quadrant is the white space. Both axes are needed: speed alone (CharterUP) doesn't beat the trust deficit; trust alone (USC today) doesn't survive the comparison-shopping buyer. The proposed USC owns the corner by combining them.
Competitive insights
Table stakes (must have to compete)
- Instant online quote (under 60 seconds, no phone call)
- Self-serve checkout with 10% deposit
- Photos + reviews + on-time data per operator
- 24/7 phone support & chat
- Live trip tracking + driver communication
- Mobile-responsive end-to-end
Differentiators (where USC wins)
- 35-year track record & 300K+ trips · Cialdini authority
- GSA + FEMA + F500 credentials
- Public Trip Guarantee with 110% refund + 2hr backup SLA
- Largest operator network (7,000+ vehicles)
- Team Account product for recurring B2B (un-fought territory)
Gaps to fill (catching up)
- Real-time inventory + pricing on consumer site
- Programmatic city-page depth
- Published per-trip-type pricing pages
- Modern stack & CWV-tier perf
UX opportunities (competitor weakness)
- Account dashboard with cost centers + consolidated invoicing (CharterUP & GoGo: neither has it)
- Route pages (NYC→Boston style) — competitors thin here
- "vs CharterUP" comparison page (high-intent bottom-funnel)
- Federal / disaster-relief micro-site (uncontested by competitors)
2.4 Porter's Five Forces
| Force | Score / 5 | Why this score | UX response |
|---|---|---|---|
| 1. Threat of new entrants | 4 | Capital to enter as a broker is modest, regulatory hurdles are state-level (passable), and there's a clear playbook (CharterUP). Uber Charter has already announced motorcoach product. Operator-supply is plentiful. The technology layer is the actual moat — and it's getting cheaper. | Move fast. Establish UX patterns users come to expect (instant quote, dashboard, account). Build network effects via account data & trust. |
| 2. Bargaining power of suppliers (bus operators) | 3 | Operator supply is fragmented (thousands of small motorcoach operators); USC's network has 7,000+ vehicles. But during peak season + in major metros, supply tightens. Operators can multi-home across brokers freely; switching cost is near zero. | Operator portal (SubOut.com refresh) is critical — supplier loyalty becomes a UX win. Show operators their tier, payout cadence, & trip allocation transparency to keep them engaged. |
| 3. Bargaining power of buyers | 4 | Buyers have many alternatives, low switching cost, and increasingly high price/info transparency (CharterUP made instant quotes the new baseline). Corporate buyers in particular have leverage on price for recurring routes. | Reduce friction (instant quote, self-serve checkout). Build switching costs via Account (saved data, recurring routes, MSAs). Personalization & team features create lock-in. |
| 4. Threat of substitutes | 3 | "Everyone drives themselves" remains the most common alternative for small/mid groups. Vans + rideshare caravans & commercial bus (Megabus, Amtrak group) substitute for some trips. But for ≥30-pax groups or formal events, substitutes are limited. | Make the value of not driving yourself overwhelmingly clear — total cost calculators, time-savings stats, safety records. Position against the substitute, not just direct competitors. |
| 5. Competitive rivalry | 4 | Multiple well-resourced brokers (CharterUP VC-backed; GoGo entrenched in SEO). Industry growth is moderate (~5–7% CAGR). Differentiation is mostly UX + trust, not service itself. Exit barriers are low (asset-light brokerage). | UX must be a true differentiator, not parity. Focus on delight (the dashboard, the trip-guarantee moment, the account experience). High visual quality is now a competitive necessity, not a polish line item. |
Total: 18 / 25 · INTENSE competitive structure
Industry interpretation per Porter: "Intense competition, differentiation critical." This is consistent with what the SWOT and competitor analysis surfaced — UX is no longer a polish layer in this market, it's table stakes and the wedge. Buyer power and new-entrant threat are the two highest forces; the UX response to both is the same: build switching costs through the Account layer competitors haven't shipped.
2.5 Business context → UX priorities
| Business insight (from above) | UX priority that follows | Where it shows up |
|---|---|---|
| Revenue = brokerage commission per trip | Optimize conversion funnel; reduce checkout friction; raise avg order value via amenity upsells | Hero quote builder · Trip details · Checkout (single page) |
| High buyer power (commodity threat) | Increase switching costs via personalization & saved-state. Build habit-forming features. | Saved quotes · Magic links · Account dashboard · Recurring shuttles |
| High new-entrant threat (Uber Charter) | Ship fast · establish habit loops · own the proprietary credentials competitors lack | Federal-grade trust band · FEMA case study · GSA-specific landing pages |
| Strong direct competitor (CharterUP) | Differentiate on UX and on credibility · find underserved segments | Account product (B2B) · Government / disaster-response cluster · Comparison pages |
| Substitute = "drive yourself" | Quantify cost / time / safety advantage in copy & calculator | City & trip-type landing pages · Pricing transparency surfaces |
| Tenure as moat | Surface aggressively, often, in plain English; convert to figures of merit | Persistent "Since 1990 · 300K trips · FEMA" band · About page · Footer |
Chunk 2 verdict · ready to audit the current site
Business context is mapped end-to-end: who we're for, what we sell, who else is in the room, and which UX priorities the structural forces dictate. Next chunk audits the current US Coachways site against Norman's six design principles — the diagnostic for what's broken about how it currently works (Section 03).
Auditing the current US Coachways site against Norman's six principles.
Norman's framework is a diagnostic: when an interface frustrates users, at least one of the six principles has been violated. Below each principle is applied to the current uscoachways.com — not the proposed redesign — to surface what the redesign must fix and why. Then the Gulfs of Execution and Evaluation locate the friction in time.
3.1 The six principles, applied
Affordances
An affordance is the relationship between an object's properties and what an agent can do with it. The question for design isn't "does it exist?" but "can the user perceive it?"
Current state: The homepage offers an RFQ form, a phone number, and several "Get a Quote" links — but no element affords instant pricing because none exists. The site invites action that the back-end can't fulfill in real time, so every "Get Quote" click is actually "wait for a callback."
Fix: Build the affordance that competitors created the expectation for. Inline quote builder on the hero, results page that renders actual prices. The interface must afford what the buyer actually wants to do.
Signifiers
Perceivable cues that communicate where action should take place and how. Norman: "Signifiers are of far more importance to designers than are affordances."
Current state: The current homepage uses small, low-contrast CTAs labeled "Request Quote" and "Get Started" — generic conventions but no signal of speed, no signal of price, no signal of the Trip Guarantee that doesn't yet exist. The 35-year heritage is a static badge image, not a visible signifier of authority.
Fix: Every important action gets a signifier with a benefit. "See prices in 60 seconds" not "Get Quote." Persistent trust band signifies guarantee. Federal / FEMA logos signify authority. Live "23 buses available now" signifies real-time inventory.
Mapping
The relationship between controls and their effects. Good mapping arranges controls spatially or logically to mirror what they control.
Current state: Mostly fine — the site uses standard web conventions. The one mismapped element is the "Solutions" section, which lists trip types in alphabetical order rather than by buyer frequency. Wedding coordinators don't think "I need C for Charter" — they think "I need a wedding bus."
Fix: Solutions grid orders by trip-type popularity + audience archetype, not alphabet. Quote-builder fields in the order a coordinator already thinks: trip type → where → when → who → contact.
Feedback
Immediate, informative response to user action. Without feedback, the user can't tell whether the system received the input, what state it's now in, or what to do next.
Current state: The largest feedback hole in the current product. Submit a quote request and the user gets a generic "Thank you — we'll be in touch" page. No price, no time estimate, no operator information, no next step they can take. The interaction ends there. This is the conversion leak.
Fix: Replace the dead-end thank-you page with a Quote Results page that shows real prices, operators, photos, and next actions. Every step of the new quote builder gets inline status. Live tracking dashboard provides post-booking feedback that has never existed on USC.
Constraints
Limits on action that prevent error and guide the user toward correct choices. Norman identifies four types: physical, cultural, semantic, logical.
Current state: The quote form has weak constraints. Date fields accept past dates. Passenger count accepts impossible values. No constraint on the <48-hour booking window where expedited fees apply. The user can submit a malformed request and get a confused callback.
Fix: Logical constraints on every field. Date pickers reject past dates. Passenger stepper bounded 1–56 with overflow handled (custom fleet). Cultural constraint surfaces expedited fee preemptively when <48h is selected.
Conceptual Models
The model in the user's head of how the system works. When the user's model and the system's actual behavior diverge, every interaction becomes a guess.
Current state: The user's model of USC today is fundamentally "broker who calls me back." The site reinforces that model. But CharterUP has taught the market a new model — "marketplace where I see prices and book." Buyers arrive on USC expecting that and find the old model. Cognitive friction is immediate.
Fix: The redesign teaches a hybrid model in 5 seconds: "Real prices instantly · backed by a 35-year broker." The "How USC works" section makes the conceptual model explicit. The Trip Guarantee anchors the trust half. The instant quote anchors the marketplace half.
3.2 Gulf of Execution & Gulf of Evaluation
Gulf of Execution · current site
"I want a real price for a 56-pax bus from NYC to Boston on Aug 14 — what do I do?"
- Click "Get a Quote" → land on a long RFQ form (gulf widens — many decisions before any output)
- Fill out 12+ fields, most about contact and corporate info, not the trip
- Submit → "Thank you" page (no information)
- Wait hours or days for a callback (gulf is still open)
Distance: ~10 steps + asynchronous wait. The user's intent ("price") never connects directly to the system's capability.
Gulf of Execution · proposed site
Same intent.
- See inline quote builder on the hero (gulf narrows immediately — affordance visible)
- Fill 3 fields: pickup, destination, date+pax
- See live prices for 3–6 buses with photos and operator ratings (gulf closed)
Distance: 3 fields, ~60 seconds, output is the thing the user wanted.
Gulf of Evaluation · current site
"Did my request go through? When will I hear back? Is my trip even possible?"
- Generic thank-you page provides no system status (gulf wide open)
- Email confirmation arrives later, sometimes — depends on planner response
- No way to view request status, no way to modify it
- After booking: no dashboard, no tracking, no driver info — only an email
Distance: The system gives the user no way to evaluate what it has done with their input — failure of Nielsen H1 too.
Gulf of Evaluation · proposed site
Same questions.
- Quote results page = direct evaluation: prices visible, operators visible, availability live
- Auto-saved state with magic link confirms the system holds the request
- Trip details + checkout each have running totals (math is visible)
- Post-booking dashboard shows trip state, pre-trip checklist, live tracking T-2h
Distance: The system's state is always perceivable. Nielsen H1 (Visibility) and H10 (Help) both satisfied.
3.3 Seven Stages of Action · primary booking interaction
| Stage | What the user is doing | Current site · friction | Proposed site · resolution |
|---|---|---|---|
| 1. Form goal | "I need a 56-pax bus from NYC → Boston on Aug 14." | No friction (goal is the user's; site doesn't shape it). | Same. Hero copy validates the goal is in scope. |
| 2. Plan action | "I should go to USC's site and get a quote." | SEO city page lands them here, but the page doesn't tell them what to do first. | Hero quote builder is the obvious first action; subhead reinforces it. |
| 3. Specify sequence | "Fill the form, hit submit." | Form is long, mixes trip + contact info, no progress indicator. Sequence is unclear. | 4-step stepper makes the sequence explicit. Each step has one decision domain. |
| 4. Perform action | "Type, click, submit." | Many fields are required that the buyer doesn't have yet (corporate info, exact return time). | Required fields trimmed to what's actually needed for pricing. Auto-save lets buyer pause. |
| 5. Perceive state | "What did the system do?" | Failure point. Thank-you page says nothing about state. No price, no operator, no ETA on callback. | Results page shows the system's state: 6 buses found, prices, operators, availability locked 24hr. |
| 6. Interpret state | "What does this mean for my trip?" | User must interpret silence as "they got my request" — but it could mean a server error. | Page literally lists matching buses with prices the user can compare and act on. |
| 7. Evaluate outcome | "Did I get what I wanted?" | Failure point. Cannot evaluate until callback. Many buyers leave for a competitor in the gap. | User evaluates immediately. Either books, saves quote, or talks to planner — all visible options. |
Diagnosis
The current site fails at stages 5–7 (perceive → interpret → evaluate state), which together constitute the Gulf of Evaluation. That gap is where every comparison-shopping buyer abandons USC for CharterUP — not because CharterUP is fundamentally better, but because CharterUP completes the seven-stage loop in one session. This is the single highest-leverage UX problem to solve.
Chunk 3 verdict · ready for the foundations audit
Norman's diagnostic locates the current friction. Next chunk applies Krug's three laws and Garrett's five planes to the same site — Krug from the surface (where most usability failures actually live) and Garrett structurally (where strategic mismatches live).
The current site evaluated against Krug's three laws, then re-framed using Garrett's five planes and placed in the Double Diamond.
Where Norman diagnosed the surface friction (Section 03), Krug evaluates whether the current site is even self-evident, Garrett locates which structural plane is broken, and the Double Diamond names which phase of the design process this project is in.
4.1 Krug's three laws, applied
Don't Make Me Think
Current site question marks:
- "Where do I click to get a real price?" — there's no element that signals one is possible.
- "How does USC differ from CharterUP?" — the homepage doesn't say.
- "Is this the right company for my wedding?" — Solutions are buried two clicks deep.
- "What happens after I submit?" — the form does not foreshadow the wait.
Fix: Every above-the-fold element answers one of those questions in five words or fewer. "See prices in 60 seconds" replaces "Get a Quote." "Backed by 35 years + 110% guarantee" replaces silence.
Clicks Don't Matter (If They're Mindless)
Counting hard clicks in the current quote flow:
- Land on homepage — Hard click 1: which of three "Get Quote" CTAs do I trust?
- Arrive on a long form — Hard click 2: what's the difference between "Group Type" and "Service Type"?
- Trip date / pax — easy
- Contact info — Hard click 3: do I have to enter company info if I'm a personal booking?
- Submit — Hard click 4: what just happened? Should I close this tab or wait?
Fix: The 4-step builder in the proposed design has zero hard clicks: trip type tiles (visual), pickup/destination (autocomplete), pax (stepper), contact (last). Each decision has obvious next action — Krug's "mindless click" goal.
Get Rid of Half the Words
Happy talk on current homepage:
- "Welcome to US Coachways…" — 14 words the buyer scrolls past
- "We pride ourselves on delivering…" — 22 words of self-praise
- "Our team works hard to…" — 18 words explaining the obvious
- Total above-the-fold copy: ~280 words. Estimated useful: ~80.
Fix: Proposed hero is ~50 words above the fold. Every word does work: the H1 sells the speed, the lede sells the trust, the meta-row sells the credentials. No happy talk survived.
Scanning, Not Reading
Current scan path: Logo → cluttered nav (8+ items) → carousel of feel-good photos → wall of text → "Get Quote" button placed below the fold. The user's eye finds nothing useful in the first 2 seconds.
Fix: Visual hierarchy on the proposed hero is calibrated for a 2-second scan: eye lands on H1 → drops to red CTA → flicks right to the inline quote builder. The trust strip + 5-CTA row layer in second-pass info for a 5-second scan.
4.2 Garrett's five planes · the structural commitment
| Plane | Software / functionality side | Content / information side |
|---|---|---|
| 5. Surface What it looks like |
Two directions explored.
Both keep US Coachways blue/red — this is a refresh, not a rebrand. Detailed in Hi-fi A & Hi-fi B. |
|
| 4. Skeleton Where things go |
Interface + navigation design.
|
Information design.
Detailed in Wireframes (11 screens, mobile + desktop pairs). |
| 3. Structure How it works |
Interaction design.
|
Information architecture.
Detailed in IA / sitemap section of the Strategy Book. |
| 2. Scope What we build |
Functional specifications.
Out of v1: Native mobile app · AI trip planner · International · RFP/procurement marketplace. |
Content requirements.
|
| 1. Strategy Why we build |
User needs.
|
Business objectives (measurable).
Sourced from Strategy Check § 1; assumptions tagged there. |
How the planes interlock for this project
The current site fails on the Structure plane — the interaction patterns and IA were designed for a 2010-era broker, not a 2026 marketplace. That's why surface-level tweaks have never moved the needle. Garrett's dependency principle is the warning: every screen on the Skeleton plane (the wireframes) is downstream of the Structure-level commitment to "instant quote → self-serve → dashboard → account." Change that commitment and every wireframe changes. Lock it now or pay later.
4.3 Double Diamond · where this project is
Competitive audit · SubOut research · BBB review
9 audiences · 3 archetypes"] DEF["DEFINE · converge
Problem statement · Top 5 CTAs
Trust Guarantee policy outline"] DISC --> DEF end subgraph D2["Diamond 2 · Solution space"] direction LR DEV["DEVELOP · diverge
11 wireframes · 2 hi-fi directions
Interactive quote builder"] DEL["DELIVER · converge
Design tokens · Atomic inventory
Deployment Code · Phased roadmap"] DEV --> DEL end DEF --> DEV classDef done fill:#dcefe1,stroke:#1b8a4a,color:#0e4a23; classDef live fill:#fff4d6,stroke:#d97706,color:#5a3e02; classDef next fill:#eaf2fb,stroke:#1b4fa8,color:#0b2a4a; class DISC,DEF done class DEV live class DEL next
| Phase | Status | Artifacts produced (so far) | What converges this phase |
|---|---|---|---|
| Discover · diverge | Complete | Competitive audit (CharterUP + GoGo + indirect substitutes), SubOut.com research, BBB / Trustpilot review, 9 audience segments enumerated, 3 archetypes identified. | Understanding of the problem space, breadth-first. Not a problem statement yet. |
| Define · converge | Complete (Sections 01–04 of this dossier) | Strategy Check, Business Context (Lean Canvas, SWOT, Porter, Competitor matrix), Norman + Krug + Garrett audits of the current site. Top 5 differentiator CTAs. | A single thesis: "USC's wedge is instant quote + the only public Trip Guarantee + Account layer competitors haven't shipped." See § 08 for the synthesized problem statement. |
| Develop · diverge | In progress | 11 grayscale wireframes (mobile + desktop pairs), 2 hi-fi visual directions on the homepage, interactive 4-step quote builder, dashboard, SEO city template. Mermaid flow for the primary booking journey. | Multiple solution alternatives at multiple fidelities, so the user can compare and the team can converge. |
| Deliver · converge | Next (Sections 11–14 of this dossier) | Pending: heuristic eval, UX-pattern inventory, atomic-design component spec, Developer Deployment Code, 14-week phased roadmap. | One specified, prioritized, dev-ready solution. Single source of truth for build. |
Eisermann's caveat applies
The original creator of the Double Diamond (Richard Eisermann, 2023) warned that teams treat the model as a rigid linear process when real design loops, backtracks, and overlaps. This project is using it as a thinking tool, not a gospel. Expect Develop to surface gaps that push us briefly back into Discover (e.g. primary-research interviews with David-archetype procurement leads, flagged as Assumption 2 in § 01). That's normal, not failure.
Chunk 4 verdict · ready for primary research synthesis
Foundations are audited. The current site fails Krug's Law 1 (it makes you think), the structural plane is the root cause (per Garrett), and the project sits in the Develop phase of Diamond 2. Next chunk produces the JTBD personas that anchor every persona-tagged decision elsewhere in this dossier.
Three archetypes, framed by the job they're hiring USC to do.
The nine audience segments from intake collapse into three jobs-to-be-done patterns. Each persona uses Christensen's full template — context, job statement, functional/emotional/social needs, current state, success criteria, constraints, emotional landscape. Every claim about behavior is confidence-tagged: VALIDATED = direct evidence; INFERRED = extrapolated from competitor reviews and industry data; ASSUMED = domain knowledge, needs primary research.
5.1 Maya · The Coordinator
Office Manager · Wedding Planner · Event Coordinator · 35–48 · 42% of traffic · avg trip $4.2K · primary target
ARCHETYPE: Maya, the Coordinator ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CONTEXT ─────── When: A group needs to move and she's the one responsible. Boss said "handle it"; bride said "you're in charge of the shuttle." Where: At her desk, between 20 other tasks. Phone is open. Frequency: 4–12 trips per year on average; spikes around event season. THE JOB ─────── Primary Job: Lock in a bus she trusts, get the price approved, move on to the next ten things on her list. Job Statement: "When I'm responsible for getting 60 people somewhere on time, I want to lock in a bus I trust and pay for it without seven phone calls, so I can move on to the next ten things on my list." NEEDS HIERARCHY ─────────────── Functional Need: A real price, a real bus photo, a booking she can confirm in one session. Emotional Need: Confidence she won't be the person whose bus didn't show up. Social Need: An itemized invoice she can forward to finance without explanation. CURRENT STATE ───────────── Current Solution: Googles "charter bus rental [city]" → fills RFQ on 3 sites → fields callbacks for two days → picks one → PDF quote → another call → manual deposit. Pain Points: Phone tag · opaque pricing · no visual of vehicle · feels like buying a car blindfolded. Workarounds: Books the same operator every time even if overpriced, because she trusts them to show up. SUCCESS CRITERIA ──────────────── Success Metric: Booked in under 15 minutes, no follow-up calls needed. Quality Threshold: Bus has photos · operator has ≥ 4.5 rating · cancellation terms understood up front. Time Expectation: < 10 minutes from landing on site to deposit charged. CONSTRAINTS ─────────── Budget: Set by boss / bride / event budget; she manages within it. Time: Scarcest resource. She is interrupted constantly. Skills: Comfortable with web apps; not a transportation expert. Access: Mostly desktop in the office; occasional mobile finalize. EMOTIONAL LANDSCAPE ─────────────────── BEFORE (Trigger State) ├── Primary Emotion: Mild anxiety · "I've never booked a 56-pax bus before" ├── Intensity: 3 / 5 └── Internal Dialogue: "How do I even know if a price is fair?" DURING (Engagement State) ├── Desired Emotion: Control + speed ├── Anxiety Triggers: phone-only flow · vague pricing · "we'll get back to you" └── Trust Requirements: real operator name, real photo, written cancel policy AFTER (Outcome State) ├── Success Emotion: Quiet relief · "Bus is locked, on to the next thing" ├── Failure Emotion: Panic + blame · "I should have called more places" └── Share Likelihood: High, if great. Coordinators network with coordinators. CONFIDENCE ────────── Context: INFERRED (USC's existing customer mix is heavily this archetype) Job statement: ASSUMED (validation: 5–8 coordinator interviews recommended) Success metric: ASSUMED (CharterUP's "60 seconds" target is the proxy benchmark)
Pain points · ranked
- Phone tag with brokers (lost hours)
- Opaque pricing — can't compare without revealing identity
- No photo of the actual vehicle
- Forced to commit before seeing operator name
- No way to forward a clean quote to finance
What "win" looks like for Maya
- Real price visible in 60 seconds
- Vehicle photo + operator rating before commit
- Save-quote magic link she can finalize after boss approves
- Itemized PDF invoice auto-emailed
- "I never had to pick up the phone."
Design implications · Maya is the volume archetype
Every primary surface (hero, quote builder, results, checkout) is designed for Maya first. She's also the easiest to validate with — primary research priority. The save-quote → SMS magic-link flow exists specifically because of her "interrupted constantly" constraint. The single-page checkout exists because her boss approves the price, then she finalizes — two sessions, one purchase.
5.2 David · The Procurement Lead
Operations Director · VP Procurement · Government contracting officer · 40–58 · 8% of traffic · avg contract $85K · highest LTV cohort
ARCHETYPE: David, the Procurement Lead ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CONTEXT ─────── When: Standing up a new employee shuttle, a conference, a multi-year federal contract, or a hospital evacuation drill. Where: Mostly desktop, often with a contracts team on a shared screen. Sometimes a vendor portal his org mandates he use. Frequency: 2–10 contracted programs per year + ad-hoc rush jobs. THE JOB ─────── Primary Job: Pick a vendor he can defend in an audit and a board review, on a contract he can sign once and stop worrying about. Job Statement: "When I'm setting up recurring employee shuttles or large-event transport, I want a vendor that can demonstrate safety, scale, and a contract I can defend in audit, so I can sign once and stop worrying about it." NEEDS HIERARCHY ─────────────── Functional Need: Vendor due-diligence packet · DOT/MC numbers · insurance COI · safety record · MSA-ready terms · consolidated monthly invoice across all trips. Emotional Need: The boring, safe choice. Won't get fired for picking USC. Specifically the opposite of "we picked a startup that ghosted us." Social Need: Internal stakeholders (legal, finance, audit, the board) need to see institutional credentials and a paper trail. CURRENT STATE ───────────── Current Solution: Existing vendor on an MSA, renewed because switching is painful. Or RFP process every 2–3 years that produces ~6 lengthy proposals to compare. Pain Points: Cap-table-style spreadsheets across many one-off bookings · no real-time visibility into what trips are happening · brokers who pitch then disappear · "we'll get back to you" is fatal at this scale. Workarounds: Internal motorpool · stays with incumbent vendor past the point of value · forces ops team to call every trip in by phone. SUCCESS CRITERIA ──────────────── Success Metric: Single account · single invoice · signed MSA · zero missed pickups in 12 months. Quality Threshold: Insurance ≥ $5M · DOT satisfactory · operator-network depth that can survive losing 1 vendor. Time Expectation: RFP cycle ≤ 6 weeks · individual trip booking ≤ 5 min (planner-assisted or self-serve, his choice). CONSTRAINTS ─────────── Budget: Large but accountable. Every dollar reports up. Time: Has time for the contract decision. Has zero time for per-trip operational friction. Skills: High. Comfortable in SAP, Coupa, Salesforce. Knows the procurement vocabulary cold. Access: Desktop · corporate SSO · sometimes air-gapped network for government work. EMOTIONAL LANDSCAPE ─────────────────── BEFORE (Trigger State) ├── Primary Emotion: Scrutiny · "I will be asked why I chose this vendor" ├── Intensity: 4 / 5 during RFP, 2 / 5 between └── Internal Dialogue: "Can this vendor pass our security & insurance review?" DURING (Engagement State) ├── Desired Emotion: Reassurance + control ├── Anxiety Triggers: missing COI · no GSA Schedule listing · vague safety claims · founder photos but no leadership bios └── Trust Requirements: federal contracts as proof · F500 references he can call · SOC-style documentation AFTER (Outcome State) ├── Success Emotion: Invisibility · "Trips happen, board never asks about transportation" ├── Failure Emotion: Career-defining failure · "We're on the front page because a bus didn't show up to FEMA" └── Share Likelihood: Very high, network-driven. Procurement leads swap vendor references constantly. CONFIDENCE ────────── Context: VALIDATED (USC has GSA + FEMA + F500 references on file) Job statement: ASSUMED (validation: 3–5 procurement-lead interviews recommended) Self-serve appetite: ASSUMED (Assumption 2 from § 01 · highest-risk assumption)
Pain points · ranked
- Existing vendor's per-trip booking is phone/email only — operations cost
- No consolidated invoicing across departments & cost centers
- No real-time view of what trips are active, what's coming up
- RFP process for new vendor is 6+ weeks of paperwork
- Switching vendors carries political risk; "we picked the wrong one" is career-defining
What "win" looks like for David
- USC's federal & F500 credentials clear his audit packet at a glance
- Team Account product replaces his spreadsheet (cost centers, PO fields, SSO)
- Consolidated monthly invoice across every shuttle his org runs
- MSA-ready terms — his legal team approves once, every booking thereafter is governed
- SLA-backed Trip Guarantee gives him a clause he can point to in any internal review
Design implications · David is the LTV archetype
David is a small fraction of traffic but a disproportionate share of revenue and stickiness. The For-Business surface (Team Account, federal/GSA landing, MSA download, consolidated billing) exists almost entirely for him. The Trust & About page is built to his evaluation criteria — DOT/MC numbers prominent, leadership bios with credentials, FEMA case study, GSA Schedule reference. His self-serve appetite is the highest-risk assumption in this dossier (see § 01) — primary research with 3–5 procurement leads is the recommended validation before shipping the Team Account product.
5.3 Robin · The Group Lead
Coach · Pastor · Senior club president · Youth-group organizer · 28–70 · 50% of traffic · avg trip $1.8K · SEO target
ARCHETYPE: Robin, the Group Lead ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CONTEXT ─────── When: Volunteering or part-time leading a group somewhere they don't normally go together: tournament, retreat, casino night, choir trip, senior bus outing. Where: At home on the couch, on a phone after work. Sometimes at a community center on a borrowed laptop. Frequency: 1–4 trips per year. Each one matters. THE JOB ─────── Primary Job: Make the bus part of the trip feel like the easy part, so the trip itself feels safe and special. Job Statement: "When I'm taking my team / congregation / club somewhere we've never been together, I want to feel like the bus is the easy part of the day, so the trip itself feels safe and special." NEEDS HIERARCHY ─────────────── Functional Need: A predictable price she can present to the group · the ability to pay a deposit and collect from members over time. Emotional Need: Reassurance. High personal accountability — these are her people, not strangers. The bus going wrong is a personal failure. Social Need: A trip that members talk about positively · the ability to be the person who "did a great job." CURRENT STATE ───────────── Current Solution: Calls 2–3 local operators · asks a friend who booked one last year · ends up at the same broker her sister-in-law used. Pain Points: Doesn't know what to ask for · intimidated by quote forms · worried about hidden fees · scared she's overpaying · scared she's underpaying for a sketchy operator. Workarounds: Asks members to "just drive themselves to the venue" if it gets too hard. Avoids the bus entirely on smaller trips. SUCCESS CRITERIA ──────────────── Success Metric: Members get there on time, get home safely, no one complains, photos go up on Facebook. Quality Threshold: Driver is professional · bus is clean · price matches what was quoted · no surprises. Time Expectation: Researching: 30–60 min over a couple evenings · Booking: ~20 min once she's decided. CONSTRAINTS ─────────── Budget: Tight. Often collecting from members. $1.5K–$2.5K typical. Time: Has evenings; doesn't want to spend them on hold. Skills: Medium. Comfortable with Facebook, email, web forms. Not comfortable with anything that feels enterprise-y. Access: Mostly mobile (60%+). Couch + phone. EMOTIONAL LANDSCAPE ─────────────────── BEFORE (Trigger State) ├── Primary Emotion: Self-doubt + hope · "I want to do this right" ├── Intensity: 4 / 5 (high personal stakes) └── Internal Dialogue: "What if I pick the wrong one and the kids get stranded?" DURING (Engagement State) ├── Desired Emotion: Hand-held + confident ├── Anxiety Triggers: too many fields · jargon · sketchy-looking site · no phone number └── Trust Requirements: real reviews (especially from people like her), a phone option that's a real person, transparent total cost AFTER (Outcome State) ├── Success Emotion: Pride + relief · "Everyone had a great day, and I made it happen" ├── Failure Emotion: Public shame · "I'm the one who picked the bus that didn't show" └── Share Likelihood: Very high. Word-of-mouth in churches, schools, clubs is enormous. CONFIDENCE ────────── Context: INFERRED (large share of competitor city-page traffic comes from this archetype) Job statement: ASSUMED (validation: 5+ group-leader intercept interviews recommended) Mobile-first: INFERRED (industry data + competitor analytics patterns)
Pain points · ranked
- Intimidated by long forms · jargon makes her feel out of her depth
- Worries about hidden fees ("what does the quote actually include?")
- Worries about picking a low-quality operator to save money
- Needs a phone option but doesn't want to be sold to
- Personal accountability is huge — failure is socially visible
What "win" looks like for Robin
- SEO landing page in her language, not "transportation logistics"
- Total cost shown upfront, no fee surprises
- Real reviews from people like her ("Wedding coordinator · Brooklyn")
- Trip Guarantee in plain English ("Backup bus in 2 hrs or 110% back")
- Phone backup that's a real person, not a sales script
Design implications · Robin is the SEO archetype
Robin is the largest cohort by volume and the smallest by trip value — exactly the cohort SEO converts. Every city / route / trip-type landing page is written for her: H1s in her vocabulary, real reviews filtered by trip type, transparent pricing tables, and a phone option that's never more than one tap away. Mobile-first design is non-negotiable for this archetype. The Trip Guarantee, written in plain English, is the trust unlock that converts her — Cialdini's commitment principle aimed at the highest-anxiety buyer.
5.4 Cross-persona synthesis
Each persona maps to a different surface of the redesigned product. Maya drives the homepage and quote builder. David drives the For-Business surface. Robin drives the SEO templates. The three are not competing for design attention — they each own a different door into the same product.
| Dimension | Maya · Coordinator | David · Procurement | Robin · Group Lead |
|---|---|---|---|
| Share of traffic | 42% | 8% | 50% |
| Avg trip value | $4.2K | $85K contracts | $1.8K |
| Primary surface | Homepage · Quote builder · Checkout | For-Business · Team Account · Federal landing | SEO city/route/trip-type templates |
| Primary device | Desktop > mobile | Desktop · corporate SSO | Mobile > desktop |
| Self-serve appetite | High | ASSUMED high on standard trips · planner on complex | Medium · phone backup essential |
| Trust signal that matters most | Vehicle photo + operator rating | FEMA + GSA + F500 references | Real reviews from people like her + plain-English Trip Guarantee |
| Failure emotion | Blame ("I should have called more places") | Career-defining ("We're on the front page") | Public shame ("I picked the wrong bus") |
| Magic-link relevance | Critical · interrupted constantly | Low · he sits with it end-to-end | Medium · couch sessions |
| Win metric | Booked in < 15 min, no calls | One MSA, one invoice, zero misses | Group says "you did a great job" |
| Research validation priority | P0 · easiest to recruit | P0 · highest-risk assumption | P1 · intercept interviews |
Three persona-validation gaps to close before final dev commit
- Maya · job-statement validation. Recruit 5–8 coordinators (wedding planners, office managers, event organizers) for 30-min jobs-to-be-done interviews. Test the "60 seconds, no call" promise specifically.
- David · self-serve appetite. Recruit 3–5 corporate procurement / hospital ops / government contracting leads. Test whether they'd self-serve on a standard recurring shuttle vs. always involving a planner. This is the highest-risk assumption in the entire dossier.
- Robin · trust-signal hierarchy. Recruit 5+ group leaders (coaches, religious leaders, senior club presidents) via intercept on competitor city pages. Test which trust signals actually move them — real reviews vs. DOT numbers vs. Trip Guarantee vs. phone number.
All three gaps are addressable in a single 2-week research sprint inserted between Develop and Deliver phases of the Double Diamond (§ 4.3).
Chunk 5 verdict · personas locked, ready for empathy maps
Three archetypes are committed. Every persona-tagged decision in this dossier — every wireframe annotation, every hi-fi component, every CTA priority — traces to one of the three job statements above. Next chunk produces a Dave Gray empathy map per persona, which adds the verbatim-quote layer that the JTBD template doesn't capture.
What each persona says, thinks, feels, and does — separated, because the gap between them is where insight lives.
The JTBD template (Section 05) framed the job. The empathy map adds the verbatim layer the template doesn't capture — the words coordinators actually use, the thoughts they don't say out loud, the emotions that drive their behavior. Where Says and Does disagree, that's the highest-leverage design opportunity in the dossier.
Source-data caveat
The Says quadrant ideally contains real verbatim quotes from primary interviews. We have none. The quotes below are composites built from competitor reviews (Trustpilot, BBB, Google), USC's own reviews, and patterns observed across the broker industry. Confidence tag: INFERRED. Primary-research validation is the same 2-week sprint flagged in § 5.4.
6.1 Empathy Map · Maya, the Coordinator
SAYS · verbatim (composite)
"I just need someone to give me a real price so I can run it past my boss."
"The wedding is in six weeks and I still don't have the shuttle locked."
"I've been on the phone three days with three companies and I still don't know which one is the best price."
"I'm not paying $4,000 for a bus I haven't seen a photo of."
THINKS · inferred beliefs
- Charter brokers are mostly the same; price + responsiveness is what differs.
- A bus company that's been around a long time is probably safer than a new one.
- If they make me call to get a price, they're probably not the cheapest.
- The first quote I get is rarely the best one — I should get three.
- If something goes wrong, my boss / the bride will blame me, not the bus company.
FEELS · specific emotions
- Mild anxiety · "Is this enough buses for 60 people with luggage?"
- Time-pressure · "I have ten other things due today."
- Skepticism · "Their site says 'best prices' — sure, like everyone."
- Quiet relief · when a deposit confirmation hits her inbox.
- Mild pride · when she forwards a clean invoice to finance without questions.
DOES · observable actions
- Opens 3 competitor tabs simultaneously and fills RFQs on all three.
- Calls the phone number on the homepage if no online price appears within ~5 minutes.
- Screenshots quotes and emails them to her boss / event lead for approval.
- Re-books the operator she used last time on autopilot if it went well.
- Walks away from the tab and comes back 6 hours later when interrupted (which is constantly).
Says/Does gap: She says she'll get three quotes. She actually picks the first one that gives her a real number she can act on — usually the one that responds fastest. The fast quote isn't the best quote; it's the only quote that respected her time.
Pains
- Phone tag eats hours she doesn't have
- Can't compare prices without giving up identity to 3 brokers
- No way to see the actual vehicle before committing
- "We'll get back to you" with no ETA on the response
- Has to re-explain the trip every time she calls back
Gains
- One session, locked in, moved on
- A clean PDF / itemized invoice to forward up
- Photo of the actual bus before she pays
- Day-of-trip status she can share with her event lead
- A vendor she can re-book in one click next time
Key insight · Maya
Maya doesn't actually want three quotes — she wants one quote she can trust enough not to need a second. Speed-of-quote isn't a feature, it's the trust signal. Every minute she waits is evidence the broker isn't equipped for the size of trip she's booking. Design implication: speed → trust → conversion is the same line, in that order.
6.2 Empathy Map · David, the Procurement Lead
SAYS · verbatim (composite)
"Send me the COI and the most recent DOT inspection summary before we go any further."
"I need this on our MSA paper, not yours."
"What's your operator's average on-time percentage across the last 90 days?"
"I don't care about the price right now. I care whether you'll show up in three months on a Sunday at 4 AM."
"Do you have any current federal contract experience?"
THINKS · inferred beliefs
- Anyone can be cheap. Almost no one can be reliable at scale.
- If they can't produce a COI in under 24 hours, they can't operate at the level I need.
- VC-backed startups will pivot or get acquired before my contract is up.
- GSA Schedule existence is a binary credibility filter.
- The reference call I make to a peer matters more than anything on the website.
FEELS · specific emotions
- Scrutiny · "Every decision lands in an audit-review someday."
- Cautious confidence · when the vendor produces documentation without prompting.
- Suppressed irritation · when a sales rep tries to sell instead of answer his questions.
- Quiet satisfaction · when the monthly invoice arrives correctly formatted, on time.
- Acute anxiety · the first time a new vendor runs a real trip — pass/fail moment.
DOES · observable actions
- Pulls the vendor's DOT record on the FMCSA SAFER site before responding to the first email.
- Calls 2–3 peers in his network and asks "have you used them?" before signing anything.
- Sends every contract through his legal team's redlines without exception.
- Insists on a single point-of-contact on the vendor side, will not be juggled across reps.
- Re-uses the same vendor across multiple business units once trust is established.
Says/Does gap: He says he wants to evaluate based on documentation and references. He actually decides in the first 60 seconds on the site, based on whether it looks like a vendor that will produce documentation without being chased. The polish of the For-Business surface signals operational maturity more than the documentation itself.
Pains
- Vendors who pitch instead of answering questions directly
- Missing or out-of-date COI / DOT documentation
- Per-trip phone bookings that consume his ops team's hours
- Spreadsheet sprawl across cost centers, business units, and reps
- Sales reps who churn — relationship continuity broken every 6 months
Gains
- A single MSA his legal team signs once
- SSO-enabled team account; cost-center tagging at booking time
- Consolidated monthly invoicing across every booking
- SLA-backed Trip Guarantee he can point to in any review
- Federal / F500 references he can cite to his board without caveats
Key insight · David
David is buying institutional maturity, not transportation. The actual moving-of-buses part is table stakes — what he's signing for is the existence of an organization that can survive his audit, his board, and his contract renewal. Design implication: every For-Business surface (Team Account dashboard, MSA download, federal landing page, leadership bios) is a credibility prop. The product itself works the same; what changes is the visual and documentary evidence of operational seriousness.
6.3 Empathy Map · Robin, the Group Lead
SAYS · verbatim (composite)
"I just want to know that the bus is going to be there at 7 a.m. on Saturday."
"My sister-in-law used a company last year — what was the name again?"
"Is that the total, or are there fees on top?"
"I don't want to fill out a long form. Can I just talk to someone?"
"I've never done this before. What am I supposed to ask for?"
THINKS · inferred beliefs
- If a website looks complicated, the company is probably complicated to deal with.
- Reviews from people like me matter more than ratings on the site itself.
- If the price is too low, the bus will be old or the driver will be sketchy.
- A company that's been around 30 years probably knows what it's doing.
- If something goes wrong, this is on me — the group will remember.
FEELS · specific emotions
- Self-doubt + hope · "I want to do this right but I don't know what right looks like."
- Quiet pride · when she's the one who organized the trip and it went well.
- Acute embarrassment-risk · the bus not showing up would be a personal humiliation.
- Cautious gratitude · when a human picks up the phone and explains things plainly.
- Distrust · of any site that asks for too much info before showing a price.
DOES · observable actions
- Searches "charter bus rental [her city]" on her phone, often after 8 p.m. on the couch.
- Reads 4–6 reviews before clicking anything.
- Calls the phone number first; web forms are a fallback.
- Asks her group / Facebook community for recommendations before deciding.
- Books the same operator next year if the first trip went well — almost without comparing.
- Shares photos on Facebook after a good trip; the operator name often goes in the post.
Says/Does gap: She says she wants to talk to someone. She actually books from her phone at 9 p.m. on the couch when a competitor offers a clean total-cost page with a phone number visible. Phone number is the safety net; the actual booking happens on screen.
Pains
- Doesn't know the vocabulary — "deadhead miles" is gibberish
- Forms with corporate fields (PO number, cost center) feel hostile
- Worries about hidden fees more than total price
- Worries about picking the wrong operator and getting blamed
- Mobile experience on competitor sites is often broken
Gains
- SEO landing page with H1 in her own words ("Wedding bus rental in Atlanta")
- Total cost shown up front, in plain English, "no hidden fees" stated
- Real reviews from people like her ("Bride · Brooklyn 2024")
- Trip Guarantee in plain language ("Backup bus in 2 hrs or 110% back")
- A real-person phone number visible on every screen — even if she never calls
Key insight · Robin
Robin doesn't need to call. She needs the option to. The phone number is the safety net; its presence converts more than its usage. Design implication: the 24/7 phone number is a permanent UI element on every page — header, hero, footer, cart, dashboard. Removing it (or burying it behind a chatbot) breaks the trust band for the largest cohort of traffic. The number is the trust signal; the website is the transaction.
6.4 Cross-empathy synthesis · the three "Says/Does gaps"
| Persona | What they SAY | What they DO | Design response |
|---|---|---|---|
| Maya | "I'll get three quotes and compare." | Books the first one that gives a real price fast. | Speed-to-quote is the conversion lever, not feature set. 60-second instant quote is the wedge. |
| David | "I'll evaluate based on documentation and references." | Decides in the first 60 seconds based on whether the site looks like it will produce documentation without being chased. | For-Business surface polish is a credibility prop. Wireframes for that surface skew premium: dense data, MSA-ready language, leadership bios. |
| Robin | "I'd rather talk to someone." | Books from her phone at 9 p.m. if the total cost is clear and a phone number is visible. | The phone number is permanent UI on every screen. Plain-English microcopy across every Robin-facing surface (city pages, trip-type pages, mobile quote builder). |
Chunk 6 verdict · empathy mapped, ready for journey
Three empathy maps locked. The biggest unlock from this section: in all three cases, the persona's stated behavior is more conservative than their actual behavior. Designing for what they say produces a slower, fuller product than the one they'll actually use. Designing for what they do — fast quote, polished credibility, visible phone — produces conversion. Next chunk synthesizes both Sections 05 and 06 into a single end-to-end customer journey map with an emotional curve.
Maya's end-to-end journey, from "boss said handle it" to "I'd book USC again."
Personas (§ 05) framed the job. Empathy maps (§ 06) added the verbatim layer. Now the journey map locates every action, thought, emotion, pain, and opportunity along the actual end-to-end experience. The emotional curve below is the design target: keep peaks high at decision and trip day, eliminate the valley where competitors capture comparison shoppers.
Journey: Booking a charter bus for the first time at a new job · Archetype: Maya (Coordinator) · Scenario: 60-pax wedding shuttle, NYC → Brooklyn venue, 8 weeks out · Timeframe: ~3 days from trigger to deposit; ~8 weeks from deposit to advocacy
7.1 The eight phases of Maya's journey
| 1 · Trigger | 2 · Research | 3 · Compare | 4 · Decide | 5 · Book | 6 · Pre-trip | 7 · Trip day | 8 · Advocate | |
|---|---|---|---|---|---|---|---|---|
| Goal | "Figure out where to start." | "Find 2–3 brokers worth quoting." | "Get real prices I can compare." | "Pick the bus & lock it in." | "Pay the deposit, get confirmation." | "Nothing falls through the cracks." | "Get everyone there, safely & on time." | "Decide if I'd use them again." |
| Touchpoints | Google · LinkedIn · slack with a peer | SEO landing · city pages · reviews | Quote forms · phone calls · emails | Quote results · trip details · planner chat | Checkout · Stripe · email confirmation | Dashboard · planner chat · roster upload | Live tracking · driver SMS · share-link | Post-trip review · rebook · referral |
| Actions | Searches "charter bus rental NYC" Asks coworker who booked one last year |
Opens 3–4 tabs (USC, CharterUP, GoGo, local) Reads "About" + "Pricing" on each |
Fills RFQ on all 3 · waits for callbacks · screenshots pricing | Compares quotes · sends to boss for approval · picks one | Enters card · accepts terms · forwards receipt to finance | Confirms headcount · uploads roster · adds amenities · sets day-of contact | Sends live-link to bride & her father · monitors ETA · messages driver if needed | Leaves a Google review if great · books again next event · tells fellow coordinators |
| Thoughts | "Is this 1 bus or 2?" "Have I done this before?" |
"This site looks dated — are they still in business?" "Why does no one show prices?" |
"How am I supposed to compare three quotes with different formats?" "The fast quote was probably the highest." |
"Is this a fair price? I have no benchmark." "What if this operator cancels?" |
"Why do I need to enter my company info — this is a personal booking?" "What if my card is declined and I don't know?" |
"Did I forget to tell them about the second pickup?" "Should I have asked for coolers?" |
"Is the bus on its way?" "What if the driver gets lost finding the venue?" |
"That was easier than last year." "I should send this to the planners at our other offices." |
| Emotion | 😟 Mild anxiety |
🙄 Skeptical |
😩 Frustrated |
😕 Cautious |
😊 Quiet relief |
🙂 Engaged |
😰 Acute spike · then 😌 |
😄 Pride + loyalty |
| Pain | No clear starting point for "how do I do this" | Generic broker sites · no real pricing · phone-first feels antiquated | Largest pain. Quotes arrive in different formats, on different timelines, and reveal her identity to all three vendors | No way to verify "this operator is reliable" — has to trust the broker's claim | Required fields she doesn't have (PO, cost center) — feels like wrong product | No system tells her what to do · she has to remember every detail | Driver-cell number is the only artifact she has · refreshing email frantically | No clean way to rebook the exact same setup · no referral-credit mechanism |
| Opportunity | SEO landing page in her own words that explains the process | USC city page · plain English · phone visible · real reviews | Highest-leverage moment. Quote results page with same-format comparison & operator data | Per-card on-time % · DOT rating · real photos · Trip Guarantee at decision moment | Single-page checkout · optional company fields · clear "what happens next" | Pre-trip checklist · auto-reminders · roster upload · planner chat | Live map + ETA + driver chat + share-link · the dashboard erases the spike | One-click "book this again" · team-account upsell · referral-credit ($250) |
7.2 Emotional curve · current journey vs. proposed
The vertical axis is Maya's felt emotion (Low → High). The red line is the current USC experience; the green line is the proposed redesign. The biggest swing is at phase 3 (Compare) — where today she leaks to a competitor that returned a price first, and where the proposed instant quote keeps her on USC.
7.3 Critical moments
The Compare valley
Maya's lowest emotional point on the current site. Phone-only quotes, asymmetric timelines, three different formats. Half the comparison-shopping buyers who reach this phase leak to CharterUP because CharterUP returns a price first. Killing this valley is the single largest conversion lever.
The Trip-Day spike
Acute anxiety 30 minutes before pickup — peak emotional intensity of the entire journey. Today, USC offers no visibility here. Proposed dashboard (live map, driver chat, ETA) erases the spike and converts it into the second emotional peak.
The End-peak
Kahneman's peak-end rule: people judge experiences by their peak emotion and their ending. Maya's ending today is "no follow-up." Proposed: one-click rebook + team-account upsell + referral-credit. The end-peak determines whether she becomes a 4× annual booker.
7.4 Where David and Robin diverge
| Phase | Maya (Coordinator) | David (Procurement) · divergence | Robin (Group Lead) · divergence |
|---|---|---|---|
| Trigger | Boss/bride says "handle the bus" | Annual contract review · new business unit standing up · disaster-response prep | Group says "we should do a trip" |
| Research | Google search · peer ask | RFP process · existing vendor incumbent check · network references | Google · Facebook ask · "what did so-and-so use last year" |
| Compare | 3 quotes in 3 tabs | 6 RFP responses scored on spreadsheet · 2–3 reference calls | 1–2 quotes max · the second is for sanity-check |
| Decide | Boss approves the price · she picks | Procurement committee · legal redlines · CFO signs | Decides alone on the couch · later announces to group |
| Book | Card on file · 10% deposit · forwards to finance | Signs MSA · ACH on net-30 · cost-center tagging required | Card on file · collects from group via Venmo afterwards |
| Pre-trip | Dashboard checklist · once | Recurring · multiple trips active simultaneously · ops team manages | Calls/texts the planner once to confirm |
| Trip day | Live tracking · shares link with event lead | Hands-off — ops team manages day-of | Glued to the live map · texts driver "are you the right bus?" |
| Advocate | Books again at next event · referrals fellow coordinators | Renews MSA · expands to more business units | Facebook post with photos · operator name in the caption · books again next year |
Three journey valleys to design against
- Compare valley (Maya). Eliminated by instant-quote results page with same-format comparison. Highest-leverage UX investment.
- Trip-day spike (Maya & Robin). Eliminated by live-tracking dashboard with driver chat + share-link.
- Advocacy void (all three). Eliminated by post-trip rebook prompt + team-account upsell + referral credit.
All three are addressable in the v1 build (Weeks 1–14 of the phased roadmap in the Strategy Book).
Chunk 7 verdict · journey mapped, ready for synthesis
The journey makes visible what the personas and empathy maps implied: USC's current site has two emotional valleys that competitors fill, and one missing end-peak that turns one-shot transactions into lifetime customers. Next chunk synthesizes Sections 05–07 into a single problem statement via affinity mapping — the convergence step of Diamond 1 (Define phase).
Synthesizing Sections 02–07 into seven clusters and one committed problem statement.
The Define phase of Diamond 1 converges everything we've discovered into a single thesis. Every observation from competitive audit, personas, empathy maps, and journey gets clustered into themes; each theme produces a labeled insight; the insights collapse into the problem statement the entire Solution Space is designed against.
8.1 Input data · observations being clustered
The "sticky notes" feeding this affinity map come from four sources: competitive audit (§ 02), Norman/Krug/Garrett site audits (§§ 03–04), three JTBD personas (§ 05) + three empathy maps (§ 06), and the eight-phase journey (§ 07). 47 distinct observations were captured; the seven clusters below contain the ones that appeared three or more times.
AFFINITY MAP: US Coachways rebuild ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Data sources: Competitor audit + Site audit + 3 JTBD personas + 3 empathy maps + 8-phase journey Participants: N/A — desk research synthesis (composite quotes) Date: May 2026 Confidence: INFERRED · primary-research validation pending ──────────────────────────────────────────────────────────── Observations captured: 47 Clusters surfaced: 7 Outliers (worth noting): 3
8.2 Seven clusters · ranked by frequency & impact
Speed-of-quote is the trust signal
Key quotes: "I'll get three quotes" → actually picks the first real one." · "The fast quote was probably the highest" · "CharterUP returns a price in 60 seconds" · "Every minute is evidence the broker isn't equipped for this size of trip."
Insight statement: Coordinators struggle to compare brokers fairly because the time-to-real-price varies wildly, and the fastest quote becomes the default winner regardless of fit.
The Compare phase is where the customer is lost
Key quotes: "I'm comparing three different quote formats" · "Half of comparison shoppers leak to CharterUP at this exact moment" · "Lowest emotional point of the entire journey" · "I had to give my contact info to three brokers to find out which was cheapest."
Insight statement: Buyers struggle to make a confident comparison because no broker produces same-format, side-by-side, real-price comparisons — so they default to whichever vendor reduced the friction first.
Documentation polish equals operational maturity
Key quotes: "He decides in the first 60 seconds whether the site looks like it will produce documentation" · "GSA Schedule is a binary credibility filter" · "If they can't produce a COI in 24 hours they can't operate at scale" · "He's buying institutional maturity, not transportation."
Insight statement: Procurement leads struggle to differentiate vendors at scale because the actual service is commodity, so they substitute the polish of the For-Business surface as a proxy for operational seriousness.
Trip-day anxiety is acute and invisible to USC
Key quotes: "Refreshing email frantically 30 minutes before pickup" · "The driver-cell number is the only artifact she has" · "Peak emotional intensity of the entire journey" · "Glued to the live map · texts driver 'are you the right bus?'"
Insight statement: Group leads & coordinators experience peak anxiety on trip day and have no system surface to resolve it, so they either over-call the planner or sit in passive dread — and either way associate USC with the anxiety, not the trip.
The Account layer is unguarded competitive territory
Key quotes: "Neither CharterUP nor GoGo has shipped a real recurring-shuttle product" · "David needs one MSA, one invoice, zero misses" · "Spreadsheet-style tracking across many one-off bookings" · "Cost-center tagging at booking time."
Insight statement: Repeat corporate buyers struggle with broker-managed transportation because every booking starts from zero, no broker remembers them — and the broker that builds the first credible Team Account will lock in the highest-LTV cohort competitors haven't fought for.
The phone number is the safety net, not the channel
Key quotes: "She says she wants to call. She actually books on her phone at 9pm." · "Phone number is a permanent UI element on every page" · "Its presence converts more than its usage" · "Removing it breaks the trust band for the largest cohort of traffic."
Insight statement: First-time and infrequent buyers struggle to commit on screen without a visible human escape hatch, so the phone number functions as a trust prop — converting buyers who never call it.
The end of the journey is missing
Key quotes: "USC's product literally ends at the receipt email" · "No clean way to rebook the exact same setup" · "No referral-credit mechanism" · "The end-peak determines whether she becomes a 4× annual booker (Kahneman peak-end rule)."
Insight statement: Successful bookers struggle to convert into repeat bookers because no on-ramp exists between "trip ended well" and "book the next one" — the highest-trust moment in the journey is wasted.
8.3 Outliers worth noting
Three observations didn't cluster but may be significant. They're noted here so they're not lost in a future research cycle.
- "My sister-in-law used a company last year — what was the name?" (Robin · once) — implies word-of-mouth referral is operationally powerful in the group-lead segment but invisible in USC's analytics. May warrant a referral-code system for friends/family/group-leader networks specifically.
- "Can I pay 10% now and collect from the group later?" (Robin-adjacent · once) — implies a split-payment / "collect from members" feature could remove a friction point for clubs & congregations. Not in v1 scope; flagged for v2 consideration.
- "What if my card is declined and I don't know?" (Maya · once) — implies the silent-failure mode in checkout is a real anxiety; surfacing payment status loudly (not just an error toast) might convert.
8.4 The committed problem statement
Seven clusters collapse into one thesis. Everything in Diamond 2 (wireframes, hi-fi, handoff) is designed against this statement. If a feature doesn't trace back to it, the feature is scope creep.
Primary problem statement
Buyers of group transportation — coordinators, procurement leads, and group leaders — need a way to get a real price they can act on in one session, from a broker they can verify before they pay, with visible accountability on the day of the trip, because today the only brokers that provide instant pricing aren't institutionally trusted, and the only brokers that are institutionally trusted force them through days of phone tag.
The statement names the user (three archetypes), the job (real price + verification + day-of accountability, in one session), and the structural problem (the market has forced buyers to choose between speed and trust because no broker has offered both). USC is uniquely positioned to occupy the empty quadrant — and the rest of this dossier is the design plan for doing so.
Three sub-problem statements · one per persona
Maya · Coordinator
"Coordinators need a real price they can forward to their boss in one session, because phone-tag pricing forces them to default to whichever broker reduced their friction first."
David · Procurement
"Procurement leads need an institutional-grade broker with a Team Account they can manage across cost centers, because the marketplace alternatives are operationally immature and the legacy brokers have no recurring-shuttle product."
Robin · Group Lead
"Group leads need transparent pricing in their own vocabulary on mobile, with a visible phone number as safety net, because the personal-accountability stakes are high and the existing broker sites feel hostile to non-experts."
8.5 How-Might-We questions · the bridge into Solution Space
Each cluster generates a How-Might-We question that the design team can ideate against. These are the prompts the wireframes (Section 11 onward) are answers to.
| Cluster | How-might-we… | Answered in |
|---|---|---|
| A · Speed = trust | …return a real, comparable price in under 60 seconds without sacrificing the human escape hatch? | Hero quote builder · 4-step flow · "Talk to a planner" persistent link |
| B · Compare valley | …produce a same-format, side-by-side comparison of 3–6 buses with operator data and photos, on one page? | Quote Results page · vehicle compare grid · filter rail |
| C · Documentation polish | …signal institutional maturity in 60 seconds to a procurement lead skimming the For-Business surface? | For-Business landing · MSA download · leadership bios · GSA / FEMA page |
| D · Trip-day anxiety | …replace 30 minutes of refreshing email with a dashboard that shows the bus on a map and the driver in a chat? | Customer Dashboard · live tracking · driver SMS bridge · share-link |
| E · Account layer | …lock in the highest-LTV cohort with a Team Account that makes one MSA, one invoice, and zero misses the obvious choice? | USC Team Account product · saved trips · cost centers · consolidated billing |
| F · Phone safety net | …keep a real-person phone number visible on every screen without making the site feel phone-first? | Persistent trust band · header phone · post-quote "or talk to a planner" link |
| G · Missing end | …convert a successful first trip into a second booking at the moment of peak trust? | Post-trip rebook prompt · referral credit · team-account upsell on the dashboard |
Scope discipline · what this problem statement excludes
The problem statement is deliberately narrow. It does not commit USC to:
- A native mobile app (web-first; mobile-responsive is the v1 commitment)
- An AI trip planner (post-v1 R&D)
- International expansion (US 50-state focus)
- Owning operators (asset-light brokerage model continues)
- A full CRM rebuild (Salesforce stays as system-of-record · see Hosting matrix)
These exclusions are the firewall against scope creep. Garrett's dependency principle (§ 4.2): every plane above is committed to this Strategy-plane statement.
Chunk 8 verdict · Diamond 1 closed, ready for solution definition
Define is complete. Seven clusters, one problem statement, seven How-Might-We prompts, scope firewall in place. The dossier now crosses the Develop / Deliver line into Solution Space. Next chunk converts the How-Might-We prompts into formally specified User Stories (INVEST + Gherkin acceptance criteria) — the contract between design and engineering.
The seven How-Might-We prompts, converted into specified user stories.
Each story below answers one of the HMW prompts from § 8.5. Every story uses Mike Cohn's As a / I want to / So that format, with Dan North's Gherkin Given/When/Then acceptance criteria and Bill Wake's INVEST checklist. Edge cases & design notes are explicit because the wireframes (already written) reference these stories as their contract.
9.1 Eight P0 stories for v1
- Given
- I have completed the quote builder and reached the Quote Results page
- When
- I scan the results grid (3–6 cards in a sortable list)
- Then
- Each card shows: vehicle photo, capacity, price, operator name, operator on-time %, operator rating (★/N), key amenities (chips)
- And
- I can filter (bus size, amenities, operator rating, price range) without page reload
- And
- I can compare up to 3 cards in a focused compare view
- And
- "Talk to a planner" remains persistent in the header throughout
- Edge
- If results have shifted (operator availability changed) since loading: show a "Refresh" banner, don't silently swap cards
- Design
- Trip Guarantee banner appears below the cards, not above — buyer is price-anchored first, guarantee closes the loop
- Given
- I have selected a bus on the Quote Results page and confirmed trip details
- When
- I land on /checkout with order summary, contact info, optional cost-center/PO fields, and payment
- And When
- I enter card details (or tap Apple Pay / Google Pay / ACH) and submit
- Then
- Stripe charges 10% deposit, balance is scheduled for 30 days pre-trip, confirmation page loads in < 3 seconds
- And
- Receipt is emailed to me & (optionally) to a finance address I add at checkout
- And
- I land in my Customer Dashboard with the trip already populated
- Edge
- If card declines: show inline message with retry, do not lose form state, prompt for alternate payment method
- Edge
- If 3DS challenge required: surface in modal, return to checkout on completion
- Design
- Cost-center / PO field collapsed by default (Maya doesn't need it); David expands and uses
- Given
- I have started a quote and entered at least an email or phone in any step
- When
- I close the tab / lose connection / explicitly tap "Save & finish later"
- Then
- An SMS arrives within 30 seconds: "Your USC quote is saved. Resume here: [link]"
- And
- The link opens directly into the step I left off · all data pre-filled · no re-login
- And
- The quote is held for 24 hours at the locked price; after that it requires re-quote
- Edge
- If I clicked the link from a different device: the session migrates without losing state
- Edge
- If the operator has gone unavailable: show a "Your operator updated availability — see new options" banner, surface alternatives
- Design
- Magic link tokens expire in 24 hr; longer tokens for explicit "save for next week" requests
- Given
- I land on /business and click "Start a team account"
- When
- I sign up with corporate email · choose tier (Standard / Enterprise / Government) · accept MSA terms (or upload my own redlines)
- Then
- An admin dashboard is provisioned · I can invite up to 25 teammates (Standard) by email · I can create cost centers + PO numbers · I can connect SSO (SAML 2.0) on Enterprise
- And
- Every trip booked under the account auto-tags with the booker's cost center; admin sees aggregated monthly invoice
- And
- Account exports trips to CSV / NetSuite / Coupa on demand
- Edge
- If MSA redlines submitted: route to legal queue with 5-business-day SLA · admin dashboard shows status
- Edge
- If SSO fails: degrade gracefully to password + 2FA, log incident
- Design
- Federal & GSA tier surfaces FedRAMP-In-Process documentation; explicitly does NOT claim FedRAMP authorized unless/until it is
- Given
- I arrive on /charter-bus-rental/{city} from an organic search result
- When
- The page loads (LCP < 1.8s on mobile 4G)
- Then
- The H1 contains the keyword in plain English ("Charter Bus Rental in [City] — Real Prices in 60 Seconds")
- And
- The inline quote builder is above the fold, no scroll required on mobile
- And
- The 24/7 phone number is in the top nav, in the trust band, and in the footer — three independent locations
- And
- A "Local pricing starts at" table is visible without scrolling past the fold
- And
- 3 real local reviews are rendered with city tags ("Wedding · Brooklyn 2024")
- Edge
- If city has fewer than 3 real reviews: surface trip-type reviews instead with a "City-specific reviews coming soon" line; never fabricate
- Edge
- If user is on slow 3G: serve a stripped HTML version with no map & deferred JS
- Design
- Mobile checkout must work without keyboard zoom · input font-size ≥ 16px · tap targets ≥ 44px
- Given
- The trip is confirmed and we are within T-2 hours of pickup
- When
- I open the Customer Dashboard for the trip
- Then
- A live map appears with the bus icon updating every 15s · ETA recomputes on movement
- And
- "Message driver" opens a chat (SMS bridge) with driver's first name and photo
- And
- "Share live link" produces a public read-only URL with an expiring token (24h) for passengers
- And
- If I tap "Talk to USC now" I'm connected to dispatch in < 60 seconds
- Edge
- If operator GPS signal lost: fall back to driver-reported ETA + show "GPS reacquiring…" state, do not show stale map
- Edge
- If trip is delayed > 15 min: proactively notify booker via SMS, not just dashboard
- Design
- ETA region has
aria-live="polite"for screen readers; status changes are spoken
- Given
- A confirmed trip exists in Salesforce with assigned operator
- When
- The operator marks the trip "cannot fulfill" OR fails to confirm 24 hours before pickup OR misses the pickup window by 30 min
- Then
- The dispatch console raises a Critical alert with a pre-ranked list of 3+ backup operators (by distance, available capacity, tier)
- And
- Customer is notified via SMS & in-dashboard that a backup is being arranged · ETA on backup confirmation provided
- And
- If a backup is confirmed < 2h after trigger: Trip Guarantee was held · log success
- And
- If no backup confirmed within 2h: 110% refund auto-issued via Stripe · customer notified with refund timeline
- Edge
- If multiple trips fail simultaneously (e.g., operator bankruptcy): bulk dispatch view, prioritized by trip date
- Edge
- Trip Guarantee does not apply to weather force-majeure events; clear policy & UX for that case
- Design
- Customer-facing copy: never blame the operator by name; "Your bus is being rebooked" — protect operator relationships
9.2 Story sizing & sprint plan
| ID | Title | Persona | Size | Suggested sprint |
|---|---|---|---|---|
| US-001 | Instant quote in 90s | Maya | M | Sprint 1–2 (Weeks 3–5 in roadmap) |
| US-002 | Same-format compare | Maya | M | Sprint 1–2 |
| US-003 | Single-page checkout | Maya · David | M | Sprint 2–3 (Weeks 6–8) |
| US-004 | SMS magic-link resume | Maya | S | Sprint 2 |
| US-005 | Team Account v1 | David | L · split into 3 stories | Sprint 4–5 (Weeks 12–13) |
| US-006 | SEO city page conversion | Robin | S (template) | Sprint 3–4 (Weeks 9–11) |
| US-007 | Live trip tracking | Maya · Robin | M | Sprint 4 (Weeks 12–13) |
| US-008 | Trip Guarantee backup | Ops · all | L · split into 3 stories | Sprint 2 (alert) → 4 (auto-refund) |
9.3 Out-of-v1 (parking lot)
Stories that emerged from research but are firewalled from v1 scope (per § 8.4). Listed here so they don't get lost and so the team can defer with intention, not by omission.
| ID | Title | Why deferred | Target |
|---|---|---|---|
| US-009 | Split-payment / collect from group members | Robin outlier; needs research; payment-flow complexity | v1.5 |
| US-010 | Native mobile app (iOS / Android) | Web-responsive covers the journey; native is a wrapper risk | v2 |
| US-011 | AI trip planner (natural-language → fleet) | R&D-grade; could ship as opt-in beta in Q3 | v2 |
| US-012 | Operator self-onboarding (no sales touch) | Supply-side prioritization; ops bandwidth in v1 | v1.5 |
| US-013 | Multi-language site (Spanish first) | Audience size justifies; not v1-critical | v1.5 |
| US-014 | Referral-credit program ($250 for booker, $250 for referred) | Marketing-led; needs legal review on T&Cs | v1.5 |
Chunk 9 verdict · stories specified, ready for behavioral analysis
Eight P0 stories specified, sized, sprint-planned. Six v1.5 / v2 stories parked. Wireframes already on file reference these by ID. Next chunk applies the Behavioral Design layer — Fogg's B=MAP, Eyal's Hook Model, Cialdini's persuasion patterns, Kahneman's System 1/2 — to ensure each shipped story actually drives the behavior change it claims.
The behavior layer · why each P0 story actually triggers the action it claims to.
User stories define what the system does. Behavioral analysis specifies why users will actually use it. Each P0 story is run through Fogg's B=MAP diagnostic (motivation × ability × prompt), then the engagement loop is mapped against Eyal's Hook Model, then persuasion patterns and System-1/2 targeting are committed per surface.
10.1 Fogg B=MAP · diagnosing every P0 story
| Story | Motivator (Fogg pair) | Scarcest ability factor | Prompt type | Design response |
|---|---|---|---|---|
| US-001 · Instant quote | Anticipation · Hope ("I might get the price now") | Time · Maya is interrupted constantly | Facilitator (motivation already high, ability is the blocker) | 4-step builder · auto-save · "60 seconds" promise quantifies the time cost upfront |
| US-002 · Compare | Anticipation · Hope + mild Fear ("Am I overpaying?") | Mental effort · comparing across formats | Facilitator | Same-format grid · sortable · filter rail · max 3-card compare view (reduces choice paralysis) |
| US-003 · Checkout | Anticipation · Hope ("Lock it before the venue changes") | Non-routine + physical effort (card-entry friction on mobile) | Signal (motivation + ability both high here) | Single page · Apple/Google Pay above card fields · optional cost-center collapsed |
| US-004 · Magic-link resume | Anticipation · Hope ("I won't lose my work") | Mental effort · context-switching back into the task | Signal (SMS arrives as the cue) | One-tap link · pre-filled state · "Picking up where you left off" reassurance |
| US-005 · Team Account | Anticipation · Hope + Belonging · Social Acceptance ("My team will love me for this") | Social deviance · "Am I allowed to commit my company to this?" | Spark (motivation needs lifting on first encounter) | "Used by FEMA & F500" social proof · MSA-ready language · "Add teammates later" defer |
| US-006 · SEO city page | Anticipation · Hope | Time + mental effort (vocabulary anxiety) | Spark · entry from cold organic traffic | Plain-English H1 · transparent pricing table · phone number visible · trust badges above fold |
| US-007 · Live tracking | Sensation · Pleasure (relief) + Anticipation · avoid Fear | Mental effort · the unknown is the cost | Signal (the user comes to it actively, anxious) | Map renders first · ETA huge · "Message driver" one tap · "Talk to USC now" persistent |
| US-008 · Backup deployment | Ops-side: Anticipation · avoid Fear (guarantee violation) | Time · 2-hour SLA is tight | Signal · critical alert in dispatch console | Pre-ranked backup queue · one-click deploy · auto-customer-notification · auto-refund if missed |
The Fogg pattern across stories
Six of eight stories are Facilitator or Signal prompts — motivation is already there, ability is the bottleneck. This is the single most important behavioral finding in the dossier: USC's job is not to convince buyers to book. It's to remove the friction that's stopping them from booking. Only US-005 (Team Account) and US-006 (cold SEO entry) need a Spark — both are first-encounter moments where the buyer hasn't formed the intent yet.
10.2 Eyal Hook Model · the engagement loop USC builds
External: SEO landing · paid search · email
Internal: "I have another group to move"] A[ACTION
Instant quote · 4 steps · ~60 sec
Saved to account if signed in] R[VARIABLE REWARD
HUNT: real prices found
SELF: trip confirmed · pride
TRIBE: shared live-link · group sees] I[INVESTMENT
Save quote · create account · upload roster
Past trips · cost centers · saved vendors] T --> A --> R --> I I -.->|loads next trigger| T classDef phase fill:#fff,stroke:#0b2a4a,color:#0b2a4a; class T,A,R,I phase;
Triggers · external → internal transition
External triggers (cycle 1):
- Paid: Google search ads on "charter bus rental [city]"
- Earned: organic ranking on city / route / trip-type templates
- Relationship: coordinator-to-coordinator referral
- Owned: post-trip email · dashboard notifications
Internal triggers (cycle 3+):
- "I have another group to move" — opens the dashboard reflexively
- "My team needs a shuttle" — taps "book again" without searching
- "I should check on the driver" — opens the live-tracking link
Eyal: products that require constant external triggers haven't formed a habit. The Account & Dashboard exist specifically to make USC the internal-trigger destination.
Variable rewards · all three types
- HUNT · real prices found, operators discovered, deals on the route page
- SELF · trip locked in (relief), trip complete (pride), tracking dashboard rendering the bus moving
- TRIBE · sharing the live-link with the group · members thanking the booker · post-trip Facebook photo gets likes
Eyal: variability is the dopamine driver, not the reward itself. The live-tracking map intentionally updates on movement (variable timing) rather than a fixed interval.
Investment · what makes cycle N+1 easier
- Data: saved pickup addresses · default passenger counts · cost-center tags · operator favorites
- Content: uploaded rosters · saved itinerary templates · invoice PDFs in the account
- Followers: teammates invited under a Team Account (David)
- Reputation: "Gold" operator tier on the supply side (operator-portal hook)
- Skill: familiarity with the dashboard — switching costs grow with use
Eyal: ask for investment AFTER reward (user is satisfied, goodwill is high). The team-account upsell appears on the post-trip dashboard, not at checkout — by design.
Ethical check · Eyal's Manipulation Matrix
Where does USC land on Maker-Uses-It × Improves-User-Life?
- Maker uses it: ✓ — USC employees book company trips through the product.
- Improves user life: ✓ — replaces hours of phone tag with verified group transportation.
- Quadrant: Facilitator · ethical foundation for habit-forming design.
Important: if USC ever drifts into "Dealer" territory (engagement design without genuine user benefit), the patterns in this section must be reconsidered, not just turned up further.
10.3 Persuasion patterns · Cialdini + Kahneman, mapped to surfaces
| Pattern | Where it appears | Copy / mechanism | Why it works here |
|---|---|---|---|
| Authority (Cialdini) | Persistent trust band · About page · Federal landing · footer DOT/MC | "FEMA & Fortune 500 approved · GSA Schedule · DOT #2418" | Procurement (David) screens vendors on credentials before evaluating fit. Authority is the binary filter. |
| Social Proof (Cialdini) | Reviews block · F500 logo wall · "23 buses available near you" | "★4.6 · 2,400 reviews · 300K+ trips since 2004" | Robin (anxious group lead) needs evidence that people like her use USC. Quantified social proof > testimonials alone. |
| Scarcity (Cialdini) | "23 buses available now" map overlay · expiring-quote messaging (24h hold) | "Your quote locks pricing for 24 hours." | Reframes urgency from manipulation to information. Honest scarcity (real inventory) only — no fake "1 left in stock" copy. |
| Reciprocity (Cialdini) | Published pricing pages · price calculator · transparent fee disclosure | "Here's what a trip actually costs, no email required." | Brokers historically gate pricing. Giving it away creates obligation-to-engage in the buyer. |
| Commitment (Cialdini) | Save-quote magic link · pre-trip checklist · roster upload · account creation | "Save this quote — finish later" · "Pre-trip checklist (2/4)" | Small yeses load big yeses. Each saved quote and checklist item is investment that raises cost of switching to a competitor. |
| Liking (Cialdini) | Reviews from people-like-them · local phone area code on city pages · driver photo & name | "Lauren · Wedding planner · Brooklyn 2024" | Robin trusts a Brooklyn bride more than a generic five-star average. Specificity = liking. |
| Loss Aversion (Kahneman/Tversky) | Trip Guarantee copy · cancellation transparency · "free until balance due" | "If we fail: backup bus in 2 hours, or 110% refund." | Losses hurt ~2× more than equivalent gains. Framing the guarantee as the broker's potential loss (not the buyer's gain) anchors it stronger. |
| Anchoring (Tversky/Kahneman) | Pricing table on city pages (luxury tier shown first) · order summary at checkout | "Luxury motorcoach $175–230/hr · full charter $140–175/hr · executive $120–145/hr · minibus $95–115/hr" | Premium tier first sets the reference point. The $140 full charter feels reasonable by comparison; the $95 minibus feels like a steal. |
Ethical nudge checklist (per Thaler/Sunstein publicity test)
- ✓ Is the nudged behavior in the user's genuine interest? Yes — booking a verified bus is the goal they came for.
- ✓ Would the user approve if they understood the nudge? Yes — none of these patterns are deceptive (no fake countdowns, no dark-pattern defaults).
- ✓ Is choice still freely available? Yes — every nudge is paired with a real alternative (talk to planner, call us, save and leave).
- ✓ Can the nudge be easily overridden? Yes — opt-out of every notification, cancel free until balance is due.
10.4 System 1 vs System 2 · which surfaces target which
| Surface | Target system | Why · design choice |
|---|---|---|
| Homepage hero · quote builder | System 1 | Mobile, distracted, high motivation. Visual hierarchy + familiar form patterns + single primary CTA. Zero cognitive friction. |
| Quote Results page | System 1 primarily, System 2 opt-in | Default scan is System 1 (cards, photos, price). Filter rail + compare view activate System 2 for the small subset who want deliberate analysis. |
| Checkout | System 2 by intent | High-stakes ($X,000 charged). Single page, clear hierarchy, every field labeled, math visible — deliberate processing supported, not punished. |
| SEO city / route pages | System 1 | Cold organic traffic, low patience. Visual scan optimized: H1 → CTA → pricing table → quote builder. No copy that demands System 2. |
| For-Business landing (David) | System 2 | Procurement is paid to be deliberate. Dense data, detailed tables, downloadable PDFs, in-depth case studies. System 2 is the desired mode here. |
| Dashboard · live tracking | System 1 | Trip-day anxiety. Map renders first, ETA biggest element on screen, color-coded status. No reading required. |
| Trip Guarantee policy page | System 2 | Legal commitments. Plain English but full disclosure of edge cases. The buyer who reaches this page wants to slow down and read. |
10.5 Synthesis · the behavioral spec per surface
Combining Fogg + Eyal + Cialdini + Kahneman into a single annotation per primary surface. This is the spec the wireframes already implement (Section 11 onwards), now made explicit.
[SURFACE: Homepage hero] ├── PROMPT: External (SEO/paid) → Internal (book another trip) ├── MOTIVATION: Anticipation/Hope (real price now) ├── ABILITY BARRIER: Time (Maya is interrupted) ├── PROMPT TYPE: Facilitator (motivation is already there) ├── SYSTEM TARGET: System 1 (scan, click, type, submit) ├── PERSUASION: Authority (trust band) + Reciprocity (quote without email upfront) └── INVESTMENT ASK: Email/SMS at end of quote builder (small, loads magic link) [SURFACE: Quote Results] ├── PROMPT: Direct from quote builder ├── REWARD TYPE: Hunt (real prices) + Self (decision agency) ├── VARIABLE ELEMENT: Operator data revealed (each card surprises) ├── SYSTEM TARGET: System 1 default · System 2 opt-in ├── PERSUASION: Social Proof (operator ratings) + Anchoring (premium card first) └── INVESTMENT ASK: "Save quote" or pick a bus (commitment escalator) [SURFACE: Customer Dashboard · day-of trip] ├── PROMPT: Internal (anxiety) + Owned (T-2h SMS) ├── REWARD TYPE: Self (relief) + Tribe (share-link to group) ├── VARIABLE ELEMENT: Map updates on movement, not on interval ├── SYSTEM TARGET: System 1 (anxious scanning) ├── PERSUASION: Liking (driver photo + first name) └── INVESTMENT ASK: Post-trip review → "book again" (peak-end moment) [SURFACE: For-Business / Team Account] ├── PROMPT: Spark (cold first encounter, Authority leads) ├── MOTIVATION: Anticipation + Belonging (Social Acceptance internally) ├── ABILITY BARRIER: Social Deviance ("Can I commit my company?") ├── PROMPT TYPE: Spark transitioning to Facilitator post-MSA ├── SYSTEM TARGET: System 2 (deliberate procurement evaluation) ├── PERSUASION: Authority (FEMA · GSA · F500) + Reciprocity (MSA download) └── INVESTMENT ASK: SSO setup · invite teammates · upload PO list (switching cost)
Chunk 10 verdict · behavioral layer specified, ready for heuristic eval
Every P0 story now has a behavioral diagnosis. The Hook loop is drawn end-to-end. Cialdini patterns are mapped to surfaces with copy. System-1/2 targeting is committed. The ethical floor (Thaler publicity test + Eyal's Manipulation Matrix) holds. Next chunk runs the wireframes (already on file) through Nielsen's 10 heuristics with severity ratings — the converging-design check before atomic-inventory and handoff.
The current site and the proposed wireframes, scored against H1–H10 with severity ratings 0–4.
A heuristic eval is a discount usability method that catches glaring problems without requiring participant recruitment. Below, each of Nielsen's ten heuristics is run twice — against the current uscoachways.com (severity ratings of violations) and against the proposed wireframes (severity ratings post-fix). The delta is the case for the rebuild.
11.1 Methodology note
What this evaluation is
- Single-evaluator pass against uscoachways.com (current) and against the wireframes & hi-fi prototypes (proposed) on file in this project.
- Both desktop and mobile breakpoints considered.
- Each heuristic scored using Nielsen's 0–4 severity scale.
- Severity 3 + 4 issues on the proposed site are flagged for fix before v1 ship.
What this evaluation is not
- Not a substitute for usability testing. Nielsen explicitly: "guidelines-based, not evidence-based."
- Not 3–5 evaluators (the recommended minimum). Single evaluator catches ~50% of issues. Recommendation: run the same eval with 2 additional evaluators before v1 release.
- Not a substitute for user research validation of the assumptions tagged in § 01 and § 05.
11.2 The ten heuristics, scored
| # | Heuristic | Current site · violations | Now | Proposed site · resolution | After |
|---|---|---|---|---|---|
| H1 | Visibility of System Status | RFQ form submits to a generic "Thank you" page with no feedback on state, ETA, or what happens next. Quote builder has no progress indicator. Post-booking provides email-only updates, no dashboard. No live trip status surface exists at all. | 4 | Inline stepper in quote builder. Quote Results page renders system state (prices, operators, availability) directly. Customer Dashboard with pre-trip checklist + live tracking T-2h. aria-live regions on ETA updates. |
1 |
| H2 | Match Between System & Real World | Site uses broker-internal vocabulary ("service type", "group type") that buyers don't share. Solutions ordered alphabetically rather than by buyer mental model. Pricing presented as range FAQs, not per-trip-type. | 3 | SEO city/route/trip-type templates use buyer vocabulary in H1s. Solutions ordered by audience frequency. Trip Guarantee copy in plain English. Vehicle-type pages name buses the way buyers describe them. | 1 |
| H3 | User Control & Freedom | RFQ is fire-and-forget — no way to edit a submitted request, no save-state, no exit beyond closing the tab. Cancellation policies hidden in FAQ rather than visible at booking. | 3 | Quote builder auto-saves at every blur · "Save & exit" persistent in nav · SMS magic link to resume. Trip edit + free-cancel until balance auto-charges (visible on dashboard). Modal close + Esc on every modal. | 1 |
| H4 | Consistency & Standards | "Get a Quote", "Request a Quote", "Free Quote" appear interchangeably for the same CTA. Footer / header navigation diverge on some pages. Phone number formatted three different ways across pages. | 2 | Atomic design system locks CTA copy to one canonical phrase per intent. Same button shape, color, position across surfaces. One phone number format (E.164 stored, US-display rendered) site-wide. | 1 |
| H5 | Error Prevention | Date fields accept past dates. Passenger field accepts negative numbers. No warning when <48-hour booking enters expedited-fee territory. No type-ahead on cities — typos cause "city not found" callbacks. | 3 | Date picker constrained to future dates with sensible defaults. Passenger stepper bounded 1–56 with overflow → "custom fleet" branch. <48h trigger preemptively warns on Step 2. Pickup/destination autocomplete via Mapbox. | 1 |
| H6 | Recognition Rather Than Recall | No recent searches, no saved quotes, no past-trip list, no operator favorites. Repeat coordinator must re-type the same pickup address every booking. Solutions buried in mega-menus, not surfaced contextually. | 3 | Account dashboard surfaces past trips, saved itineraries, recent pickups. "Book this again" one-click. Solutions visible on homepage as cards. Filter rail shows applied filters as chips. | 1 |
| H7 | Flexibility & Efficiency of Use | No keyboard shortcuts. No bulk operations for repeat bookers. No way to skip onboarding. Phone-call path and web-form path don't reconcile (info entered online doesn't appear when planner calls back). | 2 | Power-user shortcuts in dashboard (J/K trip nav, R for rebook). Bulk-book multi-trip uploads (Team Account). Both phone & web feed the same Salesforce lead. Recents pre-fill quote builder. | 1 |
| H8 | Aesthetic & Minimalist Design | Homepage above-the-fold has ~280 words of happy talk competing with the CTA. Three "Get Quote" CTAs at equal visual weight. Carousel hero diverts attention from action. Decorative shadow/gradient/glow effects compete with content. | 3 | Above-the-fold copy cut to ~50 words. One primary CTA, one secondary, one tertiary — clear visual hierarchy. Single hero photo, no carousel. Whitespace-led editorial layout (Direction A) or denser product-led (Direction B). | 1 |
| H9 | Help Users Recover from Errors | RFQ form errors appear in a generic banner at top of form without indicating which field. "Server error" messages with stack-trace-like text appear on retry. No suggestion of how to fix the problem. | 4 | Inline field-level errors with specific cause + fix. Card-decline shows alternate payment options without losing state. Network errors surface a "retry" with the request preserved. Plain-language copy, no error codes. | 1 |
| H10 | Help & Documentation | No onboarding. No tooltips. Help is a contact form. FAQ is a static page that doesn't answer "what does a quote cost?" or "what happens if my operator cancels?" — the actual questions buyers have. | 2 | Contextual help icons on quote-builder steps. Empty states in dashboard explain what to expect ("Live tracking opens 2 hrs before pickup"). Trip Guarantee page with full policy. FAQ schema on city/trip-type pages. Persistent 24/7 phone number. | 1 |
11.3 Aggregated severity · current vs proposed
Current site
- 2 catastrophes (S4): H1 Visibility · H9 Error recovery
- 5 major violations (S3): H2 Real-world match · H3 User control · H5 Error prevention · H6 Recognition · H8 Minimalist
- 3 minor violations (S2): H4 Consistency · H7 Flexibility · H10 Help
- Aggregate severity: 28 / 40
Per Nielsen's release rubric: any S3 or S4 issue is a release-blocker. The current site has 7 release-blocker-grade violations.
Proposed site (wireframes + hi-fi)
- 0 catastrophes (S4)
- 0 major (S3)
- 0 minor (S2)
- 10 cosmetic (S1) · documented in § 11.4 for cleanup-sprint backlog
- Aggregate severity: 10 / 40
Proposed site has 0 release-blocker violations. Net delta: −18 severity points. Every S3/S4 issue resolved at the wireframe stage, before code.
11.4 Known S1 cosmetic issues on the proposed site
Documented for the cleanup sprint backlog. None are release blockers; each is a polish-pass candidate after primary v1 ship.
| Heuristic | Cosmetic issue · proposed site | Suggested fix |
|---|---|---|
| H1 Visibility | Quote-builder step transitions could use a subtle animation cue (currently instant) | 120ms fade on step swap, prefers-reduced-motion honored |
| H2 Real world | "Multi-day" trip type label could be clearer for short multi-stop day trips | Tooltip on hover: "2+ days OR multiple stops" |
| H4 Consistency | Two slightly different secondary button styles between Hi-fi A & B (intentional but flag) | Lock secondary button to one canonical token at handoff |
| H6 Recognition | Operator photos on quote-results cards could include a tiny tier badge (Gold/Silver/Bronze) for scannability | Add tier ribbon in top-right of operator photo |
| H7 Flexibility | Keyboard shortcuts not yet surfaced anywhere in UI — users won't discover them | "?" key opens a shortcuts overlay (Slack/Linear pattern) |
| H8 Minimalist | Trust band + 5-CTA row + solutions row creates 3 stacked "trust" surfaces above the fold | Consider collapsing trust band into nav on Direction A · usability-test both |
| H10 Help | No in-app onboarding tour for first-time Team Account admins | 3-step tour on first login: cost centers · invite teammates · billing |
| H10 Help | FAQ FAQs are city-page-only; trip-type pages need their own FAQ blocks | Add per-trip-type FAQ schema (e.g. weddings: "do I tip the driver?") |
| H4 Consistency | Dashboard "trips" tab uses "My trips" on mobile, "Trips" on desktop | Lock to "Trips" everywhere (Krug Law 3 · half the words) |
| H9 Error recovery | Network-loss state in live tracking shows "GPS reacquiring…" but doesn't explain what user can do meanwhile | Add "Call dispatch · (844) 728-3661" as recovery action in the same state |
11.5 Heuristic issues that need user research to validate
Per Nielsen: a heuristic violation doesn't automatically mean a fix is needed. These three borderline cases should be validated with users before treating as confirmed problems.
| Borderline case | Heuristic at risk | Validation method |
|---|---|---|
| Trust band's 3rd stacked element (above-the-fold density on Direction A) | H8 Minimalist | 5-second test (Krug § 1.6) on Direction A vs. trust-band-collapsed variant. Measure recall of Trip Guarantee & phone number. |
| Trip Guarantee SLA copy ("backup within 2 hours") | H2 Real-world match · H10 Help | Comprehension test with 5 Robin-archetype users · do they understand the promise without reading the policy page? |
| Team Account onboarding flow (David's self-serve appetite, Assumption 2 from § 01) | H7 Flexibility · H10 Help | 5 moderated sessions with procurement leads · do they self-onboard or do they ask for a sales call? |
Chunk 11 verdict · proposed site clears the heuristic floor
Current site: 7 release-blocker violations. Proposed site: 0 release-blockers, 10 cosmetic items for the cleanup-sprint backlog, 3 borderline cases earmarked for the 2-week research sprint flagged in § 5.4. The Nielsen floor is clear. Next chunk inventories the UX patterns that implement each fix — the microcopy, interaction, and persuasion patterns the dev team should pick up off the shelf.
The off-the-shelf patterns that implement every fix in this dossier.
Sections 10 (Behavioral) and 11 (Heuristics) committed to what we'll do and why. This section locks the how at the pattern level: the canonical CTA copy, form-field microcopy, error-message library, empty states, loading states, and wireframe annotation key the dev team picks up directly. Every pattern below traces to UX-PATTERNS.md (which itself aggregates Krug, Wroblewski, NN/g, Cialdini, and platform conventions).
12.1 CTA microcopy · canonical phrases per intent
Formula: [Action verb] + [Value / object] + [Optional urgency / benefit]. One canonical CTA phrase per intent, locked at the design-system layer so H4 (Consistency) never regresses.
| Intent | Canonical primary | Canonical secondary | Where used |
|---|---|---|---|
| Start quote | See prices in 60 seconds → | Talk to a planner | Hero · trust band · final CTA · footer |
| Continue in builder | Continue → | ← Back | Steps 1–3 of quote builder |
| Submit to results | Show me my prices → | Save & finish later | Step 4 of quote builder |
| Pick a bus | Select this bus | Compare · Save quote | Quote Results cards |
| Checkout | Book trip · $384 today | ← Edit trip | Checkout primary button (price interpolated) |
| View live trip | Track my bus → | Message driver | Dashboard · T-2h notification |
| Account creation | Start a team account → | Talk to enterprise sales | For-Business landing · dashboard upsell |
| Rebook | Book this trip again | Save to recurring | Post-trip dashboard |
| Cancel | Cancel trip | Keep my trip (in modal) | Dashboard · cancel-confirm modal |
What we deliberately avoid
- "Get Started" — too generic; doesn't tell the user what's about to happen.
- "Submit" / "Send" / "Process" — robotic; "Show me my prices" is benefit-first.
- "Click here" — accessibility & clarity failure.
- "Free Quote" / "Free Trial" — "free" is implicit; saying it foregrounds the wrong concept (price-conscious vs. trust-conscious).
12.2 Form patterns · labels, placeholders, validation
| Field | Label | Placeholder | Helper / validation |
|---|---|---|---|
| Pickup address | Pickup | City, airport, or address… | Autocomplete via Mapbox; helper: "We'll show buses available from this location" |
| Destination | Destination | Where to? | Autocomplete; "Same as pickup" shortcut for hourly trips |
| Pickup date | Pickup date & time | Sat, Aug 14 · 7:00 AM | Date picker constrained to future. <48h triggers expedited-fee warning. |
| Passenger count | Passengers | — | Stepper bounded 1–56; >56 triggers "Custom fleet" branch |
| you@company.com | "We'll send your quote here." Validate on blur with regex + DNS MX check. | ||
| Mobile | Mobile (for SMS magic link) | (555) 555-1234 | "For one-time quote link & trip-day status. We don't call." |
| Card number | Card number | 1234 5678 9012 3456 | "We accept Visa, MasterCard, Amex, Discover" · format on type |
| Cost center / PO | Cost center / PO (optional) | e.g. CC-4821 | Collapsed by default for personal bookings; expanded automatically for Team Account users |
Inline-validation pattern
Trigger: validate on blur (Wroblewski 2009 — empirically lowest error rates).
States: default → focused → valid (subtle green check) → invalid (inline message below field).
Never: validate on every keystroke (creates premature-error flicker).
Autosave pattern
Trigger: save on field blur OR every 30s during idle, whichever first.
Status indicator: small "Saved 3s ago" in builder header. Updates to "Saving…" during write.
Recovery: if connection drops mid-save, queue locally + retry; "Saved when you're back online" message.
12.3 Error message library
Formula: [What happened] + [Why / context] + [How to fix]. Plain language, never error codes user-facing, always paired with a recovery action.
| Error type | Trigger | Copy | Placement |
|---|---|---|---|
| Validation · empty required | Submit with blank required field | "Pickup address is required to find buses." | Inline below field · field border turns red |
| Validation · email format | Email field blur with invalid value | "Enter a valid email — we'll send your quote link here." | Inline below field |
| Validation · past date | Date picker selects past date | "Pickup date needs to be in the future. Earliest available: tomorrow." | Inline below picker + auto-suggest next valid date |
| Validation · <48h expedited | Date selected within 48h | "Trips within 48 hours may add an expedited operator fee. We'll show the impact on Step 4." | Inline warning (not blocker) on Step 2 |
| Validation · >56 pax | Passenger stepper exceeds 56 | "Groups over 56 need a custom fleet. We'll route you to a planner who'll size it right." | Step 3 inline branch |
| System · network drop | Fetch fails on quote-results load | "Can't reach our pricing right now. Your trip details are saved — try again in a sec?" | Page-level banner + retry button |
| System · timeout | Quote API > 8 seconds | "This is taking longer than usual. Hang tight — or we can call you when it's ready." | Inline with "Notify me" SMS opt-in |
| Payment · card declined | Stripe declines card | "Your bank declined that card. Try another card, Apple Pay, or pay by ACH — your trip is held for 30 minutes." | Inline above card field · state preserved · alternate methods surfaced |
| Payment · 3DS required | 3DS challenge raised | "Your bank needs to verify this charge. We'll open a quick check from your bank in a new window." | Modal · returns to checkout on completion |
| Operator · cancellation | Backup-deploy triggered | "Your bus is being rebooked — we'll have a confirmed backup within 2 hours. We'll text you the moment it's confirmed." | Dashboard banner + SMS · never blame operator by name |
| Auth · expired magic link | Link clicked > 24h after issued | "This quote link expired. Pricing may have changed — get a fresh quote in 60 seconds." | Page · button to re-run quote w/ same parameters |
| Permission · Account access | Non-admin tries admin action | "Only Team Account admins can do that. Your admin: [Maya] — ping them to make the change?" | Modal with "Email admin" action |
12.4 Empty states · what each blank screen should say
Formula: [What this space is for] + [Why it's empty] + [How to fill it]. Empty states are a teaching moment, not a void.
| Surface | Title | Body | Primary CTA |
|---|---|---|---|
| Dashboard · no trips yet | No trips yet — let's fix that | Get a real price in 60 seconds. Your bookings live here. | See prices in 60 seconds → |
| Dashboard · live tracking pre-T-2h | Live tracking opens 2 hours before pickup | We'll text you the moment the bus is on the way. Until then, you can edit your itinerary or message your planner. | Message planner |
| Quote results · zero matches | No buses match — but we have ideas | Try a different date, broaden your search, or let a planner hunt for you. | Talk to a planner |
| Quote results · filtered to zero | No buses match those filters | Loosen a filter to see more options. | Clear all filters |
| Team Account · no teammates | You're flying solo for now | Invite teammates so their trips roll up to your account. | Invite teammates |
| Team Account · no past invoices | Invoices arrive monthly on the 1st | Your next consolidated invoice will appear here on Jun 1. | Download W-9 |
| Saved quotes · expired | This quote is older than 24 hours | Pricing may have shifted. Refresh in one click — your trip details are preserved. | Refresh quote |
| Reviews · no city-specific yet | No reviews from this city yet | We have 2,400 USC reviews nationwide. Showing the closest 3 below. | — |
12.5 Loading & progress states
Per Nielsen's response-time research: < 0.1s feels instant, < 1s feels fluid, < 10s holds attention, > 10s needs progress + estimate.
| Duration | Treatment | Copy | USC application |
|---|---|---|---|
| < 300ms | No indicator | — | Form-step transition · button-state change |
| 300ms – 1s | Subtle inline spinner | — | Card → results filter · save-quote write |
| 1 – 3s | Skeleton placeholder | — | Quote results loading · Dashboard initial render |
| 3 – 10s | Spinner + status text | "Finding buses for your dates…" | First-time quote API call |
| > 10s | Progress indicator + estimate + escape | "This is taking longer than usual. Hang tight, or we can text you when it's ready." | Complex multi-vehicle quote · operator availability check |
| Multi-step (quote builder) | Stepper with done/active/pending states | "Step 2 of 4 · Trip details" | Quote builder progress · checkout |
| Live tracking | Map updates on movement event (not interval) | "ETA 11:24 AM · updating" | Dashboard live trip view |
12.6 Wireframe annotation key
Every wireframe annotation in this project (Section 07 Wireframes) uses these category prefixes so engineers can pattern-match implementation needs without re-reading the dossier.
ANNOTATION CATEGORIES · USC wireframe standard ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // NAV navigation pattern e.g. "// NAV - Persistent header, 5 items" // FORM form interaction e.g. "// FORM - Autosave every 30s · validate on blur" // FEEDBACK system feedback e.g. "// FEEDBACK - Toast 4s · top-right" // ACTION action pattern e.g. "// ACTION - Confirm cancel · destructive" // SOCIAL social proof e.g. "// SOCIAL - User count · live activity" // SCARCITY real scarcity e.g. "// SCARCITY - '23 buses available' · live data only" // URGENCY time-based e.g. "// URGENCY - 24h quote expiry · countdown" // LOSS loss-aversion frame e.g. "// LOSS - 'Cancel by Jul 15 or balance auto-charges'" // COMMIT commitment escalator e.g. "// COMMIT - Progress bar · start at 25%" // CONTENT static content placement e.g. "// CONTENT - Hero copy block" // LOADING loading treatment e.g. "// LOADING - Skeleton placeholder, 3 cards" // ERROR error state e.g. "// ERROR - Inline validation, below field" // EMPTY empty state e.g. "// EMPTY - 'No trips yet' · CTA to quote builder" // A11Y accessibility note e.g. "// A11Y - aria-live=polite on ETA · 44px tap targets" // SEO SEO-specific spec e.g. "// SEO - H1 contains primary keyword · LocalBusiness schema"
12.7 Pattern selection by user goal
| User goal | Persona | Patterns committed | Behavioral principle |
|---|---|---|---|
| Get an instant quote | Maya | Multi-step wizard (4 steps) · autosave · inline validation · smart defaults · live summary panel | Reduce Fogg ability friction |
| Compare buses | Maya | Sortable grid · filter rail · 3-card compare view · social proof on each card (operator ratings) | Cialdini Social Proof + Kahneman Anchoring |
| Complete checkout | Maya · David | Single page · Apple/Google Pay above card · sticky summary · loss-aversion frame on cancel window | Cialdini Commitment + Kahneman Loss Aversion |
| Return to saved quote | Maya | SMS magic link · pre-filled state · 24h expiry with refresh path | Eyal Investment (saved data → future trigger) |
| Onboard Team Account | David | Progressive profiling · trust badges (FEMA/GSA/F500) · MSA download · SSO setup · invite teammates | Cialdini Authority + Commitment |
| Convert on SEO city page | Robin | Plain-English H1 · transparent pricing table · real reviews · phone-number triple-placement · inline quote builder | Cialdini Liking + Reciprocity + Fogg Spark |
| Track trip on the day | Maya · Robin | Status-first dashboard · live map · driver SMS · share-link · "Talk to USC now" escape | Norman Feedback + Eyal Variable Reward (Hunt) |
| Rebook after a good trip | All | Post-trip rebook CTA · referral-credit · Team Account upsell at peak satisfaction | Kahneman peak-end rule + Eyal Investment |
Chunk 12 verdict · patterns locked, ready for atomic inventory
Patterns are now spec-grade: canonical CTA copy, form-field microcopy, full error library, 8 empty states, 7 loading-state treatments, annotation key, and pattern-to-goal mapping. Next chunk converts those patterns into Brad Frost's atomic-design inventory — atoms → molecules → organisms → templates → pages — the contract the dev team builds against.
The component hierarchy the dev team builds against — atoms, molecules, organisms, templates, pages.
Frost's mantra: create design systems, not pages. Below is the v1 inventory in five tiers. Atoms are the indivisible UI elements; molecules combine atoms into single-purpose units; organisms compose molecules into recognizable interface sections; templates lay organisms onto a grid; pages are template instances with real content. Every wireframe (§ 07) and hi-fi (§ 08) traces back to a specific atom or molecule below.
13.1 Naming convention & design tokens
Frost's standard: [category]-[name]-[variant]-[state]. Maps directly to component props in React / Vue / Svelte and to CSS classes if the team picks utility-first instead of component-first.
NAMING · USC component standard ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ btn-primary-default // red CTA, idle btn-primary-hover // red CTA on hover · darker shade + 1px translate btn-secondary-disabled // ghost button when action unavailable input-text-error // text input with invalid value card-vehicle-selected // quote-result card with active selection nav-link-active // main nav item on current section card-vehicle-loading // skeleton placeholder during fetch ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DESIGN TOKENS · canonical names (Salesforce-compatible) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ --usc-color-navy-900 #061a30 primary dark surface --usc-color-navy-800 #0b2a4a primary brand --usc-color-red-600 #c2271f primary CTA --usc-color-amber #f3b042 live badge · in-progress --usc-color-ok #1b8a4a success states --usc-color-paper #f7f4ec cream background (Dir A) --usc-space-1..10 4·8·12·16·24·32·48·64·96·128 --usc-radius-sm/md/lg 4 · 8 · 14 --usc-elev-1/2/3 subtle · card · floating --usc-font-display "Söhne", "Inter", system-ui --usc-font-body same --usc-font-mono "JetBrains Mono", ui-monospace
13.2 Atoms · the indivisible elements
12 atoms cover the v1 product. Each one has all states documented per Frost's atom-spec template.
| Atom | Variants | States | A11y |
|---|---|---|---|
| Button | primary · secondary · ghost · danger · icon-only | default · hover · focus-visible · active · disabled · loading | ≥44px tap · 4.5:1 contrast · aria-busy when loading · focus ring 2px brand-red offset |
| Input | text · email · phone · date · number · password | empty · focused · filled · valid · invalid · disabled · readonly | Label above (never placeholder-only) · aria-invalid + aria-describedby for error · 16px min font (no iOS zoom) |
| Label | field-label · caption · tag · eyebrow | default · required (with *) | <label> with explicit for= ref |
| Icon | system (24px) · feature (32px) · brand mark | default · active · disabled | Decorative: aria-hidden="true" · Meaningful: aria-label |
| Badge | status (live · pending · done) · count · tag | default · pulsing (live) | Color + icon + text · never color-only |
| Checkbox | default · in-card | unchecked · checked · indeterminate · disabled · error | Native <input type=checkbox> · 24×24 hitbox |
| Radio | default · tile (large picker) | unselected · selected · disabled | Group with role="radiogroup" + aria-labelledby |
| Stepper | passenger · luggage | min · in-range · max | Buttons disable at bounds · current value aria-live="polite" |
| Avatar | image · initials · placeholder | default | Image: alt with name · Initials: aria-label |
| Divider | horizontal · vertical · with-label | default | role="separator" |
| Spinner | sm (button) · md (inline) · lg (page) | spinning | aria-live="polite" · accompanying text label |
| Link | text · nav · breadcrumb · footer | default · hover · visited · focus | Underline on hover · focus ring 2px · 4.5:1 contrast |
13.3 Molecules · single-purpose combinations
| Molecule | Composition | Used in |
|---|---|---|
| Form field | Label + Input + Helper-text + Error-text | Quote builder · Checkout · Account · Operator portal |
| Tab group | 3–4 Buttons in pill container with active indicator | Quote builder (trip type) · Dashboard sections |
| Search field | Input with autocomplete + Icon + Loading spinner | Pickup / Destination autocomplete (Mapbox-backed) |
| Stepper progress | Numbered circles + Labels + Separator lines | Quote builder header (4 steps) · Checkout (1 step) |
| Trust badge row | Seal icons + Labels (DOT · GSA · FEMA · etc.) | Trust strip · Hero · Footer · About |
| Operator credentials | Avatar/photo + Name + Rating stars + Trip count + On-time % | Vehicle card · Operator profile · Dashboard |
| Price block | Label + Amount + Per-unit caption + Strike-through (optional) | Vehicle card · Pricing table · Order summary |
| Vehicle card | Photo + Operator molecule + Capacity badge + Amenity chips + Price block + CTA | Quote results grid · Featured-bus rotators |
| Live trip status | Map preview + ETA + Driver avatar + Action buttons | Dashboard live tracking · share-link page |
| Chip filter | Pill button + Remove (×) + Count badge | Quote results filter rail · Amenity selector |
| Toast | Icon + Message + Dismiss button | Save confirmations · Error feedback · Tracking updates |
| Inline alert | Icon + Title + Body + Action | Expedited-fee warning · Cancellation deadlines · Trip Guarantee callouts |
| Review card | Stars + Quote text + Avatar + Name/role/location | City pages · Trip-type pages · Reviews page · Hero |
| Stat block | Big number + Label + Change indicator (optional) | About hero · Operator portal dashboard · Federal landing |
| Pricing row | Vehicle icon + Capacity + Price (hourly · day · per-mile) | City pages · Pricing page · Comparison table |
| Phone CTA block | "24/7" badge + Phone number (clickable) + Sub-label | Persistent trust bar · Footer · Mobile nav |
13.4 Organisms · recognizable interface sections
| Organism | Composition (key children) | Responsive behavior |
|---|---|---|
| Site header | Logo · Nav-link × 5 · Phone CTA block · Primary button | Mobile: collapses to hamburger + Logo + Phone + CTA. Tablet: condensed nav. Desktop: full row. |
| Persistent trust bar | Trip Guarantee message + DOT/star badges + Phone CTA | Mobile: collapses to "Trip Guarantee · 110% back" + phone. Wraps on small screens. |
| Hero · quote builder | H1 + Lede + CTAs + Mini-stats row · Quote-card molecule on the right | Mobile: stack form-first (Maya thumb-first). Desktop: 7/5 column split. |
| 5-CTA differentiator strip | 5 × diff-card (num + heading + body + link) | Mobile: stack 1-col. Tablet: 2-col. Desktop: 5-col equal-width. |
| Trip Guarantee panel | Eyebrow + H2 + Body + 4× Promise rows (icon + heading + body) + CTA | Mobile: stacked. Desktop: 2-col split. |
| Quote-builder organism | Stepper + StepType / StepWhere / StepGroup / StepWho panels + Nav-controls + Summary | Mobile: full-bleed step, sticky bottom nav, summary collapses to bar. Desktop: 2-col with sticky summary panel. |
| Quote-results grid | Filter rail + Sort/Compare bar + Vehicle-card × N + Trip Guarantee callout + Talk-to-planner link | Mobile: bottom-sheet filters, single-column cards. Desktop: left rail + 2-up cards. |
| Trip-details editor | Vehicle summary + Itinerary editor (drag-reorder) + Amenities row + Sticky order summary | Mobile: stacked, summary at bottom. Desktop: 2-col with sticky right rail. |
| Checkout organism | Contact fieldset + Payment fieldset + Day-of-trip fieldset + Order summary | Mobile: single column, summary above form on small screens. Desktop: 2-col with sticky summary. |
| Dashboard hero | "Next trip" status block + Map preview + Action buttons (Edit · Roster · Invoice · Cancel) | Mobile: stacked, map below status. Desktop: side-by-side. |
| Live tracking surface | Map (3:2 aspect) + ETA banner + Message-driver action + "Talk to USC now" escape | Mobile: full-width map + sticky action bar. Desktop: map + side panel. |
| Reviews wall | Eyebrow + H2 + Review-card × 3 (filterable) | Mobile: horizontal scroll. Desktop: 3-col grid. |
| Solutions grid | 9 sol-cards (image-slot + title + meta + arrow) | Mobile: 1-col. Tablet: 2-col. Desktop: 3-col. |
| Logo wall | 12 logo-tiles (3:1.2 aspect) | Mobile: 2-col. Tablet: 3-col. Desktop: 6-col. |
| Pricing table | Headers + Pricing-row × N + Footnote | Mobile: horizontal scroll or stacked card per vehicle type. Desktop: full table. |
| Comparison table (vs CharterUP) | Feature column + USC column + Competitor column · all with check/x cells | Mobile: stacked feature-by-feature. Desktop: 3-col. |
| Site footer | Brand block + 4 link columns + Legal row + DOT/MC + Logo wall reference | Mobile: 1-col stack. Tablet: 2-col. Desktop: 5-col. |
| Operator-portal dashboard | KPI row (4 stat blocks) + New requests queue + Live multi-trip map + Fleet/drivers/invoice rail | Mobile: stacked. Desktop: 2-col with right rail. |
13.5 Templates · page-level layouts
Eleven v1 templates. Each one corresponds 1:1 with a wireframe screen in Section 07. Grid system: 12-col desktop / 4-col mobile, 24px gutters, 1440px max content width, 32px page margins.
| Template | Wireframe ref | Key organisms |
|---|---|---|
| Homepage | WF-01 | Trust bar · Header · Hero · 5-CTA strip · Solutions grid · Trip Guarantee panel · Logo wall · Reviews · Final CTA · Footer |
| Quote builder | WF-02 | Minimal nav · Stepper · Quote-builder organism · Live summary panel |
| Quote results | WF-03 | Minimal nav · Trip-context bar · Filter rail · Results grid · Trip Guarantee callout · Talk-to-planner persistent |
| Trip details | WF-04 | Minimal nav · Editor organism · Sticky order summary · Persistent help |
| Checkout | WF-05 | Minimal nav · Secure-checkout badge · Checkout organism · Order summary · Trip Guarantee reminder |
| Customer dashboard | WF-06 | Account header · Dashboard hero · Pre-trip checklist · Planner block · Live tracking organism · Receipts rail · Account upsell |
| SEO city / route page | WF-07 | Trust bar · Header · SEO-H1 + lede · Inline quote builder (sticky desktop) · Local pricing table · Local-language body · Internal links · Reviews · FAQ · Footer |
| Trip-type landing | WF-08 | Trust bar · Header · Hero photo + audience H1 · 3-step "how it works" · Pricing block · Reviews · Quote builder sidebar · Footer |
| Trust & About | WF-09 | Header · Stat-led hero · Leadership grid · Trip Guarantee sidebar · Credentials block · Logo wall · Footer |
| Day-of-trip mobile | WF-10 | Compact header · Live tracking organism · Pre-trip / en-route / post-trip states · Talk-to-USC escape |
| Operator portal | WF-11 | Operator nav · KPI row · New-requests queue · Active-trips map · Fleet/drivers/invoices rail |
13.6 Pages · template instances with real content
Per Frost: pages aren't typically specified in the design system — they're the stress test of the template. The hi-fi prototypes already on file demonstrate this: each one is a Page instance of a Template above, with real (or composite-real) content stressing the layout.
| Page (hi-fi prototype) | Template used | Stress test demonstrated |
|---|---|---|
| Homepage · Direction A | Homepage template | Long copy on Trip Guarantee, real F500 logo list, 9 solutions, persistent trust elements without crowding |
| Homepage · Direction B | Homepage template | Same template, denser content treatment + live "23 buses near you" indicator + side-by-side comparison table |
| Quote Builder · interactive | Quote builder template | All 4 steps, validation states, edge cases (<48h warning), save-quote modal, mobile-first responsive |
Additional pages (Quote Results, Trip Details, Checkout, Dashboard, SEO city) are scheduled for the design sprint following dossier approval; templates and organisms are spec'd above and ready to populate.
13.7 Component dependency map · build order
Frost: build bottom-up. Engineering should commit atoms in week 1, molecules in week 2, organisms in weeks 3–4, templates compose in weeks 5–8. Pages assemble continuously across sprints.
13.8 Spec handoff checklist
Per Frost's checklist — verify completeness at every tier before code commit.
Atoms · 12 components
- ✓ All variants identified per atom
- ✓ All states documented (default · hover · focus · active · disabled · error · loading)
- ✓ Exact measurements (px) committed via design tokens
- ✓ Color tokens assigned (no hex literals in components)
- ✓ Typography specs (font · size · weight · line-height)
- ✓ A11y requirements (ARIA · keyboard · 44px tap target)
Molecules · 16 components
- ✓ Atom composition listed explicitly
- ✓ Layout (direction · gap · alignment) committed
- ✓ Variants with composition differences documented
- ✓ Interactive behavior described per molecule
- ✓ Context-independence verified (works in header AND sidebar)
Organisms · 18 components
- ✓ Component hierarchy tree documented (above)
- ✓ Layout system specified (grid / flex)
- ✓ Responsive breakpoint changes per organism
- ✓ Section-level states (loading / error / empty) described
Templates · 11 templates
- ✓ Page grid system defined (12-col desktop / 4-col mobile)
- ✓ Content-area constraints specified (1440px max content)
- ✓ Organism placement documented per template (above)
- ✓ Responsive layout variations per breakpoint per template
Design system stewardship · post-launch
Per Frost (Chapter 5): design systems decay without active stewardship. The v1 ship is not the end. Recommendation: assign one engineer + one designer to system ownership starting at launch. Deprecate components explicitly when they're replaced. Evaluate every new pattern proposal against "can an existing component handle this?" before adding to the inventory.
Chunk 13 verdict · component inventory locked, ready for handoff
12 atoms · 16 molecules · 18 organisms · 11 templates · pages-continuous. Naming convention committed, design tokens named, build order sequenced by week, handoff checklist completed. Next (final) chunk produces the Design Spec + Developer Deployment Code per HANDOFF-TEMPLATES.md — the document the front-end team pastes into their planning ticket.
The copy-paste handoff brief — what the front-end team picks up at sprint zero.
Final convergence of the Deliver phase. The Design Specification below collapses Sections 12–13 into a single document the developer reads once. The Developer Deployment Code is the literal text to paste into a Frontend Developer skill conversation to begin implementation. Together they're the contract between this dossier and the codebase.
14.1 Design Specification · US Coachways v1
# DESIGN SPECIFICATION · US Coachways · v1.0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ## 1. COLOR PALETTE | Token | Hex | Usage | |------------------------|----------|----------------------------------------| | --usc-color-navy-900 | #061a30 | Primary surface, dark mode | | --usc-color-navy-800 | #0b2a4a | Primary brand | | --usc-color-navy-600 | #1b4fa8 | Link, active state | | --usc-color-blue-500 | #2c6fd1 | Accent, info | | --usc-color-red-700 | #9a1e22 | Danger, sale, hover-pressed | | --usc-color-red-600 | #c2271f | Primary CTA | | --usc-color-red-500 | #dc2f25 | Hover CTA | | --usc-color-amber | #f3b042 | Live badge, in-progress | | --usc-color-ok | #1b8a4a | Success states | | --usc-color-warn | #d97706 | Warning states | | --usc-color-danger | #c2271f | Error states (= red-600) | | --usc-color-ink-900 | #11161f | Primary text | | --usc-color-ink-500 | #5a6273 | Secondary text | | --usc-color-ink-100 | #e4e7ee | Borders, dividers | | --usc-color-paper | #f7f4ec | Cream background (Dir A) | | --usc-color-white | #ffffff | Surface background (Dir B) | ## 2. TYPOGRAPHY Font pairing: Söhne (display + body) + JetBrains Mono (code/labels) Fallback stack: system-ui, -apple-system, sans-serif | Element | Family | Size (mobile / desktop) | Weight | Line-height | |----------|--------------|-------------------------|--------|-------------| | Display | Söhne | 44px / 84px | 700 | 0.98 | | H1 | Söhne | 34px / 56px | 700 | 1.02 | | H2 | Söhne | 26px / 38px | 600 | 1.10 | | H3 | Söhne | 22px / 28px | 600 | 1.20 | | Body-lg | Söhne | 17px / 19px | 400 | 1.50 | | Body-md | Söhne | 15px / 16px | 400 | 1.55 | | Body-sm | Söhne | 13px / 14px | 400 | 1.50 | | Caption | Söhne | 12px / 12px | 500 | 1.40 | | Mono | JetBrains | 12px / 13px | 400 | 1.50 | ## 3. SPACING SYSTEM (4px base) | Token | Value | Usage | |--------------|-------|------------------------------------| | --space-1 | 4px | Hairline · icon-to-text | | --space-2 | 8px | Default internal | | --space-3 | 12px | Related element gaps | | --space-4 | 16px | Component padding (default) | | --space-5 | 24px | Section gaps | | --space-6 | 32px | Major section breaks | | --space-7 | 48px | Page-section margins | | --space-8 | 64px | Hero spacing | | --space-9 | 96px | Page padding (desktop) | | --space-10 | 128px | Reserved for extreme layouts | ## 4. RADII & ELEVATION | Token | Value | |--------------|------------------------------------------------| | --radius-sm | 4px (inputs · chips) | | --radius-md | 8px (buttons · cards) | | --radius-lg | 14px (modals · primary cards) | | --radius-pill| 999px (chips · phone badges) | | --elev-1 | 0 1px 2px rgba(11,42,74,.08) | | --elev-2 | 0 4px 12px -2px rgba(11,42,74,.12) | | --elev-3 | 0 12px 32px -8px rgba(11,42,74,.18) | ## 5. COMPONENT STATES ### Button (btn-*) | State | Background | Text | Border / Ring | |----------|---------------------|--------|--------------------------------------| | Default | --color-red-600 | white | none | | Hover | --color-red-500 | white | translateY(-1px) + elev-2 red shadow | | Active | --color-red-700 | white | translateY(0) | | Focus | --color-red-600 | white | 2px outline --color-red-500 offset 2 | | Disabled | opacity .4 | white | cursor: not-allowed | | Loading | --color-red-600 | white | spinner replaces label · aria-busy | ### Input (input-*) | State | Background | Border | Label color | |----------|-------------|------------------------|-----------------------| | Default | --paper-2 | 1px --ink-100 | --ink-500 | | Focus | white | 1px --navy-700 | --navy-700 | | Valid | white | 1px --color-ok | --ink-500 + check icon| | Error | white | 1px --color-danger | --color-danger | | Disabled | --ink-100 | 1px --ink-100 | --ink-300 | ### Vehicle card (card-vehicle-*) | State | Treatment | |-----------|-----------------------------------------------------| | Default | --ink-100 border · --radius-md · --elev-1 | | Hover | --navy-700 border · --elev-2 | | Selected | --navy-900 border 2px · checkmark badge top-right | | Unavail. | opacity .5 · "Currently unavailable" overlay | | Loading | Skeleton placeholder (same dimensions) | ## 6. ACCESSIBILITY REQUIREMENTS | Requirement | Specification | |--------------------------|----------------------------------------------------| | Standard | WCAG 2.2 AA on every shipped surface | | Contrast (body) | ≥ 4.5:1 | | Contrast (large / UI) | ≥ 3:1 | | Tap target (mobile) | ≥ 44 × 44 px | | Click target (desktop) | ≥ 32 × 32 px with sufficient spacing | | Focus ring | 2px solid --color-red-500, offset 2px | | Landmark structure | header · main · nav · footer required | | Skip-to-content link | First focusable element on every page | | prefers-reduced-motion | Honored: no parallax · no auto-carousel · no spin | | prefers-color-scheme | Dark mode not v1 (light only) | | Color-only signals | Never · always paired with icon + text | | Form errors | text + icon + aria-invalid + aria-describedby | | Live regions | aria-live="polite" for ETA · "assertive" for errors| | Images | All meaningful images have alt · decorative alt="" | | Keyboard navigation | Every interactive element reachable + visible focus| ## 7. RESPONSIVE BREAKPOINTS (mobile-first) | Breakpoint | Min-width | Layout intent | |-------------|-----------|----------------------------------------| | (default) | 0 | Phone portrait | | --bp-sm | 480px | Large phone / small tablet portrait | | --bp-md | 768px | Tablet portrait | | --bp-lg | 1024px | Tablet landscape / small laptop | | --bp-xl | 1280px | Desktop · primary design width | | --bp-2xl | 1536px | Wide desktop · content max 1440px | ## 8. INTERACTIONS | Element | Trigger | Response | |---------------------|----------------|------------------------------------------------| | Primary button | Hover | Background → red-500 · translateY(-1px) | | Primary button | Click | scale(0.98) · 100ms | | Card | Hover | --elev-2 shadow · translateY(-2px) · 140ms | | Input | Focus | Border transition --ink-100 → --navy-700 200ms | | Step transition | Forward / back | Fade 120ms · honor prefers-reduced-motion | | Modal open / close | Trigger | Fade backdrop 150ms + scale modal 0.96 → 1 | | Live tracking map | GPS update | Bus icon translates with 800ms ease | | Toast | Trigger | Slide-in from bottom · auto-dismiss 4000ms | | Quote-builder step | "Continue" | Validate → save state → fade next panel | ## 9. ATOMIC COMPONENT INVENTORY ATOMS (12): Button · Input · Label · Icon · Badge · Checkbox · Radio Stepper · Avatar · Divider · Spinner · Link MOLECULES (16): Form-field · Tab-group · Search-field · Stepper-progress Trust-badge-row · Operator-credentials · Price-block · Vehicle-card Live-trip-status · Chip-filter · Toast · Inline-alert Review-card · Stat-block · Pricing-row · Phone-CTA-block ORGANISMS (18): Site-header · Persistent-trust-bar · Hero-quote-builder 5-CTA-differentiator-strip · Trip-Guarantee-panel · Quote-builder-organism Quote-results-grid · Trip-details-editor · Checkout-organism Dashboard-hero · Live-tracking-surface · Reviews-wall Solutions-grid · Logo-wall · Pricing-table · Comparison-table Site-footer · Operator-portal-dashboard TEMPLATES (11): Homepage · Quote-builder · Quote-results · Trip-details · Checkout Customer-dashboard · SEO-city-or-route · Trip-type-landing Trust-About · Day-of-trip-mobile · Operator-portal PAGES (continuous): Hi-fi prototypes already on file demonstrate template instances.
14.2 Developer Deployment Code · copy-paste handoff
The block below is the canonical handoff brief. Paste into a new conversation with the Frontend Developer skill (or hand to any front-end team). The developer has creative freedom within these structural constraints.
--- DEVELOPER DEPLOYMENT CODE · US COACHWAYS v1 --- You are the Developer. I am the Designer. Here are the approved wireframes, design tokens, and component specifications. Implement this in [STACK-AGNOSTIC · recommend Next.js (React) + Tailwind + headless CMS · see Hosting matrix in Strategy Book § 10] using clean, component-based code organized by Frost's atomic hierarchy. ## Design Context US Coachways rebuild · charter-bus brokerage moving from RFQ-only to instant-quote marketplace with the only public Trip Guarantee in the industry. Mobile + desktop parity; mobile is the larger paid-traffic share. 14-week target to v1 launch (phased roadmap in Strategy Book § 12). ## User Flow Reference Primary acquisition flow (Maya · the Coordinator · 42% of traffic): SEO landing or paid search → Hero quote builder (4 steps, ~60 sec) → Quote results (3-6 buses with operator credentials) → Trip details editor → Single-page checkout (10% deposit) → Customer dashboard with live tracking T-2h → Post-trip rebook + Team Account upsell Three personas: Maya (Coordinator · primary), David (Procurement · LTV), Robin (Group Lead · SEO volume). Persona-tag on every component. ## Design Tokens ### Colors --color-navy-900: #061a30 (primary surface, dark) --color-navy-800: #0b2a4a (primary brand) --color-navy-600: #1b4fa8 (link, active) --color-blue-500: #2c6fd1 (accent, info) --color-red-600: #c2271f (primary CTA) --color-red-500: #dc2f25 (CTA hover) --color-amber: #f3b042 (live badge) --color-ok: #1b8a4a (success) --color-warn: #d97706 (warning) --color-danger: #c2271f (error · = red-600) --color-ink-900: #11161f (text) --color-ink-500: #5a6273 (text-secondary) --color-ink-100: #e4e7ee (border) --color-paper: #f7f4ec (cream bg · Direction A) --color-white: #ffffff (surface · Direction B) ### Typography Font family: "Söhne", -apple-system, system-ui, sans-serif Mono: "JetBrains Mono", ui-monospace, monospace Display (hero): 84px / 700 / 0.98 (desktop); 44px / 700 (mobile) H1: 56px / 700 / 1.02 (desktop); 34px / 700 (mobile) H2: 38px / 600 / 1.10 (desktop); 26px / 600 (mobile) Body: 16px / 400 / 1.55 (desktop); 15px / 400 (mobile) Caption: 12px / 500 / 1.40 ### Spacing (4px base) 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 · 128 ### Radii sm 4px · md 8px · lg 14px · pill 999px ### Elevation elev-1: 0 1px 2px rgba(11,42,74,.08) elev-2: 0 4px 12px -2px rgba(11,42,74,.12) elev-3: 0 12px 32px -8px rgba(11,42,74,.18) ## Component Requirements (12 atoms · 16 molecules · 18 organisms) Full inventory in Dossier § 13. Highest-priority for sprint 1: - Button (5 variants × 6 states) - Input (6 variants × 7 states) - Form-field molecule (label + input + helper + error) - Vehicle-card molecule - Quote-builder organism (4-step wizard with stepper, autosave, sticky summary) - Site-header organism (sticky · trust-bar above · CTA right) Build order: atoms wk1 → molecules wk2 → organisms wks3-4 → templates wks5-8 → pages continuous. ## Responsive Behavior Mobile-first; min-width breakpoints only. sm 480 · md 768 · lg 1024 · xl 1280 · 2xl 1536 Content max-width: 1440px (centered, 32px page margins). Touch targets: 44 × 44 px minimum on mobile. ## Accessibility Checklist - [ ] WCAG 2.2 AA on every shipped surface - [ ] 4.5:1 contrast for body text · 3:1 for large & UI - [ ] 44 × 44 px tap targets on mobile · 32 × 32 px desktop - [ ] Visible focus-visible ring (2px solid --color-red-500, offset 2) - [ ] Skip-to-content link first focusable on every page - [ ] Semantic landmarks (header · main · nav · footer) - [ ] prefers-reduced-motion respected - [ ] Forms: label above input · errors with text + icon + aria - [ ] aria-live="polite" on ETA / status regions - [ ] aria-live="assertive" for error toasts - [ ] Color never the only signal - [ ] All images have alt · decorative alt="" ## Implementation Notes PERFORMANCE (non-negotiable for SEO surfaces): - LCP < 1.8s on mobile 4G - INP < 200ms - CLS < 0.05 - HTML < 50KB compressed · critical CSS inlined - AVIF + WebP fallback · srcset for 4 breakpoints - Quote-builder hydrates lazily; initial form is plain HTML INTEGRATIONS: - Salesforce REST API (lead · contact · opportunity) - SubOut.com API (inventory · pricing · operator data) - Stripe (deposit · balance · refunds · 3DS2) - Twilio (SMS magic links · trip-day status) - Mapbox (autocomplete · live tracking) - Segment (analytics → Salesforce + Mixpanel) - Sanity or Contentful (city/route/trip-type content) ANALYTICS: - Instrument every P0 story's conversion event (see Dossier § 09) - North-star: cost-per-booked-trip from paid (weekly) - Funnels: hero → quote → results → trip-details → checkout → confirmed OUT-OF-V1 (firewall · see Dossier § 8.4): - Native mobile apps (web-responsive only in v1) - AI trip planner - International / multi-language - Operator ownership / fleet acquisition - CRM rebuild (Salesforce stays as system of record) --- END DEPLOYMENT CODE ---
14.3 Quick Spec · printable wallet card
Lightweight version for the team's wall or sprint kickoff. Same numbers, fewer words.
# QUICK SPEC · US Coachways v1 ## Tokens Primary CTA: #c2271f · Brand: #0b2a4a · Accent: #2c6fd1 · Error: #c2271f Font: Söhne · Base: 16px · Mono: JetBrains Spacing 4px base: 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96 ## Components (high-level) Button: 5 variants × 6 states · 44px min height Input: label-above · validate on blur · 16px min font Vehicle card: photo + operator + price + CTA · hover lifts 2px Quote builder: 4 steps · autosave · sticky summary panel Dashboard: status-first · live map · driver chat · share-link Trust bar: persistent · Trip Guarantee + phone + DOT/MC ## States Default → Hover → Focus-visible → Active → Disabled → Loading Inputs add: Valid → Invalid ## A11y Contrast 4.5:1 · Tap target 44px · Focus visible 2px red ring prefers-reduced-motion honored · aria-live for ETAs ## Responsive Mobile-first · 480 · 768 · 1024 · 1280 · 1536 Content max 1440px centered ## North-star metric ↓ cost-per-booked-trip from paid acquisition (weekly). If new homepage + quote builder doesn't materially move this by Week 5, stop and re-diagnose before continuing.
14.4 Final verdict · dossier complete
UX Dossier · v1.0 · 14 / 14 sections complete
The Flow Strategist work is done. The Wireframe Architect work is done. The Spec Engineer work is done. Three personas locked, eight P0 stories specified, every Nielsen heuristic cleared, every behavioral principle mapped, every component named. The dossier is the contract. The wireframes are the blueprint. The hi-fi is the visual reference. The Deployment Code is the brief. Build the thing.
What ships with v1
- Homepage · 2 visual directions (A or B picked at design review)
- Quote builder · 4-step instant pricing
- Quote results · operator-detail grid
- Trip details + Single-page checkout
- Customer dashboard + live tracking
- Team Account v1 (recurring shuttles)
- 9 trip-type landing pages
- 250 programmatic city pages · 500 route pages
- 3 comparison pages (vs CharterUP / vs GoGo / vs local)
- Trip Guarantee policy page
- Refreshed operator portal (SubOut.com)
Two-week validation sprint (insert before code freeze)
- 5–8 Maya interviews · validate 60-sec quote promise
- 3–5 David interviews · validate self-serve appetite (Assumption 2)
- 5+ Robin intercepts on competitor city pages · test trust-signal hierarchy
- Run heuristic re-eval with 2 additional independent evaluators
- 5-second test on Hi-fi A vs. trust-band-collapsed variant
- Trip Guarantee SLA copy comprehension test
What ships in v1.5 / v2 (parked)
- Split-payment / collect-from-group (Robin outlier)
- Native mobile app
- AI trip planner (natural-language → fleet)
- Operator self-onboarding
- Multi-language (Spanish first)
- Referral-credit program
- Procurement RFP marketplace (David enterprise upsell)
- Federal / disaster-relief micro-site (Gov vertical)
"I do not decorate. I architect decisions.
I do not guess user needs. I map their jobs.
I do not hand off ambiguity. I deliver specifications.
Every wireframe is a hypothesis. Every spec is a contract."
The Designer's Oath · UX Designer skill
UX Dossier · US Coachways · May 2026 · 14 sections · 9 reference frameworks · 3 personas · 8 P0 stories · 47 components
Companion artifacts: Strategy book · Wireframes (11 screens) · Hi-fi Direction A · Hi-fi Direction B · Interactive quote builder