Work / Chitragupt / Wiki / Surfaces
mobile-alerts
Surfacecanonicalverified 2026-10-02
SURFACE.MOBILE.PATTERNS.MOBILE-ALERTSAlerts (mobile)
Summary
The 47 native dialogs the mobile app raises through Alert.alert, with the strings it ships.
Raw wireframe
- .context/designs/mobile/patterns/alerts.html
Copy
The wireframe is the list — every title, body and button, grouped by the screen
that raises it. It was generated from apps/mobile/src on 2026-10-02, not
typed, so the strings are the source's own. Three things it shows that the
source says less plainly:
Try again.is a fallback, not the message. 21 of the 47 dialogs passerr instanceof Error ? err.message : "Try again.", so the user normally sees the server's sentence. The fallback is what is drawn, because it is the only part of that body the app owns.- Three bodies are built from data — the restored plan's name, the deletion date, the audit export's row count and expiry. They are drawn with a real value in place of the placeholder.
- Two bodies are not ours at all: the gateway's failure reason on
ca/confirm.tsx, and the store's refund URL onpayment/refund.tsx. Each card says so in a line under the buttons.
Only two dialogs ask a question — Remove member? and Leave this family? — and both put the destructive button second, in the danger colour. The other 45 are a single OK.
Eight titles are the bare word Failed. It tells the user nothing the body does not, and it is recorded here as what ships rather than as what should.
Flows that touch this surface
- None. A native alert has no route; it is raised over the screen that owns it.
Entities referenced
Sources
- apps/mobile/src/app — every
Alert.alert(call - .context/designs/mobile/patterns/alerts.html
- scripts/check-designs.py — the
copycheck that fails when a dialog string is in no wireframe
Every project of mine is written down like this.
Read the résumé