diff options
| author | Adam Soltys <[email protected]> | 2026-08-02 18:43:56 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-08-02 18:43:56 -0700 |
| commit | 375bec5f2ee22b1f69bb9f4a963efb12a68aef05 (patch) | |
| tree | 3b8f3fe0c9c78a82996ad08375760c7281111fcb /src/features/names.js | |
| parent | 8da44392be513929802a5f4329b29bfa125aaa04 (diff) | |
| download | coinosv3-375bec5f2ee22b1f69bb9f4a963efb12a68aef05.tar.gz coinosv3-375bec5f2ee22b1f69bb9f4a963efb12a68aef05.zip | |
Profiles: view pages, editable own kind 0, zap recipients in history
Tapping any avatar or author name (chat rooms, DM threads, the chat
home) opens a profile page: avatar, name, nip05, lightning address,
about, npub, with Message and Pay actions (Pay runs the npub payment
cascade). Your own profile — reachable from your avatar on the chat
home — gets an editor for name, about, picture, and lightning address
(prefilled with your coinos address); saving merges over the newest
published kind 0 so fields we don't understand survive the round trip.
Zaps now remember who they went to: the ark feature keys the recipient
by what the movement already records (destination address or invoice)
and history rows wear a clickable avatar chip that opens the profile.
The messages feature exposes showProfile/profileChip seams so any
feature can do the same.
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
Diffstat (limited to 'src/features/names.js')
| -rw-r--r-- | src/features/names.js | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/features/names.js b/src/features/names.js index 54f15f7..d6acc6a 100644 --- a/src/features/names.js +++ b/src/features/names.js @@ -308,6 +308,8 @@ export function namesFeature(ctx) { id: 'names', init() { checked = false; lastError = null; refresh(); }, namesAdoptIdentity(signer, npub) { return adoptIdentity(signer, npub); }, + // the claimed payment address, for anyone prefilling a lightning address + namesAddress() { const st = load(); return st.name ? `${st.name}@${st.domain || DOMAIN}` : null; }, stop() { clearTimeout(retryTimer); clearTimeout(deadline); deadline = null; }, receiveModes() { if (!available()) return []; |
