goon/mobile/src/lib/donate.ts
goon-foss ad0284585b Initial commit
Goon — self-hosted aggregator for adult-content scene metadata.

Indexes scenes from TPDB, StashDB, and 30+ public adult tube sites.
Cross-source deduplication via perceptual hash + Levenshtein distance.
FastAPI backend + APScheduler worker + React Native (Expo) mobile client.

FOSS, ad-free, donation-funded. See README for details.
2026-05-20 10:10:22 +02:00

71 lines
2.6 KiB
TypeScript

// Donation addresses for the project. These are PUBLIC by design — the app ships
// them in plaintext so users can verify them on-screen + cross-reference against
// the project README before sending crypto.
//
// To swap addresses: regenerate in your wallet, paste new value here, rebuild APK.
// (We do NOT fetch addresses from backend — that would let a compromised server
// swap addresses mid-donation. Hardcoding pins the address to the signed APK.)
export type DonateCoin = {
/** Internal key, used for analytics + storage. */
id: 'xmr' | 'btc' | 'ltc';
/** Short ticker shown in UI chip. */
ticker: string;
/** Full name shown on detail card. */
name: string;
/** One-line value prop shown under the name. */
blurb: string;
/** Receive address — generate fresh, never re-use across projects. */
address: string;
/** Hex color used as the coin's accent in the UI. */
color: string;
/** Optional URI scheme prefix for QR codes (most wallets recognize these). */
qrScheme?: string;
};
// PLACEHOLDER ADDRESSES — replace before publishing.
// Workflow:
// 1. Install Cake Wallet from github.com/cake-tech/cake_wallet/releases (NOT Play Store)
// 2. Generate XMR + BTC + LTC wallets, store each seed offline on its own paper
// 3. Tap "Receive" per wallet → copy address → paste below
// 4. Rebuild APK + publish update
export const DONATE_COINS: DonateCoin[] = [
{
id: 'xmr',
ticker: 'XMR',
name: 'Monero',
blurb: 'Privacy by default. Untraceable on-chain. Recommended.',
address: '47cXcrsYUsk81rDY3wp7ASUQtpkMHyrt4WHpqef9nSUugqxqFRaE13QBd1wviGpJHJ9Vt82GsyncNEKHQizXkoVMUVMEh1c',
color: '#F26822',
qrScheme: 'monero:',
},
{
id: 'btc',
ticker: 'BTC',
name: 'Bitcoin',
blurb: 'Mainstream, easy to send. On-chain is public — use a fresh wallet to donate anonymously.',
address: 'bc1qcaa4rv89rtt39y92rpff5rlysmtkful9ck6mml',
color: '#F7931A',
qrScheme: 'bitcoin:',
},
{
id: 'ltc',
ticker: 'LTC',
name: 'Litecoin',
blurb: 'Fast and cheap (~$0.01 fee). Lower adoption than BTC but friendlier for small donations.',
address: 'ltc1qlqe0f7nmt4se82adgj8z6vcz2zeqfrlwz0n85s',
color: '#345D9D',
qrScheme: 'litecoin:',
},
];
/** Returns the value to encode in the QR code — wallet URI when supported. */
export function qrPayload(coin: DonateCoin): string {
if (coin.qrScheme) return `${coin.qrScheme}${coin.address}`;
return coin.address;
}
/** True when an address still equals its placeholder — used to gate the screen. */
export function isPlaceholder(addr: string): boolean {
return addr.startsWith('REPLACE_WITH_');
}