IJMA WALLET - update notes
A great security UX idea is address highlighting or "canary coloring".
I've designed the highlighting scheme for Ijma wallet as follows.
Bitcoin on-chain (bc1q... / bc1p...):
- bc1q or bc1p prefix → muted/grey (boilerplate)
- First 4 chars after prefix → orange (checksum start)
- Middle bulk → normal text
- Last 4 chars → orange (checksum end, most important to verify)
Lightning BOLT11 (...):
- prefix → muted/grey
- Amount digits embedded in prefix (e.g. 210n) → highlighted
- First 6 chars of the hash section → orange
- Last 6 chars → orange
Lightning address (user@domain.com):
- user part → orange
- @ → muted
- domain.com → normal
Nostr npub:
- npub1 prefix → muted
- First 6 chars → orange
- Last 6 chars → orange
How the highlighting works:
Two functions: AddressDisplay renders the coloured spans, parseAddressSegments detects the address type and returns the segment list. The full colour scheme is as follows:
Bitcoin on-chain (bc1q / bc1p)
bc1q · wxyz5 · [bulk middle] · 4abc9
grey orange dark text orange
The bc1q / bc1p prefix is grey — it's the same on every address so no reason to emphasise it. The first 5 chars after the prefix and the last 5 chars are orange — these are the characters a user should scan when confirming a receive address they've sent someone.
BOLT11 Lightning invoice (...)
· 210n · 1pvj · [bulk] · 8kl2w4
grey purple orange dark orange
The network prefix is grey. The amount (e.g. 210n = 21,000 sats) is purple so it stands out clearly — this is the most critical thing to check on an invoice. First 8 and last 8 chars of the data section are orange.
Lightning address (user@domain)
amisatoshi · @ · primal.net
orange grey warm dark
The username is orange because it's the unique identifier. The domain is readable but not highlighted.
Nostr npub
npub1 · abcdef · [bulk] · xyz123
grey orange dark orange
Where it appears:
- Receive screen — the address text below the QR code
- Send confirm screen — the "To" row is now a full-width AddressDisplay rather than a truncated string, so the user can actually see and verify the full address before confirming. The other rows (Amount, Fee, etc.) remain right-aligned as before.

