aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.js
Commit message (Collapse)AuthorAgeFilesLines
* Log out opens the front door: the start page, with saved wallets one Unlock awayAdam Soltys2026-08-151-1/+6
| | | | | 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-0/+4
| | | | | | | 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/+3
| | | | | | | 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 face the lock remembers is the face you wear: a nostr login outranks the ↵Adam Soltys2026-08-151-2/+7
| | | | | | | seed key in the watch directory too Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Seeds introduce themselves by their wallets — "Same seed as Spending + ↵Adam Soltys2026-08-151-3/+9
| | | | | | | Savings" — and Wallet 1 stays backstage for good Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Lock means stay: the padlock drops the keys and closes, the home screen ↵Adam Soltys2026-08-151-7/+34
| | | | | | | stays put watch-only, and the closed padlock asks the password to reopen Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Locking lands on a page that says Locked — the state confirms itself ↵Adam Soltys2026-08-151-3/+4
| | | | | | | instead of reading as a request Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The balance card's door is labeled Wallets and wears a wallet iconAdam Soltys2026-08-151-1/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* A wallet keeps its face without its keys: the directory remembers each ↵Adam Soltys2026-08-151-3/+12
| | | | | | | wallet's npub, so watch-only still shows your avatar and profile — only signing waits for the seed Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Tapping the padlock without a password asks for one every time — a lock ↵Adam Soltys2026-08-151-3/+5
| | | | | | | that reopens itself is not a lock, and the copy now says so Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The logo on a locked device leads to the unlock prompt, never the new-wallet ↵Adam Soltys2026-08-151-0/+4
| | | | | | | flow Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Settings tiles sit level: the card-sibling margin stays out of the gridAdam Soltys2026-08-151-1/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The padlock is just the padlock: platform 🔓/🔒 emoji replace the ↵Adam Soltys2026-08-151-16/+2
| | | | | | | hand-drawn svg Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Locking says "Locked" and the locked screen wears the closed gold padlock; ↵Adam Soltys2026-08-151-10/+36
| | | | | | | Settings lands on a grid of icon tiles instead of a bare list Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The padlock gets character: gold body, steel shackle swung open, keyhole and ↵Adam Soltys2026-08-151-4/+11
| | | | | | | a glint — cartoony over flat Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* "Unlock for" stays on one lineAdam Soltys2026-08-151-1/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The password prompt asks how long: unlock for 5 minutes, 30, a day, or ↵Adam Soltys2026-08-151-3/+57
| | | | | | | forever — the deadline survives refreshes and relocks on time; the skip button says what it does; the header padlock hangs open in green while you're in Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The balance card's switch becomes Manage accounts, the header chip retires, ↵Adam Soltys2026-08-151-25/+8
| | | | | | | Move money is gone — and pasting an on-chain address in a Spending wallet just exits ark to it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Wallets go flat: every Spending and Savings is a top-level wallet in the ↵Adam Soltys2026-08-151-28/+138
| | | | | | | switcher, named for its purpose, renamable apart — and a new wallet can carry its own seed or live at the next BIP84 account of one you already back up Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The header speaks in icons: gear for settings, padlock to lock, and the ↵Adam Soltys2026-08-151-20/+33
| | | | | | | avatar goes straight to your profile — the popup menu retires Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Threads, search, and zap setup become real places: hardware Back walks out ↵Adam Soltys2026-08-151-2/+9
| | | | | | | of a post to the profile it came from, and a refresh mid-thread reopens the thread Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* A refresh stays where you were: the navigation snapshot in history.state ↵Adam Soltys2026-08-151-0/+15
| | | | | | | survives reload and is re-applied on boot — profiles, tabs, settings pages all hold their ground 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-1/+31
| | | | | | | 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
* The DOM is patched, not replaced: renders morph the live tree in place so ↵Adam Soltys2026-08-151-8/+88
| | | | | | | hover, focus, selection and scroll simply persist — with a smoke test that walks the app and proves node identity survives Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Background repaints breathe at 200ms instead of strobing at frame rate — a ↵Adam Soltys2026-08-151-7/+12
| | | | | | | resting cursor keeps its hover through a boot burst 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-0/+2
| | | | | | | 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/+31
| | | | | | | 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
* Spending waits to be asked for: a wallet is born on-chain only, the toggle ↵Adam Soltys2026-08-131-100/+49
| | | | | | and Move money appear once it's set up (or money's already there), and the tour is gone Co-Authored-By: Claude Fable 5 <[email protected]>
* A passphrase is typed twice, while the field to fix it is still on screen; ↵Adam Soltys2026-08-131-28/+56
| | | | | | the tour stops flickering under a busy first scan and finds the balance card it lost Co-Authored-By: Claude Fable 5 <[email protected]>
* The passphrase explains itself: a tap on "What's this?" says it's an ↵Adam Soltys2026-08-131-1/+9
| | | | | | optional 13th word, not a login or encryption Co-Authored-By: Claude Fable 5 <[email protected]>
* The door asks less: Get started shows your seed, and the wallet greets you ↵Adam Soltys2026-08-131-62/+105
| | | | | | in Savings — naming yourself waits until after the tour, as an offer to set up Spending Co-Authored-By: Claude Fable 5 <[email protected]>
* Switching accounts hangs up first: feature runtimes stop on lock and ↵Adam Soltys2026-08-081-0/+9
| | | | | | | activate, so no one inherits another wallet's chats or steals its inbox Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DbA53PJA8fgSvMcEzfuw22
* Choose your look shows the look: one big avatar previews the pick — punks ↵Adam Soltys2026-08-081-1/+8
| | | | | | | and uploads just change it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DbA53PJA8fgSvMcEzfuw22
* The wizard waits out a signer login; a picked recipient shows its work, and ↵Adam Soltys2026-08-081-5/+10
| | | | | | search answers from memory before the network Co-Authored-By: Claude Fable 5 <[email protected]>
* Profiles wear their latest notes, each one zappable; a zap with no ark ↵Adam Soltys2026-08-081-0/+2
| | | | | | address to land on becomes a gift only their key can open Co-Authored-By: Claude Fable 5 <[email protected]>
* Spending trusts its own ledger: gifts read persisted ark state, and Savings ↵Adam Soltys2026-08-051-2/+4
| | | | | | | keeps its pending line to itself Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01M5kFodm9azZJVTQxnkDdKe
* The Nostr card owns its built-in account; the exported key opens this wallet ↵Adam Soltys2026-08-041-0/+1
| | | | | | | anywhere Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01M5kFodm9azZJVTQxnkDdKe
* A wallet too small to renew warns before its coins expire; dust never diesAdam Soltys2026-08-041-0/+1
| | | | | | | | | | | | | | | | | | The warning: when the Spending balance minus round fee is under the 330-sat round minimum AND a vtxo enters the renewal window, auto-refresh can't save the coins — a wallet-screen notice (and a daily local notification, when permitted) says to receive any amount or spend before the deadline. New walletNotices feature hook renders under the balance card. The amnesty: sub-dust vtxos have no unilateral exit to protect, and regtest proves captaind keeps cosigning their spends past expiryHeight — even after the watchman claims the backing on-chain (tools/ark/expired-dust-test.js). Only hal's own receive validation stood in the way; it now exempts sub-330 vtxos from the expiry check. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015QwAtBSpKvECqp1rHLHjJk
* More options also points at Savings for a plain on-chain addressAdam Soltys2026-08-041-0/+1
| | | | | | | | | Not a pane of its own: a regular Bitcoin address means receiving to Savings, so the entry switches the account selector over and lets the savings receive view show its fresh address. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015QwAtBSpKvECqp1rHLHjJk
* The wizard offers a profile, it doesn't overwrite oneAdam Soltys2026-08-041-1/+4
| | | | | | | | | Finishing the avatar step published name = the payment-address name and the default punk under the user's real nostr identity — renaming (and re-facing) profiles that already existed. Wizard-suggested fields are fill-only now: they land only where the profile has nothing. Co-Authored-By: Claude Fable 5 <[email protected]>
* No logo in the wizard; every step has a way back insteadAdam Soltys2026-08-041-5/+8
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* The logo rides along on every wizard stepAdam Soltys2026-08-041-1/+5
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* The wizard can no longer trap anyoneAdam Soltys2026-08-041-2/+10
| | | | | | | | | Publishing the profile on the avatar step is best-effort now — a signer that can't sign (a sleeping phone bunker) skips it with a toast instead of erroring the Continue button forever. And once a wallet exists, the logo leads home even out of a resumed wizard. Co-Authored-By: Claude Fable 5 <[email protected]>
* The logo leads home from the name page tooAdam Soltys2026-08-041-0/+1
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* Copy joins the pencil inside the address boxAdam Soltys2026-08-041-1/+1
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* Choosing a name gets a page of its ownAdam Soltys2026-08-041-2/+2
| | | | | | | The pencil opens a dedicated screen — no balances, no tabs — wired into the history stack like the other sub-pages. Co-Authored-By: Claude Fable 5 <[email protected]>
* A restored login ends the wizard instead of stalling in itAdam Soltys2026-08-041-0/+8
| | | | | | | | | | Signing in mid-wizard with a key whose wallet was restored left you on the sign-in step: the back-button hold matched the restored account and blocked the auto-advance. A login now clears the hold explicitly — and a restored wallet skips the rest of onboarding entirely; it was already onboarded wherever it came from. Co-Authored-By: Claude Fable 5 <[email protected]>
* Back and Skip become a button row; the coinos link says what it doesAdam Soltys2026-08-041-2/+3
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* A way back from the username stepAdam Soltys2026-08-041-3/+9
| | | | | | | | | Back from username (and sign-in) holds the auto-advance for the wallet you backed away from, so welcome doesn't bounce you straight forward; Get started then continues with the already-minted wallet instead of minting another. Co-Authored-By: Claude Fable 5 <[email protected]>
* Park the send field above the phone keyboard; wizard whenever walletlessAdam Soltys2026-08-041-6/+20
| | | | | | | | | | | | The recipient candidate list was hiding under the on-screen keyboard: scroll the field to the top on focus and when fresh candidates land, give the list scroll room to get there, and let the keyboard resize the viewport (interactive-widget) so the scroll has somewhere to go. The wizard now shows whenever the device has no wallet — the one-time onboarded flag is gone; deleting every wallet brings the wizard back. Co-Authored-By: Claude Fable 5 <[email protected]>