aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.js
Commit message (Collapse)AuthorAgeFilesLines
* A missing signer opens a door instead of a toast: the reconnect screen ↵Adam Soltys2026-08-181-0/+1
| | | | | | | 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
* A crashed render confesses instead of playing dead: the error goes on screen ↵Adam Soltys2026-08-181-0/+26
| | | | | | | with a Reload button, ending the silent every-tap-is-a-no-op brick Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The footer signs its build: one glance settles whether the PWA is running ↵Adam Soltys2026-08-181-1/+4
| | | | | | | today's code or last Tuesday's Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The top-up prompt counts money already on its way: a board awaiting ↵Adam Soltys2026-08-181-2/+4
| | | | | | | confirmation quiets both the card button and the wizard step Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Money finds its way to Spending: the setup wizard ends with a top-up step ↵Adam Soltys2026-08-181-3/+25
| | | | | | | when Savings can fund one, and a low Spending face wears a one-tap Top up from Savings button 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-1/+8
| | | | | | | 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
* Old money stops surprising: a payment confirmed more than fifteen minutes ↵Adam Soltys2026-08-171-1/+6
| | | | | | | ago is news, not an event — the celebration is reserved for arrivals you could actually be waiting on Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* A picked punk publishes its full address: the avatar step stops writing ↵Adam Soltys2026-08-171-2/+5
| | | | | | | relative paths into kind 0, where they broke real faces on every other client Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The spending tap keeps its promise and then makes an offer: the account ↵Adam Soltys2026-08-171-3/+8
| | | | | | | exists before the username and avatar prompts, so declining them costs nothing Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* One tap grows the Spending side: same seed, named Spending, no wizard — ↵Adam Soltys2026-08-171-9/+14
| | | | | | | and deliberate latches carry timestamps so the phantom-healer only eats the legacy booleans Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The savings-only card offers the door: Set up a spending account sits right ↵Adam Soltys2026-08-171-2/+5
| | | | | | | on the balance instead of hiding behind a face you can't swipe to Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Spending admits it exists: a wallet created AS Spending needs no further ↵Adam Soltys2026-08-171-4/+31
| | | | | | | proof, a name claimed inside the wizard latches on any network, and off-mainnet Receive shows the ark address instead of quietly handing out an on-chain one Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The phantom Spending flag heals itself: off mainnet, a spending side with no ↵Adam Soltys2026-08-171-1/+12
| | | | | | | balance and no history admits it was never set up Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* A mainnet name stops vouching for mutinynet spending: the claimed-address ↵Adam Soltys2026-08-171-2/+7
| | | | | | | evidence only counts on the network it was claimed on Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* One Back per screen: the outer step's back yields while the entropy page ↵Adam Soltys2026-08-171-2/+3
| | | | | | | holds the floor Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Entropy gets a room of its own: a button beside Copy and Regenerate opens a ↵Adam Soltys2026-08-171-41/+64
| | | | | | | page of just text and Submit — the derivation happens once, on the way out, not under your fingers Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The entropy fold drops the arrow act: a plain Entropy button opens it on ↵Adam Soltys2026-08-171-2/+2
| | | | | | | both panes Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The import pane learns the entropy trick: the same fold, the same text, the ↵Adam Soltys2026-08-171-20/+40
| | | | | | | same wallet — typed entropy fills the phrase field with its derived words and clears only what it filled Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The entropy door moves behind the phrase: newcomers see one Generate button, ↵Adam Soltys2026-08-171-19/+26
| | | | | | | tinkerers unfold the toggle after — typing re-derives the words live, clearing restores the random draft Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Own entropy means owned outcome: the typed text alone derives the seed, so ↵Adam Soltys2026-08-171-4/+7
| | | | | | | re-typing it is an import on any device — the warn-box says what that guarantee costs, and Regenerate bows out of a deterministic job Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The seed takes dice: an optional entropy field folds open on the generate ↵Adam Soltys2026-08-171-2/+18
| | | | | | | step, hashed with the device's own randomness so it can only strengthen the phrase — and the forget option now says all data, which is what it takes 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-0/+1
| | | | | | | 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-0/+12
| | | | | | | 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
* The wallet row's delete earns a trash can instead of an ambiguous ✕, and ↵Adam Soltys2026-08-171-1/+1
| | | | | | | Clear all says Delete all — the word for what it does Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* A blank-password vault stops masquerading as a locked one: new wallets ↵Adam Soltys2026-08-171-5/+20
| | | | | | | auto-save through it again, setting a real password re-encrypts every saved wallet instead of dropping the absent ones, and the save-first lock prompt finally names the password it wants Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The lock test learns the doors moved: logout is the front door and asks for ↵Adam Soltys2026-08-161-6/+6
| | | | | | | a password once ever (the guard is finally wired to its comment), the padlock keeps asking because it must, and the suite walks the real UI again Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* The padlock stops charging for hesitation: the password ask renders over the ↵Adam Soltys2026-08-161-13/+46
| | | | | | | open wallet and Not now means exactly that, the logo opens a passwordless vault instead of guarding it, and a seed is born as Savings alone — Spending appears when you actually set it up Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
* Staging wears its name on the logo and deals in play money: ↵Adam Soltys2026-08-161-1/+3
| | | | | | | HAL_TARGET=staging stamps the brand, renames the PWA, and starts fresh wallets on Mutinynet — one master, no diverging branch 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/+3
| | | | | | | 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
* The lock prompt says Lock: locking an unsaved wallet asks for the password ↵Adam Soltys2026-08-151-3/+4
| | | | | | | plainly, without a word about devices or a button that points the wrong way Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The upkeep paragraph retires quietlyAdam Soltys2026-08-151-2/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Setting a password locks you in place, not out: home stays on screen, ↵Adam Soltys2026-08-151-1/+1
| | | | | | | watch-only, padlock shut Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The logo learns the difference between fleeing and returning: mid-creation ↵Adam Soltys2026-08-151-0/+16
| | | | | | | it backs out to the start page, and only a truly idle visitor gets pointed at the vault Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The reload remembers where you stood: the pre-refresh page is captured at ↵Adam Soltys2026-08-151-6/+9
| | | | | | | script load, before any boot render can pave over it Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The padlock refuses to strand a seed: a wallet the vault never met gets ↵Adam Soltys2026-08-151-3/+25
| | | | | | | saved (password asked) before locking, and unlocking returns you to the wallet you left 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/+3
| | | | | | | 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
* 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