UI

What people see and do. The client is a plain-HTML/JS progressive web app; UI code lives in app/ui-modules/ (one folder per page or component, co-locating its JS/HTML/CSS) with shared helpers in app/js/ui/.

Main pages

Flows (subpages)

Task-focused subpages under app/ui-modules/subpage/: record a transaction, request a payment, set a trust limit, add a friend (QR / key), and transfer the account to another device.

Send and Request share one friend picker. Opened from a friend's page (#record/<id>, #request/<id>) that friend is preselected; opened from the Tally page the picker starts on "Choose friend…". Either way the submit button stays gray until a friend is chosen and the amount is positive. Request also offers a Create QR code tab for payers who aren't friends yet.

How it connects to the rest

The UI is a pure read/act surface: it renders a sanitised view derived from state (never touching private keys), and user actions call commands, which update the ledger and propagate over the transport. How a change to that state becomes a repainted screen — and how pages slide, scroll and route — is Render flow.