Remove em dashes from FAQ and guide copy
Replaces every em dash inside user-facing FAQ and Donor / Activist guide content with a period, comma, colon, or parenthesis depending on what fits the sentence. Affects: - src/lib/helpContent.ts: all FAQ answers (active and hidden legacy items) and both guide block templates (TLDR ledes, comparison footnotes, callout bodies, step bodies, OptionGrid item copy). - src/components/guide/ModeComparisonTable.tsx: the donor and activist row content strings. JSDoc comments inside source files are left alone (developer-facing, never rendered).
This commit is contained in:
@@ -29,8 +29,8 @@ const DONOR_ROWS: Row[] = [
|
||||
{
|
||||
label: 'Activist privacy',
|
||||
Icon: ShieldCheck,
|
||||
fast: 'None \u2014 every donation is publicly tied to the campaign.',
|
||||
private: 'Strong \u2014 receiving side is unlinkable on-chain.',
|
||||
fast: 'None. Every donation is publicly tied to the campaign.',
|
||||
private: 'Strong. Receiving side is unlinkable on-chain.',
|
||||
},
|
||||
{
|
||||
label: 'Your job',
|
||||
@@ -45,7 +45,7 @@ const ACTIVIST_ROWS: Row[] = [
|
||||
label: 'How it works',
|
||||
Icon: Sparkles,
|
||||
fast: 'One static Bitcoin address per campaign.',
|
||||
private: 'Silent payments \u2014 each donor sees a fresh `bc1\u2026` address.',
|
||||
private: 'Silent payments. Each donor sees a fresh `bc1\u2026` address.',
|
||||
},
|
||||
{
|
||||
label: 'Speed & reliability',
|
||||
@@ -56,8 +56,8 @@ const ACTIVIST_ROWS: Row[] = [
|
||||
{
|
||||
label: 'Donor list visible?',
|
||||
Icon: Users,
|
||||
fast: 'Yes \u2014 amounts and sending addresses are public forever.',
|
||||
private: 'No \u2014 no single address shows the campaign\u2019s history.',
|
||||
fast: 'Yes. Amounts and sending addresses are public forever.',
|
||||
private: 'No. No single address shows the campaign\u2019s history.',
|
||||
},
|
||||
{
|
||||
label: 'Best for',
|
||||
|
||||
+23
-23
@@ -57,7 +57,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'What is {appName}?',
|
||||
answer: [
|
||||
'{appName} is a platform for sending on-chain Bitcoin donations directly to activists. There\'s no middleman, no payment processor, and no account that can be frozen.',
|
||||
'{appName} is built on Nostr, so your identity isn\'t locked to this site \u2014 you own it.',
|
||||
'{appName} is built on Nostr, so your identity isn\'t locked to this site, you own it.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -65,14 +65,14 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'What is Nostr?',
|
||||
answer: [
|
||||
'Nostr is an open network where **you** own your account, not a company. Your identity is a cryptographic key you control, not a username on someone else\'s server.',
|
||||
'On {appName}, that same key is also what your donation address is derived from \u2014 which is why you can receive Bitcoin without signing up with anyone.',
|
||||
'On {appName}, that same key is also what your donation address is derived from, which is why you can receive Bitcoin without signing up with anyone.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'lose-secret-key',
|
||||
question: 'What happens if I lose my secret key?',
|
||||
answer: [
|
||||
'**There is no "forgot password" button.** Nobody can reset it for you. If you lose it, your account \u2014 and any Bitcoin sitting at your donation address \u2014 is gone forever.',
|
||||
'**There is no "forgot password" button.** Nobody can reset it for you. If you lose it, your account, and any Bitcoin sitting at your donation address, is gone forever.',
|
||||
'**Save your secret key somewhere safe right now.** For tips, read [Managing Your Nostr Keys](https://soapbox.pub/blog/managing-nostr-keys).',
|
||||
],
|
||||
},
|
||||
@@ -88,7 +88,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'cost-to-use',
|
||||
question: 'Does {appName} cost anything?',
|
||||
answer: [
|
||||
'**No.** {appName} takes no platform fee. When you donate, you pay only the Bitcoin network fee that goes to miners \u2014 not to us.',
|
||||
'**No.** {appName} takes no platform fee. When you donate, you pay only the Bitcoin network fee that goes to miners, not to us.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -133,8 +133,8 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'Are donations on {appName} public?',
|
||||
answer: [
|
||||
'It depends on the campaign\'s mode.',
|
||||
'**Fast Mode:** fully public. Every donation \u2014 amount, time, sending address \u2014 is recorded on the Bitcoin blockchain and on Nostr, and anyone can read the full history forever.',
|
||||
'**Private Mode:** the activist\'s receiving side is hidden by silent payments \u2014 there\'s no single address an observer can watch to see who donated. The donor\'s sending side, however, still looks the same on-chain as any other Bitcoin transaction.',
|
||||
'**Fast Mode:** fully public. Every donation, amount, time, and sending address, is recorded on the Bitcoin blockchain and on Nostr, and anyone can read the full history forever.',
|
||||
'**Private Mode:** the activist\'s receiving side is hidden by silent payments. There\'s no single address an observer can watch to see who donated. The donor\'s sending side, however, still looks the same on-chain as any other Bitcoin transaction.',
|
||||
'Read the **Donor Guide** and **Activist Guide** for what this means in practice and how to protect your privacy if you need to.',
|
||||
],
|
||||
},
|
||||
@@ -142,9 +142,9 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'fast-vs-private-mode',
|
||||
question: 'What\'s the difference between Fast Mode and Private Mode?',
|
||||
answer: [
|
||||
'**Fast Mode** is a single static Bitcoin address per campaign. It\'s the fastest, most reliable option \u2014 every Bitcoin wallet supports it, confirmations are normal, and there are no extra moving parts. The tradeoff is privacy: every donation is publicly tied to that one address forever.',
|
||||
'**Fast Mode** is a single static Bitcoin address per campaign. It\'s the fastest, most reliable option. Every Bitcoin wallet supports it, confirmations are normal, and there are no extra moving parts. The tradeoff is privacy: every donation is publicly tied to that one address forever.',
|
||||
'**Private Mode** uses silent payments. Each donor sees a fresh, one-shot Bitcoin address that bridges into the activist\'s silent-payment wallet. The receiving side is unlinkable on-chain. The tradeoff is reliability: confirmations are 2\u20133\u00d7 slower, the bridge can fail or be slow, and there\'s no hard guarantee every donation arrives.',
|
||||
'Donors don\'t need to know or care which mode a campaign uses \u2014 they just pay the Bitcoin address they\'re shown, from any wallet.',
|
||||
'Donors don\'t need to know or care which mode a campaign uses. They just pay the Bitcoin address they\'re shown, from any wallet.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -152,14 +152,14 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'What are silent payments?',
|
||||
answer: [
|
||||
'Silent payments are a Bitcoin standard that lets a recipient publish **one re-usable identifier** while every actual donation lands on a **fresh, unlinkable address** on the blockchain. An outside observer can\'t scan the chain for "all donations to this campaign" the way they can with a regular Bitcoin address.',
|
||||
'Normally, the donor\'s wallet has to support silent payments for this to work \u2014 and most consumer apps (Cash App, Coinbase, Strike, Venmo, PayPal) don\'t. {appName} solves that with a bridge: the donor sees a normal `bc1\u2026` address, pays it from any Bitcoin wallet, and the funds sweep through to the activist\'s silent-payment wallet automatically.',
|
||||
'Normally, the donor\'s wallet has to support silent payments for this to work, and most consumer apps (Cash App, Coinbase, Strike, Venmo, PayPal) don\'t. {appName} solves that with a bridge: the donor sees a normal `bc1\u2026` address, pays it from any Bitcoin wallet, and the funds sweep through to the activist\'s silent-payment wallet automatically.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'silent-payments-supported',
|
||||
question: 'Does {appName} support silent payments?',
|
||||
answer: [
|
||||
'Yes \u2014 campaigns set to **Private Mode** use silent payments for receiving. Donors don\'t need a silent-payments-capable wallet because {appName}\'s bridge converts a normal Bitcoin address into a sweep to the activist\'s silent-payment wallet behind the scenes.',
|
||||
'Yes. Campaigns set to **Private Mode** use silent payments for receiving. Donors don\'t need a silent-payments-capable wallet because {appName}\'s bridge converts a normal Bitcoin address into a sweep to the activist\'s silent-payment wallet behind the scenes.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -174,7 +174,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'choose-mode-as-activist',
|
||||
question: 'How do I choose between Fast Mode and Private Mode?',
|
||||
answer: [
|
||||
'You pick when you create a campaign \u2014 the choice is per-campaign, not per-account, and there\'s no default. The **Activist Guide** walks through who each mode is for and the tradeoffs.',
|
||||
'You pick when you create a campaign. The choice is per-campaign, not per-account, and there\'s no default. The **Activist Guide** walks through who each mode is for and the tradeoffs.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -182,7 +182,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'What does "censorship-resistant" mean here?',
|
||||
answer: [
|
||||
'No company sits between a donor and an activist. {appName} doesn\'t hold the funds and can\'t freeze a campaign\'s address.',
|
||||
'In **Fast Mode**, the campaign\'s address lives entirely on the Bitcoin network \u2014 {appName} going offline wouldn\'t stop donations to it. **Private Mode** depends on {appName}\'s bridge service to convert addresses, so prolonged bridge downtime can delay donations until the bridge is back. In both cases, no third party can reverse, seize, or freeze funds once they\'re on-chain.',
|
||||
'In **Fast Mode**, the campaign\'s address lives entirely on the Bitcoin network, so {appName} going offline wouldn\'t stop donations to it. **Private Mode** depends on {appName}\'s bridge service to convert addresses, so prolonged bridge downtime can delay donations until the bridge is back. In both cases, no third party can reverse, seize, or freeze funds once they\'re on-chain.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -198,9 +198,9 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'why-not-lightning',
|
||||
question: 'Why doesn\'t {appName} use Lightning?',
|
||||
answer: [
|
||||
'Lightning requires a Lightning wallet. The easiest ones (Wallet of Satoshi, Strike, Breez) are **custodial** \u2014 a company holds the funds and can be shut down, geo-blocked, or pressured into freezing accounts. Non-custodial Lightning is technically demanding and unreliable for newcomers.',
|
||||
'Lightning requires a Lightning wallet. The easiest ones (Wallet of Satoshi, Strike, Breez) are **custodial**: a company holds the funds and can be shut down, geo-blocked, or pressured into freezing accounts. Non-custodial Lightning is technically demanding and unreliable for newcomers.',
|
||||
'We want {appName} to work for every person who currently holds Bitcoin, or is willing to get it. Lightning provides too much of a barrier for most.',
|
||||
'Cashing out matters too. Activists need to actually convert donations into money they can spend. On-chain Bitcoin can be reliably sold or swapped almost anywhere in the world; Lightning liquidity, in contrast, is patchy \u2014 routes fail, channels run dry, custodial Lightning wallets can freeze your funds or refuse to let you withdraw. We won\'t build a donation pipeline that activists can\'t reliably get out of.',
|
||||
'Cashing out matters too. Activists need to actually convert donations into money they can spend. On-chain Bitcoin can be reliably sold or swapped almost anywhere in the world; Lightning liquidity, in contrast, is patchy. Routes fail, channels run dry, and custodial Lightning wallets can freeze your funds or refuse to let you withdraw. We won\'t build a donation pipeline that activists can\'t reliably get out of.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -229,7 +229,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'How does sending Bitcoin over Lightning work?',
|
||||
answer: [
|
||||
'If a recipient has a Lightning address on their profile, you can send to that. Lightning settles in seconds and fees are tiny.',
|
||||
'Lightning sends don\'t use {appName}\'s donation address \u2014 they go straight to whatever Lightning wallet the recipient set up themselves. {appName}\'s own donation flow is on-chain only.',
|
||||
'Lightning sends don\'t use {appName}\'s donation address. They go straight to whatever Lightning wallet the recipient set up themselves. {appName}\'s own donation flow is on-chain only.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -250,7 +250,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'what-are-relays',
|
||||
question: 'What are relays?',
|
||||
answer: [
|
||||
'Relays are the servers that store and deliver Nostr events \u2014 posts, donation receipts, profile info. The defaults work out of the box; you can add or remove relays in Settings > Network.',
|
||||
'Relays are the servers that store and deliver Nostr events: posts, donation receipts, profile info. The defaults work out of the box; you can add or remove relays in Settings > Network.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -278,7 +278,7 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'profile-fields',
|
||||
question: 'What are profile fields?',
|
||||
answer: [
|
||||
'Profile fields let you add extra info to your profile \u2014 links, wallet addresses, music, photos, videos.',
|
||||
'Profile fields let you add extra info to your profile: links, wallet addresses, music, photos, videos.',
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -452,7 +452,7 @@ const DONOR_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
},
|
||||
{
|
||||
title: 'Pay it from any wallet',
|
||||
body: 'Cash App, Coinbase, Strike, a hardware wallet \u2014 anything. Pay the amount plus the network fee.',
|
||||
body: 'Cash App, Coinbase, Strike, a hardware wallet, anything. Pay the amount plus the network fee.',
|
||||
},
|
||||
{
|
||||
title: 'It arrives directly',
|
||||
@@ -463,7 +463,7 @@ const DONOR_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
{
|
||||
kind: 'modeComparison',
|
||||
audience: 'donor',
|
||||
footnote: 'A fresh address on a Private Mode campaign isn\u2019t a phishing attempt \u2014 it\u2019s how the activist stays private.',
|
||||
footnote: 'A fresh address on a Private Mode campaign isn\u2019t a phishing attempt. It\u2019s how the activist stays private.',
|
||||
},
|
||||
{
|
||||
kind: 'callout',
|
||||
@@ -507,7 +507,7 @@ const DONOR_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
const ACTIVIST_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
{
|
||||
kind: 'tldr',
|
||||
lede: 'Pick Fast Mode or Private Mode when you create your campaign. Both are non-custodial \u2014 {appName} never holds your funds.',
|
||||
lede: 'Pick Fast Mode or Private Mode when you create your campaign. Both are non-custodial. {appName} never holds your funds.',
|
||||
nextActions: [
|
||||
'Compare the two modes',
|
||||
'Plan how you\u2019ll cash out',
|
||||
@@ -523,7 +523,7 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
kind: 'callout',
|
||||
variant: 'warning',
|
||||
title: 'Facing state-level threats?',
|
||||
body: 'Choose Private Mode. Fast Mode publishes every donation \u2014 amount, time, donor address \u2014 on the public Bitcoin blockchain forever. Then read the cash-out section below before spending anything, because spending coins on-chain creates its own trail.',
|
||||
body: 'Choose Private Mode. Fast Mode publishes every donation, amount, time, and donor address, on the public Bitcoin blockchain forever. Then read the cash-out section below before spending anything, because spending coins on-chain creates its own trail.',
|
||||
},
|
||||
{
|
||||
kind: 'callout',
|
||||
@@ -541,7 +541,7 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
},
|
||||
{
|
||||
title: 'Don\u2019t sit on funds at the campaign address',
|
||||
body: 'Treat it like a mailbox, not a savings account \u2014 in both Fast Mode and Private Mode.',
|
||||
body: 'Treat it like a mailbox, not a savings account, in both Fast Mode and Private Mode.',
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -570,7 +570,7 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideBlock[] = [
|
||||
},
|
||||
{
|
||||
name: 'Spend it directly',
|
||||
purpose: 'Buy gift cards \u2014 Amazon, Uber, groceries, travel \u2014 straight from Bitcoin without converting to cash first.',
|
||||
purpose: 'Buy gift cards (Amazon, Uber, groceries, travel) straight from Bitcoin without converting to cash first.',
|
||||
chips: ['skip cash-out', 'instant'],
|
||||
href: 'https://www.bitrefill.com/us/en/',
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user