Part of #353. Phase 3. Depends on the switch ceremony.
Problem or Motivation
Once a user holds several personas, the most likely failure is no longer cryptographic — it is human. Sending a message from the wrong identity cannot be undone: the packet is on the air, signed by a key the user did not mean to use, and on a mesh there is no recall.
Phases 1 and 2 make the personas exist and switch correctly. Nothing yet makes the live one unmistakable at a glance.
Proposed Solution
Small, cheap affordances that make the active persona impossible to mistake.
Per-identity accent colour
Stored in the persona's vault metadata and applied to the chrome — the header, the action bar, or both. The existing theming already runs on CSS variables in app/globals.css, so this is a variable override rather than new styling.
Must work in light and dark, and must not be the only signal, since colour alone fails for colour-blind users and in monochrome. Pair it with the label.
Fingerprint avatar
A deterministic glyph or colour block derived from the public key, shown next to the persona's name. Useful beyond identity switching — it is the same problem contacts already have, so consider whether it belongs somewhere shared rather than scoped to personas.
Contacts-to-re-share nudge
After a switch, the persona's contacts cannot reach the user until they re-add the new key — contacts survive the import but their ECDH secret no longer matches. A dismissable prompt offering to re-share the contact card closes a loop that otherwise leaves the user wondering why nobody replies.
This one is arguably the most valuable of the three, because it addresses a genuine confusion rather than a cosmetic one. Consider pulling it forward into the switch ceremony if it proves load-bearing there.
Constraints
All strings localized. Accent colours are per-radio preferences and therefore travel in the persona's vault metadata, not localStorage — only locale and theme are permitted there, per AGENTS.md.
Part of #353. Phase 3. Depends on the switch ceremony.
Problem or Motivation
Once a user holds several personas, the most likely failure is no longer cryptographic — it is human. Sending a message from the wrong identity cannot be undone: the packet is on the air, signed by a key the user did not mean to use, and on a mesh there is no recall.
Phases 1 and 2 make the personas exist and switch correctly. Nothing yet makes the live one unmistakable at a glance.
Proposed Solution
Small, cheap affordances that make the active persona impossible to mistake.
Per-identity accent colour
Stored in the persona's vault metadata and applied to the chrome — the header, the action bar, or both. The existing theming already runs on CSS variables in
app/globals.css, so this is a variable override rather than new styling.Must work in light and dark, and must not be the only signal, since colour alone fails for colour-blind users and in monochrome. Pair it with the label.
Fingerprint avatar
A deterministic glyph or colour block derived from the public key, shown next to the persona's name. Useful beyond identity switching — it is the same problem contacts already have, so consider whether it belongs somewhere shared rather than scoped to personas.
Contacts-to-re-share nudge
After a switch, the persona's contacts cannot reach the user until they re-add the new key — contacts survive the import but their ECDH secret no longer matches. A dismissable prompt offering to re-share the contact card closes a loop that otherwise leaves the user wondering why nobody replies.
This one is arguably the most valuable of the three, because it addresses a genuine confusion rather than a cosmetic one. Consider pulling it forward into the switch ceremony if it proves load-bearing there.
Constraints
All strings localized. Accent colours are per-radio preferences and therefore travel in the persona's vault metadata, not
localStorage— onlylocaleandthemeare permitted there, perAGENTS.md.