aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-06-21 23:16:59 -0700
committerAdam Soltys <[email protected]>2026-06-21 23:16:59 -0700
commitd90b930b7c96947a75f39b5dc9d3094aa7f128a8 (patch)
tree63cb1bab2e82178993e46c7805e5503238556444
parent47293eb1dd2016358af0af18ff68d417630fca3d (diff)
downloadcoinosv3-d90b930b7c96947a75f39b5dc9d3094aa7f128a8.tar.gz
coinosv3-d90b930b7c96947a75f39b5dc9d3094aa7f128a8.zip
Make How it works copy more human; tidy passphrase field
- Rewrite the How it works page in a plainer, less generated voice; drop the intro lead, the receive/send paragraph, and trim the rest. - Fix passphrase wording: "13th word" (12-word phrase), not 25th. - genIntro: "It's" instead of "It is". - Unlock screen: label the field "Passphrase" (was "Optional passphrase") and drop the "leave blank if unused" placeholder. - Remove now-unused hiwLead / optionalPassphrase / leaveBlank keys and the .lead style. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
-rw-r--r--src/app.js5
-rw-r--r--src/i18n.js23
-rw-r--r--src/style.css3
3 files changed, 12 insertions, 19 deletions
diff --git a/src/app.js b/src/app.js
index 9802905..e811093 100644
--- a/src/app.js
+++ b/src/app.js
@@ -229,11 +229,9 @@ function howItWorksScreen() {
h(
'div',
{ class: 'card col', style: 'gap:14px' },
- h('p', { class: 'lead', style: 'margin:0' }, t('hiwLead')),
h('h3', {}, t('hiwBasicsTitle')),
para('hiwBasics1'),
para('hiwBasics2'),
- para('hiwBasics3'),
para('hiwBasics4'),
h(
'details',
@@ -416,14 +414,13 @@ function optionsPanel() {
return h(
'label',
{ class: 'field' },
- h('span', { class: 'lab' }, t('optionalPassphrase')),
+ h('span', { class: 'lab' }, t('passphrase')),
h(
'div',
{ class: 'input-group' },
h('input', {
type: ui.showPass ? 'text' : 'password',
class: 'mono-input',
- placeholder: t('leaveBlank'),
autocomplete: 'off',
value: ui.passphrase,
onInput: (e) => (ui.passphrase = e.target.value),
diff --git a/src/i18n.js b/src/i18n.js
index 1eb8425..179cc1e 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -38,7 +38,7 @@ const STR = {
logout: 'Logout',
createNew: 'Create new',
importExisting: 'Import existing',
- genIntro: 'Generate a new 12-word seed phrase. Write it down. It is the only way to recover this wallet.',
+ genIntro: 'Generate a new 12-word seed phrase. Write it down. It’s the only way to recover this wallet.',
generateSeed: 'Generate seed phrase',
writeDownWarn: '⚠ Write these 12 words down on paper, in order. Anyone with them can spend your coins.',
copyPhrase: 'Copy phrase',
@@ -54,25 +54,22 @@ const STR = {
passphraseMismatch: 'That passphrase doesn’t match the one you entered.',
seedPhrase: 'Seed phrase',
seedPlaceholder: 'enter your seed words separated by spaces',
- optionalPassphrase: 'Optional passphrase',
- leaveBlank: 'leave blank if unused',
+ passphrase: 'Passphrase',
show: 'Show',
hide: 'Hide',
invalidSeed: 'Invalid seed phrase — check the spelling and word order.',
keysNote: 'Keys never leave your browser. Works fully offline. Save this page and open it from your filesystem.',
howItWorks: 'How it works',
- hiwLead: 'A self-custody Bitcoin wallet that runs entirely on your device. No accounts, no servers, no company in the middle.',
hiwBasicsTitle: 'The basics',
- hiwBasics1: 'Your wallet is really just 12 words. When you create a wallet, this page picks a random 12-word phrase. Those words are the wallet — anyone who has them controls the money, so write them down and keep them somewhere safe and private.',
- hiwBasics2: 'Nothing is stored on a server. There are no sign-ups and no company holding your coins. The words never leave your device, and this page keeps working even with no internet connection.',
- hiwBasics3: 'To get paid, you share an address — a string of letters and numbers, or a QR code. To send, you enter the other person’s address and approve the payment.',
- hiwBasics4: 'Because you hold the words yourself, you are in full control — and fully responsible. If you lose all 12 words and have no backup, no one can recover the wallet for you. Back them up before you add real money.',
+ hiwBasics1: 'When you make a wallet, the page generates twelve random words. Those words are the key to your wallet. Anyone who has them can spend the coins, so write them down on paper and keep them somewhere only you can get to.',
+ hiwBasics2: 'Everything happens on your device. There’s no server keeping your balance and nobody holding your coins for you. The words stay in your browser, and the page still works when you’re offline.',
+ hiwBasics4: 'If you lose the twelve words and don’t have a backup, the coins are gone for good. There’s no reset link and no one to call, so back them up before you put money in.',
hiwTechTitle: 'For the technically curious',
- hiwTech1: 'No backend. The whole app is a single static HTML page — there is no server, database, or API that ever sees your keys. Balances and history are read from a public block explorer (mempool.space); only your addresses, never your keys, leave the device.',
- hiwTech2: 'Open standards. The recovery phrase is a 12-word BIP39 mnemonic, and keys follow the BIP84 native SegWit (P2WPKH) account at m/84\'/0\'/0\'. You can restore the exact same wallet in any other standards-compliant wallet.',
- hiwTech3: 'Audited cryptography. Key generation, derivation, signing, and hashing all run locally using the open-source @scure and @noble libraries (bip32, bip39, secp256k1). No hand-rolled crypto.',
- hiwTech4: 'Offline & air-gapped signing. Save this page and run it straight from your filesystem with no network. For cold storage, keep the keys on a device that never goes online: export a snapshot on an online device, import and sign it offline, then broadcast the signed transaction from any online device.',
- hiwTech5: 'Optional passphrase. You can add a BIP39 passphrase (a “25th word”) for an extra layer. It derives a completely separate wallet and must be entered every time — and there is no way to recover it if forgotten.',
+ hiwTech1: 'There’s no backend. The whole thing is one static HTML file, so nothing on a server ever touches your keys. It reads balances and history from a public block explorer (mempool.space), and the only thing that leaves your device is your addresses, never your keys.',
+ hiwTech2: 'It sticks to the usual Bitcoin standards: a 12-word BIP39 recovery phrase, with BIP84 native SegWit (P2WPKH) keys derived at m/84\'/0\'/0\'. If this wallet ever vanishes, drop the same phrase into Electrum, Sparrow, or any other standard wallet and your coins will be right there.',
+ hiwTech3: 'None of the cryptography is homemade. Key generation, signing, and hashing all happen locally through the well-worn @scure and @noble libraries (bip32, bip39, secp256k1).',
+ hiwTech4: 'You can save this page and open it straight off your hard drive with no connection at all. For real cold storage, keep your keys on a machine that never goes online: export a snapshot from a connected device, carry it over to sign offline, then bring the signed transaction back to something online to broadcast it.',
+ hiwTech5: 'Want another layer? Add a passphrase (sometimes called a 13th word) on top of your twelve. It creates a completely separate wallet and you’ll type it every time. Forget it and there’s no getting it back, so guard it as carefully as the phrase itself.',
balance: 'Balance',
pending: 'Pending',
tabReceive: 'Receive',
diff --git a/src/style.css b/src/style.css
index d913d76..8a32bf4 100644
--- a/src/style.css
+++ b/src/style.css
@@ -232,8 +232,7 @@ hr.divider { margin: 16px 0; }
.linklike:hover { text-decoration: underline; background: none; }
/* ---- how it works ---- */
-.lead { font-size: 16px; line-height: 1.5; color: var(--ink); }
-.hiw-tech { border-top: 1px solid var(--line); padding-top: 14px; }
+.hiw-tech {border-top: 1px solid var(--line); padding-top: 14px; }
.hiw-tech > summary { font-weight: 650; cursor: pointer; list-style: none; color: var(--accent-ink); display: flex; align-items: center; gap: 7px; }
.hiw-tech > summary::-webkit-details-marker { display: none; }
.hiw-tech > summary::before { content: '▸'; font-size: 12px; transition: transform .15s; }