aboutsummaryrefslogtreecommitdiffstats
path: root/src/i18n.js
Commit message (Collapse)AuthorAgeFilesLines
...
* The profile grows a second, honest exit: Log out leaves the room, Log out & ↵Adam Soltys2026-08-171-0/+1
| | | | | | | 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-1/+1
| | | | | | | 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
* Hats: put your money where your head is — supporter hats perch above the ↵Adam Soltys2026-08-161-0/+23
| | | | | | | 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-0/+1
| | | | | | | plainly, with the unlock one tap away Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The lock prompt says Lock: locking an unsaved wallet asks for the password ↵Adam Soltys2026-08-151-1/+2
| | | | | | | 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-1/+0
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The password ask drops the lecture: set one, and this device needs it to spendAdam Soltys2026-08-151-1/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* Coinos earns its capital letter when it opens a sentenceAdam Soltys2026-08-151-1/+1
| | | | | Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The basics stop pretending it's 2009: servers exist but can't touch your ↵Adam Soltys2026-08-151-6/+6
| | | | | | | money, Savings restores anywhere, and the Move money button that no longer exists stops being explained 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-4/+3
| | | | | | | @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-0/+4
| | | | | | | 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 padlock refuses to strand a seed: a wallet the vault never met gets ↵Adam Soltys2026-08-151-0/+1
| | | | | | | 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
* Your own profile carries the exit: Log out signs the session off entirely, ↵Adam Soltys2026-08-151-0/+1
| | | | | | | 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 dead 8-character rule string goes — no minimum was ever enforcedAdam Soltys2026-08-151-1/+0
| | | | | 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-0/+2
| | | | | | | 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
* Tapping the padlock without a password asks for one every time — a lock ↵Adam Soltys2026-08-151-1/+1
| | | | | | | 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
* Locking says "Locked" and the locked screen wears the closed gold padlock; ↵Adam Soltys2026-08-151-0/+7
| | | | | | | 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
* "Stay unlocked … until I lock it" — the duration row reads as a sentenceAdam Soltys2026-08-151-2/+2
| | | | | 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-0/+6
| | | | | | | 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-0/+3
| | | | | | | 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-0/+8
| | | | | | | 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
* Threads speak back: a reply composer with proper NIP-10 markers, ↵Adam Soltys2026-08-151-0/+3
| | | | | | | 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-0/+12
| | | | | | | 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
* A mailbox backlog claimed at sign-in reads as the old payments they are, not ↵Adam Soltys2026-08-141-0/+2
| | | | | | | a wall of seconds-ago windfalls; a gift send knows itself in history — status shown, link recopyable, revoke at hand 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/+10
| | | | | | | 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
* Money leaving while you're not looking gets a notification: NWC pays from ↵Adam Soltys2026-08-141-0/+2
| | | | | | | the worker or a hidden tab announce themselves — amount, fee, and which app asked Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* No notifications, no connection: creating one asks to allow them first, and ↵Adam Soltys2026-08-131-0/+4
| | | | | | | a denial explains itself instead of leaving a dead connection spinning in the other app Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_014tE4U5nEjGTQy8PwYqamfv
* The rename page stops calling your name generated: it's just Change usernameAdam Soltys2026-08-131-2/+2
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* Spending waits to be asked for: a wallet is born on-chain only, the toggle ↵Adam Soltys2026-08-131-8/+1
| | | | | | 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]>
* The passphrase explains itself: a tap on "What's this?" says it's an ↵Adam Soltys2026-08-131-0/+2
| | | | | | 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-5/+5
| | | | | | in Savings — naming yourself waits until after the tour, as an offer to set up Spending Co-Authored-By: Claude Fable 5 <[email protected]>
* A waiting board says what it waits for: the Moving line counts ↵Adam Soltys2026-08-091-0/+1
| | | | | | | confirmations, a snag shows itself, and one stuck action no longer starves the queue behind 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-0/+1
| | | | | | 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/+20
| | | | | | 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-0/+1
| | | | | | | 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-1/+7
| | | | | | | 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/+2
| | | | | | | | | | | | | | | | | | 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/+2
| | | | | | | | | 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
* One More-options link replaces the BOLT 12 link on ReceiveAdam Soltys2026-08-041-2/+15
| | | | | | | | | Behind it: a one-time BOLT 11 invoice (minted by the ASP), the reusable BOLT 12 offer flow, the wallet's raw ark address, and the CLINK offer code — each on its own pane so only one scannable code shows at a time. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015QwAtBSpKvECqp1rHLHjJk
* The wizard can no longer trap anyoneAdam Soltys2026-08-041-0/+1
| | | | | | | | | 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]>
* Five conversations, then 'show all' — communities stay in reachAdam Soltys2026-08-041-0/+2
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* Reword the migrate linkAdam Soltys2026-08-041-1/+1
| | | | 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-1/+1
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* Drop the BOLT 12 explainer blurbAdam Soltys2026-08-041-1/+0
| | | | Co-Authored-By: Claude Fable 5 <[email protected]>
* A refresh mid-wizard resumes the step it was onAdam Soltys2026-08-041-1/+1
| | | | | | | | | | The wizard mints the wallet on its first step, so 'an account exists' stopped meaning 'wizard done' — reloading dropped you into the half-set-up wallet. Persist the current step until the wizard finishes. Also trims the balance coach-mark copy. Co-Authored-By: Claude Fable 5 <[email protected]>
* Paste lives in the field; the footer fits; claiming a name comes firstAdam Soltys2026-08-041-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | Paste, on the import and load-seed screens, was a bordered box floating beside a small label — heavier than the label, detached from the field it fills. It now sits inside the textarea, and only while that textarea is empty: the only time it's wanted, and the only time it can't cover what you typed. It's toggled on the node rather than through render(), since re-rendering a textarea per keystroke rebuilds it under the caret. Beside a one-line input (Send) the old placement was right and is untouched. The footer measured 100dvh, which on a phone can resolve to the tall viewport at first paint and leave the language picker just below the fold. svh is the one that fits with the address bar showing. Short screens also tighten their padding, which buys back the ~50px the create/import screen was overflowing at 375x553. And the wizard no longer asks every new user whether they have an old coinos.io account before letting them have a name. Claiming the name is the step; the people who do have an old account know it, and say so with a link. That screen is a statement now, not a question they just answered. The npub-shaped default address is no longer offered as a button — a plain skip goes past without showing anyone that. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* One question fewer on the way in, and an 'or' that means itAdam Soltys2026-08-041-6/+2
| | | | | | | | | | | | | | | | | | | | | The sign-in screen stacked 'Connect a signer app' directly above a bunker/nsec field, which reads as two steps rather than two ways in. A divider says which it is. The wizard's second step asked whether you have a nostr account, then sent you to a screen that asks the same thing. Step one now offers both paths directly — Get started, or sign in with Nostr — and the middle step is gone, along with its strings. The welcome blurb goes too: the screen is one decision, and prose above it is something to read before you can make it. The footer sinks to the bottom of the window rather than trailing the content up the page. #app is a full-height column now; the chat card sizes itself against the viewport, so the layout test covers it at three sizes. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* Offer a password the first time you lockAdam Soltys2026-08-041-0/+4
| | | | | | | | | | | | | | | | | | | | | Locking with no password locks nothing — the wallets sit on the device under an empty one and reopen with a tap. So the first deliberate lock now asks whether to set one, explaining plainly what happens if you don't. 'Not now' is a real answer, recorded, and never asked again: a wallet that nags is a wallet people stop reading. The offer rides the deliberate lock only. lock() is also where the idle timer, the last-wallet-removed path and boot-after-expiry land, and a password form appearing because you went to lunch is a different app than the one you left. Two subtleties worth naming: the offer is set after lock()'s ui reset block, which clears ui.pw and had been swallowing it; and taking the offer re-enters lock(), which now finds a password and lands on the unlock screen instead of the wallet list. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi