Update FAQs and guides for Fast Mode / Private Mode donations
Introduces per-campaign privacy-mode framing across all donor- and
activist-facing help content, ahead of the campaign-creation UI that
will actually expose the choice.
- FAQ (src/lib/helpContent.ts):
- Rewrite send-bitcoin-onchain, connect-wallet, and
donations-are-public-general to reflect per-campaign addresses
(not npub-derived) and the two-mode model.
- Replace why-not-silent-payments with silent-payments-supported
(yes, via a non-custodial bridge that lets donors keep using any
Bitcoin wallet).
- Replace why-not-rotating-addresses with fast-vs-private-mode and
add what-are-silent-payments, private-mode-reliability, and
choose-mode-as-activist.
- Soften censorship-resistance and why-onchain to acknowledge the
bridge dependency in Private Mode without overclaiming.
- Donor Guide (src/lib/helpContent.ts):
- Fold the silent-payments donor-side note into how-donating-works;
flag the fresh-address-per-visit behaviour so donors don't read it
as a phishing attempt.
- Update why-public to clarify that donor-side advice still applies
on Private Mode campaigns.
- Activist Guide (src/lib/helpContent.ts):
- Rewrite how-receiving-works to introduce the per-campaign choice.
- Add choose-receive-mode (with pros/cons), when-to-use-which,
fast-mode-warning (absorbs the deleted page-level alert), and
private-mode-failure-modes (concrete reliability disclosures).
- Qualify why-public, dont-keep-funds, cashout-overview, and
donors-can-be-seen with mode-specific framing. Cash-out sections
themselves are unchanged.
- Page chrome (src/pages/DonorGuidePage.tsx, ActivistGuidePage.tsx):
- Remove the amber 'Recommended for above-ground activism' alert from
both pages. The state-actor warning now lives in
fast-mode-warning, where it's contextually accurate (Private Mode
is the actual mitigation, not 'read the sections below').
- Drop the now-unused Alert/AlertTriangle imports.
No product code or campaign-creation flow is touched in this commit -
this is content-only, ahead of the UI work.
This commit is contained in:
+115
-37
@@ -121,32 +121,77 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
id: 'send-bitcoin-onchain',
|
||||
question: 'How does sending Bitcoin work?',
|
||||
answer: [
|
||||
'You send real Bitcoin on-chain directly to the activist. Your Nostr key is your wallet \u2014 no separate account, no top-up.',
|
||||
'You send real Bitcoin on-chain directly to the campaign you\'re supporting. {appName} doesn\'t hold or forward the money \u2014 your payment goes to the campaign\'s own Bitcoin address.',
|
||||
'Some campaigns use **Fast Mode** (one public address that every donation lands on). Others use **Private Mode**, which shows you a fresh address each time you visit, bridged behind the scenes to the activist\'s silent-payment wallet. Either way, you just pay the address you see from any Bitcoin wallet.',
|
||||
'You pay a small network fee to miners so the transaction gets confirmed. Once broadcast, it\'s public and irreversible.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'connect-wallet',
|
||||
question: 'What is the wallet on {appName}?',
|
||||
question: 'What address receives my donations?',
|
||||
answer: [
|
||||
'Your {appName} wallet is an on-chain Bitcoin address derived from your Nostr key. There\'s nothing to sign up for \u2014 it exists the moment you have an account.',
|
||||
'Donations sent to you arrive at that address. To spend them, see the **Activist Guide**.',
|
||||
'Donations arrive at an on-chain Bitcoin address belonging to the campaign \u2014 not a personal wallet shared across {appName}. The activist picks one of two modes when they create the campaign:',
|
||||
'**Fast Mode** uses a single static Bitcoin address for the whole campaign. Donations are reliable and arrive quickly, but the full donation history is publicly tied to that one address.',
|
||||
'**Private Mode** uses silent payments: every donor sees a fresh, one-shot Bitcoin address that funnels into the activist\'s silent-payment wallet via {appName}\'s non-custodial bridge. Donations are slower and depend on the bridge, but the receiving side is unlinkable on-chain.',
|
||||
'See the **Activist Guide** for how to choose, and the **Donor Guide** for what to expect when paying either kind of campaign.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'donations-are-public-general',
|
||||
question: 'Are donations on {appName} public?',
|
||||
answer: [
|
||||
'Yes. Every donation \u2014 given or received \u2014 is recorded on the public Bitcoin blockchain and on Nostr. Anyone can see the amounts, the timing, and the addresses involved.',
|
||||
'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.',
|
||||
'Read the **Donor Guide** and **Activist Guide** for what this means in practice and how to protect your privacy if you need to.',
|
||||
],
|
||||
},
|
||||
{
|
||||
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.',
|
||||
'**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.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'what-are-silent-payments',
|
||||
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 non-custodial 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.',
|
||||
'The bridge is non-custodial: each donation lands on a one-shot address that funnels straight to the activist. {appName} never holds spendable funds.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'private-mode-reliability',
|
||||
question: 'How reliable is Private Mode?',
|
||||
answer: [
|
||||
'Private Mode is meaningfully more fragile than Fast Mode. Confirmations are typically **2\u20133\u00d7 slower**, the bridge service has to be online when the donation lands, and there are more moving parts that can fail \u2014 a stale address loaded into a tab hours earlier, a bridge maintenance window, etc.',
|
||||
'We can\'t guarantee that every Private Mode donation will arrive. That\'s the honest cost of privacy. For campaigns where speed and reliability matter most, **Fast Mode** is the right choice. For campaigns where donor and activist privacy matter most, **Private Mode** is.',
|
||||
],
|
||||
},
|
||||
{
|
||||
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 in plain English.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'censorship-resistance',
|
||||
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 the address.',
|
||||
'As long as the Bitcoin network is running, donations can be sent and received. {appName} itself going offline wouldn\'t stop them.',
|
||||
'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.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -154,8 +199,8 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
question: 'Why on-chain Bitcoin?',
|
||||
answer: [
|
||||
'On-chain Bitcoin is the most widely supported and censorship-resistant payment rail in the world. Every Bitcoin wallet can send it.',
|
||||
'It requires **zero extra setup** for activists once they have a Nostr account, and **zero extra setup** for donors who already hold Bitcoin. That accessibility is what makes {appName} actually viable for normal people to use every day.',
|
||||
'The tradeoff is that on-chain transactions are public and pay a miner fee. The Donor and Activist guides explain how to handle both.',
|
||||
'It requires **zero extra setup** for donors who already hold Bitcoin, regardless of which mode a campaign uses. That accessibility is what makes {appName} actually viable for normal people to use every day.',
|
||||
'The tradeoff is that on-chain transactions are public (mitigated by Private Mode on the receiving side) and pay a miner fee. The Donor and Activist guides explain how to handle both.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -166,29 +211,12 @@ const FAQ_TEMPLATE: FAQCategory[] = [
|
||||
'We want {appName} to work for someone whose only Bitcoin experience is a regular consumer app like Cash App, Coinbase, Strike, Venmo, or PayPal. On-chain Bitcoin works with every wallet on the planet.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'why-not-silent-payments',
|
||||
question: 'Why doesn\'t {appName} use silent payments?',
|
||||
answer: [
|
||||
'Silent payments only work when the **sender\'s** wallet supports them. Most popular consumer apps \u2014 Cash App, Coinbase, Strike, Venmo, PayPal, and nearly every custodial wallet \u2014 do not.',
|
||||
'Asking donors to install new software is a barrier we won\'t put in front of activists who need support.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'why-not-rotating-addresses',
|
||||
question: 'Why doesn\'t {appName} generate a new address for every donation?',
|
||||
answer: [
|
||||
'Doing this would require {appName} to act as a money-exchanging middleman \u2014 taking custody of the Bitcoin first and then forwarding it on to the activist.',
|
||||
'That would make us a money transmitter, subject to the regulations that come with that, and a single point of failure: shut down {appName}\'s server and you\'ve shut down every donation flowing through it.',
|
||||
'Instead, each user\'s donation address is derived from their Nostr public key. Donors send directly to the activist, {appName} never touches the funds, and the platform itself can\'t be turned off to censor anyone.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'why-not-other-crypto',
|
||||
question: 'Why not Monero or another cryptocurrency?',
|
||||
answer: [
|
||||
'Bitcoin is by far the most widely adopted cryptocurrency. That means it\'s the easiest for donors to buy and send, and the easiest for activists to receive, hold, and spend.',
|
||||
'Privacy-focused coins like Monero solve some problems on-chain Bitcoin doesn\'t, but they\'re unsupported by most consumer apps and harder to convert back to local currency. Asking either side of a donation to first acquire a niche cryptocurrency is a barrier {appName} won\'t put in the way.',
|
||||
'Privacy-focused coins like Monero solve some problems on-chain Bitcoin doesn\'t, but they\'re unsupported by most consumer apps and harder to convert back to local currency. Asking either side of a donation to first acquire a niche cryptocurrency is a barrier {appName} won\'t put in the way. **Private Mode** with silent payments gives activists meaningful receiving-side privacy without forcing donors onto a niche chain.',
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -353,7 +381,9 @@ const DONOR_GUIDE_TEMPLATE: GuideSection[] = [
|
||||
id: 'how-donating-works',
|
||||
heading: 'How donating works',
|
||||
paragraphs: [
|
||||
'You send real Bitcoin on-chain directly to the activist. {appName} doesn\'t hold or route the money \u2014 the address you\'re paying is derived from the activist\'s Nostr key, so there\'s no middleman in between.',
|
||||
'You send real Bitcoin on-chain directly to the campaign you\'re supporting. {appName} doesn\'t hold or route the money \u2014 your payment goes to the campaign\'s own Bitcoin address.',
|
||||
'Campaigns on {appName} use one of two modes, chosen by the activist when they create the campaign. **Fast Mode** campaigns show you a single static Bitcoin address \u2014 the same one for every donation. **Private Mode** campaigns show you a fresh address every time you visit, bridged behind the scenes to the activist\'s silent-payment wallet. Look for a line on the campaign page telling you which mode applies.',
|
||||
'Either way, you don\'t have to do anything different. Pay the Bitcoin address you\'re shown from any wallet \u2014 Cash App, Coinbase, Strike, a hardware wallet, anything. A fresh address on a Private Mode campaign isn\'t a phishing attempt or a bug; it\'s how silent payments protect the activist.',
|
||||
'You pay a small network fee to Bitcoin miners. Once the transaction is broadcast, it\'s public and irreversible.',
|
||||
],
|
||||
},
|
||||
@@ -361,7 +391,8 @@ const DONOR_GUIDE_TEMPLATE: GuideSection[] = [
|
||||
id: 'why-public',
|
||||
heading: 'Why your donation is public',
|
||||
paragraphs: [
|
||||
'Bitcoin is a public ledger. Anyone can look up an activist\'s address and see every donation \u2014 the amount, the time, and the address it came from.',
|
||||
'Bitcoin is a public ledger. On a **Fast Mode** campaign, anyone can look up the campaign\'s address and see every donation \u2014 the amount, the time, and the address it came from.',
|
||||
'On a **Private Mode** campaign, the activist\'s receiving side is hidden by silent payments \u2014 there\'s no single address an outside observer can watch. But **your sending side still looks the same on-chain** as any other Bitcoin transaction. The advice below about non-KYC Bitcoin, coinjoins, fresh wallets, and irregular amounts applies in both modes.',
|
||||
'Your sending address can usually be traced back to wherever you bought the Bitcoin \u2014 a consumer app like Cash App, Coinbase, Strike, Venmo, PayPal, Kraken, or Binance. That link is what ties a donation to your real identity.',
|
||||
],
|
||||
},
|
||||
@@ -413,21 +444,67 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideSection[] = [
|
||||
id: 'how-receiving-works',
|
||||
heading: 'How receiving works',
|
||||
paragraphs: [
|
||||
'Your {appName} donation address is derived from your Nostr public key. Donors send on-chain Bitcoin directly to it. No one stands between you and the funds, and no server can be shut down to stop the donations.',
|
||||
'Every campaign you create on {appName} has its own on-chain Bitcoin receiving setup, chosen when you create the campaign. No middleman holds your funds, and no server can be shut down to stop donations to a campaign once it\'s live.',
|
||||
'You pick one of two modes per campaign. There\'s no default and no way to switch later \u2014 if you change your mind, you create a new campaign. The choice is between **Fast Mode** (one public address, maximally reliable) and **Private Mode** (silent payments, stronger privacy at the cost of speed and reliability). The rest of this guide explains both.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'choose-receive-mode',
|
||||
heading: 'Choosing a mode: Fast vs. Private',
|
||||
paragraphs: [
|
||||
'**Fast Mode** uses a single static Bitcoin address that {appName} generates for your campaign. Every donor pays the same address. The address isn\'t tied to your Nostr key \u2014 it\'s scoped to this campaign \u2014 but the full donation history is permanently public on the Bitcoin blockchain.',
|
||||
'**Private Mode** uses silent payments. Each donor sees a fresh, one-shot `bc1\u2026` address generated by {appName}\'s non-custodial bridge, which funnels the funds straight to the silent-payment wallet you set up at campaign creation. From any outside observer\'s view, there\'s no single address showing your campaign\'s donation history.',
|
||||
'Donors don\'t need to know anything about silent payments \u2014 they just pay the address they see, from whatever Bitcoin wallet they already use.',
|
||||
],
|
||||
pros: [
|
||||
'**Fast Mode** \u2014 fastest confirmations, most reliable, every wallet supports it, no bridge dependency.',
|
||||
'**Private Mode** \u2014 receiving side unlinkable on-chain, donor list not directly visible, strongest privacy for the activist.',
|
||||
],
|
||||
cons: [
|
||||
'**Fast Mode** \u2014 every donation publicly tied to the campaign forever; donors, amounts, and timing all visible to anyone.',
|
||||
'**Private Mode** \u2014 2\u20133\u00d7 slower confirmations, depends on {appName}\'s bridge being online, more potential failure modes, no guarantee every donation arrives.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'when-to-use-which',
|
||||
heading: 'When to use which',
|
||||
paragraphs: [
|
||||
'**Use Fast Mode when** speed and reliability matter more than privacy: above-ground fundraisers, mutual-aid drives, public campaigns where being seen is the point, time-sensitive appeals where a missed donation is unacceptable.',
|
||||
'**Use Private Mode when** you or your donors face elevated risk: campaigns that could attract retaliation, fundraisers in jurisdictions hostile to the cause, or any situation where a publicly indexable donor list is a liability.',
|
||||
'**If you face state-level threats**, Private Mode is the starting point \u2014 not the finish line. The cash-out sections below still apply, because spending donated coins on-chain creates its own trail regardless of how they arrived.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'fast-mode-warning',
|
||||
heading: 'Fast Mode: read this before choosing it',
|
||||
paragraphs: [
|
||||
'Fast Mode is recommended only for above-ground activism. Every donation you receive is recorded publicly on the Bitcoin blockchain and on Nostr \u2014 amount, time, and the donor\'s sending address. That history is permanent and globally readable.',
|
||||
'If you or your donors require extreme privacy \u2014 including protection from state actors \u2014 **do not use Fast Mode**. Choose Private Mode and follow the cash-out advice further down this page.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'private-mode-failure-modes',
|
||||
heading: 'Private Mode: what "more fragile" actually means',
|
||||
paragraphs: [
|
||||
'**Slower confirmations.** Private Mode donations typically take 2\u20133\u00d7 longer to show up than Fast Mode donations. The bridge adds steps between "donor sends" and "funds in your wallet."',
|
||||
'**Bridge dependency.** {appName}\'s bridge service has to be reachable when the donation lands. If the bridge is in a maintenance window or under load, donations can be delayed.',
|
||||
'**Stale addresses.** Private Mode generates a fresh address each time a donor visits the campaign page. If a donor loads the page, walks away for hours, then pays the address from a tab they had open, that address may already be past its useful window. We work to handle this gracefully, but it\'s a real failure mode.',
|
||||
'**No hard guarantee.** Unlike Fast Mode \u2014 where every wallet on the planet can pay your address with normal Bitcoin behavior \u2014 Private Mode adds infrastructure that, however non-custodial, can fail. We won\'t pretend otherwise.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'why-public',
|
||||
heading: 'Why incoming donations are public',
|
||||
heading: 'Why incoming donations are (or aren\'t) public',
|
||||
paragraphs: [
|
||||
'Bitcoin is a public ledger. Anyone can look up your address and see every donation \u2014 the amount, the time, and the sending address. Your supporters\' addresses are visible too.',
|
||||
'Bitcoin is a public ledger. In **Fast Mode**, anyone can look up your campaign\'s address and see every donation \u2014 the amount, the time, the sending address. Your supporters\' addresses are visible too. In **Private Mode**, the receiving side is hidden by silent payments, so there\'s no single address an observer can watch to enumerate your donations.',
|
||||
'Private Mode hides the **arrival** of funds. It does not hide the **spending** of them. Once you go to use the Bitcoin you\'ve received, the on-chain trail starts there \u2014 which is what the cash-out sections below are about.',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'dont-keep-funds',
|
||||
heading: 'Don\'t keep funds at your {appName} address',
|
||||
heading: 'Don\'t keep funds at your campaign\'s address',
|
||||
paragraphs: [
|
||||
'Move funds to a wallet you control as soon as practical. Treat your {appName} address like a mailbox, not a savings account.',
|
||||
'Move funds to a wallet you control as soon as practical. Treat the campaign\'s receiving address like a mailbox, not a savings account \u2014 in both Fast Mode and Private Mode.',
|
||||
'Good self-custody wallets to move funds into: [Sparrow](https://sparrowwallet.com), [BlueWallet](https://bluewallet.io), or [Phoenix](https://phoenix.acinq.co) (Lightning).',
|
||||
],
|
||||
},
|
||||
@@ -435,7 +512,7 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideSection[] = [
|
||||
id: 'cashout-overview',
|
||||
heading: 'Cashing out privately \u2014 overview',
|
||||
paragraphs: [
|
||||
'To spend donations without revealing who you are, you have to break the on-chain trail before converting to cash. The next sections cover the main paths. Each has tradeoffs in custody, privacy, difficulty, and fees.',
|
||||
'Private Mode hides **who paid you**, but spending those coins on-chain still creates a trail unless you take the steps below. To spend donations without revealing who you are, you have to break the on-chain trail before converting to cash. The next sections cover the main paths. Each has tradeoffs in custody, privacy, difficulty, and fees.',
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -485,9 +562,10 @@ const ACTIVIST_GUIDE_TEMPLATE: GuideSection[] = [
|
||||
},
|
||||
{
|
||||
id: 'donors-can-be-seen',
|
||||
heading: 'Your donation history is visible to future supporters',
|
||||
heading: 'Your donation history and future supporters',
|
||||
paragraphs: [
|
||||
'Anyone considering supporting you can look up your address and see the full donation history. Keep in mind how that history reads to a new donor.',
|
||||
'In **Fast Mode**, anyone considering supporting your campaign can look up the address and see the full donation history. Keep in mind how that history reads to a new donor \u2014 a thin or uneven record can affect how people decide to give.',
|
||||
'In **Private Mode**, that history isn\'t directly visible. New donors don\'t see prior donors\' addresses or amounts; what they see is whatever you publish about the campaign\'s progress.',
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { useSeoMeta } from '@unhead/react';
|
||||
import { AlertTriangle } from 'lucide-react';
|
||||
|
||||
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
|
||||
import { GuideHero } from '@/components/GuideHero';
|
||||
import { GuideSectionCard } from '@/components/GuideSectionCard';
|
||||
import { useAppContext } from '@/hooks/useAppContext';
|
||||
@@ -38,23 +36,6 @@ export function ActivistGuidePage() {
|
||||
/>
|
||||
|
||||
<div className="px-4 pt-4 pb-4 space-y-4 max-w-3xl mx-auto">
|
||||
{/* Above-ground recommendation alert */}
|
||||
<Alert className="border-amber-500/50 [&>svg]:text-amber-500">
|
||||
<AlertTriangle className="size-4" />
|
||||
<AlertTitle className="text-amber-700 dark:text-amber-400">
|
||||
Recommended for above-ground activism
|
||||
</AlertTitle>
|
||||
<AlertDescription className="text-foreground/80">
|
||||
<p>
|
||||
{config.appName} is recommended only for above-ground activism. Every donation you
|
||||
receive is recorded publicly on the Bitcoin blockchain and on Nostr. If you or your
|
||||
donors require extreme privacy — including protection from state actors
|
||||
— additional steps are needed to protect yourself and the people supporting you.
|
||||
Read the sections below before accepting donations.
|
||||
</p>
|
||||
</AlertDescription>
|
||||
</Alert>
|
||||
|
||||
{/* Sections */}
|
||||
{sections.map((section) => (
|
||||
<GuideSectionCard key={section.id} section={section} />
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { useSeoMeta } from '@unhead/react';
|
||||
import { AlertTriangle } from 'lucide-react';
|
||||
|
||||
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
|
||||
import { GuideHero } from '@/components/GuideHero';
|
||||
import { GuideSectionCard } from '@/components/GuideSectionCard';
|
||||
import { useAppContext } from '@/hooks/useAppContext';
|
||||
@@ -37,22 +35,6 @@ export function DonorGuidePage() {
|
||||
/>
|
||||
|
||||
<div className="px-4 pt-4 pb-4 space-y-4 max-w-3xl mx-auto">
|
||||
{/* Above-ground recommendation alert */}
|
||||
<Alert className="border-amber-500/50 [&>svg]:text-amber-500">
|
||||
<AlertTriangle className="size-4" />
|
||||
<AlertTitle className="text-amber-700 dark:text-amber-400">
|
||||
Recommended for above-ground activism
|
||||
</AlertTitle>
|
||||
<AlertDescription className="text-foreground/80">
|
||||
<p>
|
||||
{config.appName} is recommended only for supporting above-ground activism. Your
|
||||
donation is public on the Bitcoin blockchain and on Nostr. If you need extreme
|
||||
privacy — including protection from state actors — additional steps are
|
||||
required before donating. Read the sections below first.
|
||||
</p>
|
||||
</AlertDescription>
|
||||
</Alert>
|
||||
|
||||
{/* Sections */}
|
||||
{sections.map((section) => (
|
||||
<GuideSectionCard key={section.id} section={section} />
|
||||
|
||||
Reference in New Issue
Block a user