aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/messages.js
Commit message (Collapse)AuthorAgeFilesLines
* The DM drain wakes the signer itself: boot's single resume attempt losing to ↵Adam Soltys2026-08-301-3/+10
| | | | | | | cold-start churn left the phone holding every wrap with nothing ever asking the bunker again — now a drain that finds its decryptor set incomplete calls resume (single-flight, rate-limited) before deciding anything, and the bunker resume deadline stretches to 15s Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
* A signer dying mid-drain stops burning retry budget: the pass breaks off and ↵Adam Soltys2026-08-301-0/+4
| | | | | | | leaves the untried wraps pending for the next full-strength attempt, instead of counting them as failures against a decryptor set that was no longer there Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
* The Amethyst signer stops dying every time a stranger's wrap fails to ↵Adam Soltys2026-08-301-1/+4
| | | | | | | decrypt: only connection-shaped failures (with a real per-op deadline now — a backgrounded signer app used to just hang the call) drop the live bunker, the reconnect surfaces offer only the door the account actually came through (a recorded 'via', so an Amethyst-linked npub no longer stares at Google and passkey buttons), the settings card quietly reattaches from the stored session instead of waiting for a tap, and the DM retry drain eases to three full-strength passes per wrap Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
* DMs stop losing the race with the signer, and your own address stops paying ↵Adam Soltys2026-08-301-8/+83
| | | | | | | yourself: undecrypted wraps are kept and retried when a signer comes live (the backfill used to be consumed and dropped whenever the login signer hadn't resumed yet — each device kept a different random subset of history), the inbox also reads the relays our kind-10050 actually advertises, and pasting your own ark address or coinos name into Send now opens the board panel from Savings instead of a silent Spending→Spending self-send; a foreign ark address while Savings is selected says to switch instead of quietly spending the other balance Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
* Read is read everywhere: the messages home gains a Mark-all-read link (every ↵Adam Soltys2026-08-291-1/+53
| | | | | | | DM and channel watermark jumps to its newest foreign message), and read state now rides its own sync domain — watermarks only ever grow, so a per-key max merges cleanly across devices and a thread read on the phone stops glowing on the desk Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019WboeoetMF3MTmgT7Ew8yi
* The composer learns the second dimension: a textarea that grows with the ↵Adam Soltys2026-08-291-4/+22
| | | | | | | text (capped at five lines), Enter still sends, and a newline is one Shift+Enter or Ctrl+J away — bubbles already knew how to show them Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019WboeoetMF3MTmgT7Ew8yi
* A half-typed message waits where you left it: drafts live per conversation ↵Adam Soltys2026-08-291-12/+34
| | | | | | | (each DM and each channel its own), survive navigation and reloads through feature state on a typing debounce, and clear only when the message actually sends Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019WboeoetMF3MTmgT7Ew8yi
* A round's output can no longer strand: every refresh asks the server to drop ↵Adam Soltys2026-08-291-5/+27
| | | | | | | its unlock hash in the mailbox, and any device that finds such a breadcrumb with no matching action adopts the claim itself (input ids now read from the status response — the rescue needs no operator). History learns to tell the whole truth and nothing more: coins the server saw spent elsewhere get a folded row (skipping coins a known renewal consumed), renewals fold across devices on their unlock hash and appear only when they cost something, and a rescue records the fee the round actually took. The account page keeps its header icons when reached from an open wallet; the messages page folds the control/guestbook replay once per burst instead of painting every intermediate state — no more blinking messages from superseded ban lists or member counts crawling to their total, which now paints from last session's settled figure Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019WboeoetMF3MTmgT7Ew8yi
* The profile editor learns to take a photo, not just a URL: an Upload button ↵Adam Soltys2026-08-281-0/+18
| | | | | | | feeds the same signed nostr.build path the onboarding picker uses and fills the picture field with the result Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* Forget-all keeps its word: the delete-everything warning lives inside the ↵Adam Soltys2026-08-281-13/+27
| | | | | | | logout popup now, and confirming it wipes on the spot and lands on the front door — no detour through the Accounts page that looked like the deed was done when only a confirm screen had opened Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The red dot stops being fashionably late: a device with no read watermarks ↵Adam Soltys2026-08-281-1/+10
| | | | | | | paints it from the first frame — the community is never empty and read state is local, so the fetch was only ever going to confirm it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The face arrives with the key: sign-in warms the identity's profile and ↵Adam Soltys2026-08-271-0/+11
| | | | | | | preloads the avatar bytes in parallel with the seed work, so the home screen's first paint already wears the picture instead of a blank circle Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The address stops waiting for the mail: your own claimed name prints ↵Adam Soltys2026-08-261-5/+14
| | | | | | | instantly, a deep link's URL already spells the address so it paints with the first frame, and the light cache now remembers nip05 and lightning address between sessions instead of shedding them at the door Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The hat pitch moves next door to the head it would sit on: a small "Support ↵Adam Soltys2026-08-261-2/+3
| | | | | | | Coinos — buy a hat for your avatar" link beside the profile avatar replaces the block button buried in the editor Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* No borrowed faces: the seeded profile entry is marked provisional, so the ↵Adam Soltys2026-08-261-5/+8
| | | | | | | avatar holds its quiet circle until the real kind 0 answers — punk art means "has no picture", never "picture not here yet" Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The landing settles as one motion: the resolving shell now holds the frame ↵Adam Soltys2026-08-261-9/+16
| | | | | | | over every screen — an auto-restored wallet no longer flashes its home page — and the animation clock stands still until the profile has replaced the shell in place, so nothing slides twice Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The door opens on the right room: a profile link claims the very first paint ↵Adam Soltys2026-08-261-1/+26
| | | | | | | — a shell with the asked-for name holds the frame while the registrar answers, the username seeds the avatar's fallback art so no npub prefix or empty circle shows, and an unknown name falls quietly through to the front door Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The profile page steps out front: /username resolves at page load — not ↵Adam Soltys2026-08-261-25/+42
| | | | | | | wallet open — and for a visitor with no account it renders as a truly public page over the front door, threads included, with wallet-only actions held back and Back leading into the app Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* A doormat note is read once: the profile deep link is consumed by the first ↵Adam Soltys2026-08-261-4/+9
| | | | | | | wallet to see it, so logging out and starting fresh in the same tab lands on the new home screen, not the last visitor's profile Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* The old address book habit carries over: v3.coinos.io/<username> opens that ↵Adam Soltys2026-08-261-0/+29
| | | | | | | user's profile — the server already hands every stray path to the app, which now reads a lone name (or npub, or bare key) off the doormat, asks the registrar who lives there, and shows you in Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* Every face is a door: note-row avatars open the author's profile again — ↵Adam Soltys2026-08-241-1/+3
| | | | | | | the thread view had them inert, and even in the feed a tap on the picture now means the person, not the post Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019eA8JRq9Wr7z2fRQk99HLi
* Delivery moves at the speed of the best relay, not the worst: publish ↵Adam Soltys2026-08-181-13/+17
| | | | | | | resolves on the first acceptance, DMs stop idling on the peer's inbox lookup, and the dimming departs — a sent message simply appears Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012u4oe1KPx9faCsDBLfZYqi
* The tick bows out: delivery speaks through the dimming alone — faint in ↵Adam Soltys2026-08-181-7/+5
| | | | | | | flight, full strength once a relay has it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012u4oe1KPx9faCsDBLfZYqi
* A message sends the instant you let go of it: the rumor hashes synchronously ↵Adam Soltys2026-08-181-37/+51
| | | | | | | onto the screen as a dimmed bubble, crypto and relays catch up in the background, and one small tick marks the moment a relay takes it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012u4oe1KPx9faCsDBLfZYqi
* The composer lets go of a sent message: the morph rightly won't rewrite a ↵Adam Soltys2026-08-181-2/+12
| | | | | | | focused field, so sending clears the live input itself, not just the draft state Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_012u4oe1KPx9faCsDBLfZYqi
* A missing signer opens a door instead of a toast: the reconnect screen ↵Adam Soltys2026-08-181-1/+6
| | | | | | | offers the extension, the signer-app link, or a pasted key — same account enforced — and the silent reattach closes it on its own when it lands Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The avatar ask learns to recognize a face: an identity with a published ↵Adam Soltys2026-08-171-0/+3
| | | | | | | picture skips the punk picker and lands straight on done Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* A full profile fetch outranks the day-old cache: the freshest kind 0 stamps ↵Adam Soltys2026-08-171-1/+8
| | | | | | | the light cache and repaints the header, so a face changed elsewhere shows up in seconds instead of after the TTL Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The forget option speaks at full volume — same size as its siblings, red ↵Adam Soltys2026-08-171-1/+1
| | | | | | | says the rest Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* One Log out button, one honest question: the popup offers the plain exit and ↵Adam Soltys2026-08-171-13/+26
| | | | | | | the full forget, each keeping its own warnings Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The profile grows a second, honest exit: Log out leaves the room, Log out & ↵Adam Soltys2026-08-171-2/+10
| | | | | | | forget this device burns it down — behind the Delete-all warning, which now also sweeps the cached balances and history it always implied Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Hats: put your money where your head is — supporter hats perch above the ↵Adam Soltys2026-08-161-3/+4
| | | | | | | avatar everywhere it appears, from 21-sat beanie to 2.1M-sat top hat; the crown stays on the founder Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Chat stops blaming the signer for a locked door: a padlocked wallet says so ↵Adam Soltys2026-08-161-6/+19
| | | | | | | plainly, with the unlock one tap away Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Username and display name go their separate ways: the handle wears a frozen ↵Adam Soltys2026-08-151-42/+38
| | | | | | | @coinos.io so it reads as address and NIP-05, renames claim before the profile publishes, and nip05 rides along with lud16 Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* A new name offers its hand to the address: saving a renamed profile proposes ↵Adam Soltys2026-08-151-27/+69
| | | | | | | the matching @coinos.io, and any rename repoints the kind-0 lightning address so zaps never chase a released name Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The profile form stops arriving fashionably late: it paints on the first ↵Adam Soltys2026-08-151-11/+27
| | | | | | | frame from the local cache, and the posts area holds its ground while the relays answer Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* A newborn identity knows it has no portrait: fresh seeds skip the kind-0 ↵Adam Soltys2026-08-151-0/+11
| | | | | | | wait and the punk paints the moment home appears Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* A refresh forgets nothing: bios and recent posts persist to storage and ↵Adam Soltys2026-08-151-5/+48
| | | | | | | paint instantly while the relays quietly freshen them behind the scenes Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Profiles arrive warm: pages prefetch for every likely tap-target (own ↵Adam Soltys2026-08-151-16/+50
| | | | | | | avatar, DM peers, search results, feed rows) and the spinners are simply gone Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The header avatar builds fresh each render — the cached-node trick ↵Adam Soltys2026-08-151-7/+5
| | | | | | | predates the morph, which both obsoleted it and was emptying it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Log out lives in the profile card below Save, wearing the door-and-arrowAdam Soltys2026-08-151-6/+9
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Your profile knows it's yours even when the keys are elsewhere — ownership ↵Adam Soltys2026-08-151-1/+1
| | | | | | | follows the identity the header wears, not just the loaded signer Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Your own profile carries the exit: Log out signs the session off entirely, ↵Adam Soltys2026-08-151-0/+4
| | | | | | | distinct from the padlock's lock-in-place Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The thread focus marker learns subtlety: a soft tint on the reply you jumped ↵Adam Soltys2026-08-151-2/+2
| | | | | | | to, nothing on the root — no more mystery black bar Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Welcome DMs stop echoing: sent-copies thread under their recipient whichever ↵Adam Soltys2026-08-151-3/+21
| | | | | | | identity authored them, the registrar keeps no sender copy at all, and the old self-thread residue sweeps itself Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Threads speak back: a reply composer with proper NIP-10 markers, ↵Adam Soltys2026-08-151-5/+87
| | | | | | | conversations fetched from the author's own relays, and a ⚡ tap that can never be swallowed by the row underneath Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The social layer grows up: a header magnifier finds anyone on nostr, ⚡ ↵Adam Soltys2026-08-151-11/+141
| | | | | | | zaps your saved amount in one tap (asking once if you haven't picked one), and tapping a note opens its thread Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Profile posts read as a feed: avatar and name on every note, hairlines ↵Adam Soltys2026-08-151-8/+20
| | | | | | | between them, one scrollable pane instead of scattered cards Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Settings grows a Notifications page — per-category switches the notifier ↵Adam Soltys2026-08-141-2/+45
| | | | | | | honours server-side — and the status bar gets a real coinos badge instead of a black blob Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Holding backspace works in the recipient field: search results and reveals ↵Adam Soltys2026-08-141-7/+5
| | | | | | | stop rebuilding the focused input mid-keypress; the profile npub is itself the copy button Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv