Skip to content
Ritesh FirodiyaGet in touch

Work / Chitragupt / Wiki / Surfaces

mobile-alerts

Surfacecanonicalverified 2026-10-02

SURFACE.MOBILE.PATTERNS.MOBILE-ALERTS

Alerts (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 pass err 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 on payment/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 copy check that fails when a dialog string is in no wireframe

Every project of mine is written down like this.

Read the résumé