Docs · skills/examples/06-handoff.md

Meridian payoff quote — handoff

Composite example.

Design source: {Figma link} · Prototype: {link} · Built against: release 2026.3 Walkthrough held: 2026-04-18 — 3 engineers, QA, PM · Office hours: Thursdays 10–11 CT

What this is

The borrower-facing flow for requesting and viewing a loan payoff quote. It exists to make the top-ranked call reason completable in the portal; the metric is self-service completion on that task, baselined in 01-project-brief.md.

Tokens

Export: tokens/meridian-2026.3.json. Naming follows category.role.variant.state and matches the front-end variable names exactly.

New tokenValueTierWhy it was needed
color.status.pending.surfaceneutral.100semanticNo existing status covered "requested, not yet available"
color.status.pending.textneutral.700semanticContrast 7.4:1 — measured
color.status.pending.borderneutral.300semantic3.1:1 against surface — measured

No new primitives. The pending status reuses the neutral ramp deliberately: it is a waiting state, not a warning, and the existing warning colour tested as alarming.

Components

ComponentNew / changed / reusedStates deliveredOutstanding
Status chipchanged — pending variant addedall 8
Quote cardnewdefault, loading, partial, stale, expired
Countdownnewdefault, <1h, expiredScreen-reader announcement interval — see below
Date pickerreused — blockedKeyboard path missing; see drift report finding 3. Do not ship this flow until the primitive is fixed.

Screens

3 — Pending

Focus order: 1 back · 2 reference number (copyable) · 3 cancel request · 4 support link.

Accessible names: "Copy reference number Q-88421" on the copy control — not "Copy". Cancel is "Cancel payoff quote request", not "Cancel".

Behaviour rules

ConditionConsequence
Request older than 24hStale treatment, refresh action appears
Content column < 480pxReference and status stack; reference stays first
5 concurrent requests on the accountRequest button disabled, reason stated inline
Principal returned without feesPartial state — show principal, mark fees pending, do not show a total
Loan mid-transfer (200, empty body)"No quote available" copy, not a server error

4 — Quote

Focus order: 1 back · 2 amount · 3 expiry · 4 download · 5 print · 6 support.

The amount is the page's h1 for screen-reader users, visually presented as the largest element. Expiry is announced on load, then at 1 hour remaining — not continuously. The continuous countdown is visual only, marked aria-hidden.

Data and failure

ScreenData neededSourceLatePartialAbsent
Pendingrequest status, refservicing APIkeep pending, no spinner past 3sprincipal only → partial stateserver error state
Quoteprincipal, fees, escrow, expirynightly batchstale statehide escrow line, show note"no quote available"

Accessibility

Full record: a11y/meridian-payoff-wcag22.md. 2.2 AA, all criteria recorded. Two marked engineering-owned (4.1.2 name/role/value on the countdown; 4.1.3 status message announcement). One outstanding: the countdown announcement interval.

Content

All strings final and client-approved, including the compliance disclosure on screen 2 (approved by Meridian legal 2026-04-11 — do not edit without re-review).

Longest-case examples marked in the file. Legal entity names run to 60 characters.

Open questions for engineering

#QuestionOwnerNeeded by
1Can the batch return a partial result, or is it all-or-nothing? Design assumes partial is possible.Lead engSprint 12 planning
2Is the quote cached client-side? Decides the offline state and is a compliance question.Eng + ComplianceSprint 12
3Does the reference number survive a session expiry?Lead engSprint 12

Design QA

qa/meridian-payoff.md, filled before the build started. Sign-off on staging, before release — not after.

The method, written down

Every page here is one file from the skill library. The folder is loadable as a Claude project as-is.