BESBanking Experience System
Docs Components Journey Showcase
Draft — not yet human-verified. Every gate passing here is automated. No screen-reader, Arabic native-speaker or usability testing has been carried out yet, and all Arabic UI copy is machine-drafted. What has and hasn't been verified
Verification

Component & Pattern Status Registry

The single source of truth for what is actually ready. Statuses per GOVERNANCE.md: Specified (docs only) → Coded (in bes.css/js, audits pass) → Trial (one human-protocol pass) → Stable (screen-reader + Arabic passes; usability evidence for money-moving patterns).

Last updated: 2026-08-31 (post-1.0.1 independent review). Nothing is Trial/Stable yet — human protocols are written and awaiting testers (docs/testing/). Five defects that all three automated gates passed through are fixed in [Unreleased], and the gates themselves now derive from the artefacts rather than from hand-written lists (see CHANGELOG). "Coded" still means the component exists, the gates pass and its behaviour is exercised in jsdom — not that a human has used it. Trial and Stable remain gated on the human protocols in docs/testing/.

Foundations

Foundation Spec Status Notes
Color · Typography · Spacing & layout · Motion 01–03, 05 Coded Emitted as tokens; contrast gated per brand
Icon set 04 Specified No icon assets ship. Doc 04 defines the 24px construction grid, ~20 required financial glyphs (transfer, remittance, FX, fee, hold, refund, reversal, split bill, request money, QR pay, instant…), the RTL mirroring policy and the accessible-name rules — but the repository contains zero SVG assets. Components inline the few glyphs they need or expect the consumer to supply them. Drawing the set is outstanding design work, not a build step.
Design-tool library (Figma) — Specified Blueprint written (docs/figma-build-spec.md) — variables, styles, component pages. No library file has been built, so BES is currently adoptable by engineers but not by designers working in Figma.

Core components

Component Spec Status Notes
Button (all variants) 08 Coded
Icon Button 08 Coded
Link / Menu / Button Group 08 Specified Menu styles coded; behavior partial
Text Input + form primitives 09 Coded
Currency Input 09 Coded Live validation, Arabic-digit parsing
Search 09 Specified Compose from Text Input
Select 09 Coded Styled native
Combobox 09 Coded Filter + keyboard
Date Picker 09 Coded Processing-day blocking; range variant Specified
Checkbox / Radio / Switch 09 Coded
PIN Entry / Code Entry 09 Coded
Character Count 09 Coded
File Upload 09 Coded UI states; transport is host-app concern
App Bar / Bottom Nav / Side Nav 10 Specified Journey bar coded as instance
Tabs 10 Coded RTL-aware keyboard
Segmented Control 10 Coded
Breadcrumb / Pagination 10 Coded
Stepper 10 Coded Display + journey logic
Language Switcher / Session Bar 10 Specified Language switch proven in showcase/journey
Card / List / List Item 11 Coded
Table (+ sorting) 11 Coded
Accordion 11 Coded
Modal / Bottom Sheet 11 Coded
Drawer 11 Coded
Popover / Tooltip 11 Coded
Alert / Banner / Toast 12 Coded
Status Badge 12 Coded 13 transaction states + generic UI status, glyph-paired
Progress / Skeleton / Spinner 12 Coded
Empty / Loading / Error states 12 Coded

Financial components

Component Spec Status Notes
Money value type 13 Coded Exact minor units · 7 rounding modes · allocate · Intl rendering · Eastern numerals
Component token tier 06/30 Coded 30 tokens · zero literals in bes.css · proven by the Sadu brand (brand-proof.html)
Amount (all variants) 13 Coded Renders a Money; no component holds a float
Amount Pair (FX) / FX Rate 13 Coded In journey + gallery
Rate Lock Timer 13 Coded Expiry → re-quote proven in journey
Masked Balance 13 Coded Class-based, 30s auto re-mask; cross-surface sync is host-app wiring
Fee Line / Breakdown / Total Row 13 Coded
Amount Delta / Limit Indicator 13 Coded
Account Card / Balance Set / Selector 14 Coded Selector = Select instance
IBAN Display / Product Header / Spaces 14 Specified IBAN input coded; display partial
Transaction state (all 13, incl. UNKNOWN / blocked / refunded) 07/15 Coded data-bes-state reads one registry: colour, glyph, EN+AR label. UNKNOWN cannot render a retry control
Transaction Item / List / Table / Detail 15 Coded Detail composed in journey/receipt
Transaction Timeline / Receipt 15 Coded Receipt printable
Statement Row / Search & Filters 15 Specified
Payee Card / Beneficiary Manager 16 Coded (journey) Manager list = journey payee list
Payee Verification (name check) 16 Coded All four states (match / close / no-match / unavailable)
Transfer Review / Auth Prompt / Results 16 Coded Full contract in journey
Scheduled Setup / Request-to-Pay / QR / Split / Bills 16 Specified
Card Art / Controls / Freeze / Limits 17 Coded PIN mgmt / replacement / dispute Specified
KFS Product Summary 18 Coded
Rate & Profit Rate Displays / Calculator / Schedule 18 Specified Schedule table styles coded
Investments family 19 Specified Charts coded (bar/line/donut)
Identity & Security family 20 Partial Session-pause, device cards, warning tiers coded; document capture / liveness UI Specified
Consent & Privacy family 21 Coded (request card) Dashboard/revocation Specified

Patterns (highlights)

Pattern Status Evidence
P-01 Ask for an amount Coded Journey step 1
P-02/03 Ask for a payee Coded Journey step 2
P-21 Confirm a payment Coded Journey review
P-22 Verify a payee Coded Journey CoP
P-23 Step-up auth Coded Journey PIN (biometric/passkey host-app)
P-31 Receipt & proof Coded Journey receipt
P-40 Transaction status Coded All 13 states as components; UNKNOWN/blocked/refunded result screens in the gallery
P-60 Suspicious transaction challenge Coded Gallery patterns page
Remaining patterns (P-04…P-75) Specified

Verification ledger

Gate Status
Contrast audit — 78 declared pairings (incl. all 13 state-on-tint) + 1,582 derived per brand (core + Sadu = 3,164) ✅ Passing (docs/audits/contrast-report.md)
Brand theme contract (doc 30, T1–T6) — one worked brand, token values only ✅ Passing (docs/audits/theme-report.md)
Transaction state contract (doc 06 §6, S1–S7) — 13 states agree across spec, tokens, CSS and JS ✅ Passing (docs/audits/state-report.md)
Consistency audit (drift · C7 theme-guard · C8 font-size/radius at zero, spacing ratcheted) ✅ Passing (docs/audits/consistency-report.md)
Money/text unit tests (147 assertions, incl. the Money value type) ✅ Passing (node tools/test-js.mjs)
Component DOM tests in jsdom (83 assertions) ✅ Passing (node tools/test-dom.mjs) — also generates the runtime snapshots the contrast audit scores
Whole suite re-run in a UTC+ timezone ✅ Passing (TZ=Asia/Dubai)
CI gates (all of the above on every PR) ✅ .github/workflows/ci.yml
Adversarial scrutiny (3 independent reviews, 88 findings triaged) ✅ docs/audits/scrutiny-report.md
Static a11y audit (51 files) ✅ Passing (docs/audits/a11y-report.md)
Screen-reader protocol ⏳ Written, awaiting tester
Arabic/RTL native review ⏳ Written, awaiting reviewer — all Arabic UI copy (showcase, journey, glossary) is machine-drafted and flagged as unreviewed in-product until this passes
Remittance usability test (5 sessions) ⏳ Written, awaiting participants
Compliance counsel review ⏳ Matrix ready (docs/compliance/)