// INVITE · the one that asks gently
add a seat. name it.
The ledger is yours. The invite is theirs. A single-use accept link lands in their inbox, bound to a 72-hour window. If they ignore it, nothing happens. If they accept, they take a seat · treasurer, sender, receiver, or watcher. The audit row is written before the email leaves the rail.
// 01 · audit
family_invite row written first · invitee email redacted to b***@domain
// 02 · render
remi│ton template · the same typographic floor as every other email we send
// 03 · deliver
a paper-warm email lands · fire-and-forget · audit row already preserves intent
// 04 · expire
72-hour TTL · single-use accept link · burns on consume · no reminders
┌─ INVITE · the family seat ────────────────┐
└────────────────────────────────────────────┘
the invitee can decline by ignoring · we never nudge · we never re-send.
the invitee can decline by ignoring · we never nudge · we never re-send.
// SHORTCUT
press I to focus the first field · ENTER to send.// QUIET · what we will never do with an invite
Four lines we will never cross.
- ▸We will never email the invitee's full address back into the audit log. Redacted to b***@domain, always.
- ▸We will never let an invite request issue without your wallet handle. X-User-Id signs the audit row, period.
- ▸We will never re-send the invite uninvited. One tap, one email, no nudges.
- ▸We will never expand the 72-hour TTL on a stale invite. It expires, you re-mint, the audit chain stays clean.