1db8b4d5b0
Pivot the homepage from a Twitter-style social feed to a GoFundMe-style fundraising hub. Introduces a new addressable kind 30223 "Campaign" that carries the marketing-style metadata (title, summary, cover image, story, category, goal, deadline, location) plus a list of recipient pubkeys with optional split weights. Documented in NIP.md alongside the kind 8333 onchain-zap spec it builds on. Donations are sent as a single multi-output Bitcoin transaction (one output per recipient, derived Taproot addresses) using the existing buildUnsignedMultiOutputPsbt + useBitcoinSigner infrastructure that backs community on-chain zaps. After broadcast, the client publishes one kind 8333 receipt per recipient with the campaign's `a` coordinate so the donation aggregates into the campaign's totals. UI surfaces: - /campaigns is now the default homePage. Hero, two featured slots (placeholders in src/lib/featuredCampaigns.ts), then a grid of user-submitted campaigns. - /campaigns/new is a full create form with cover upload, slug collision check, recipient builder with per-row weights, and preset/custom donation-amount UX. - naddr1 identifiers for kind 30223 route to CampaignDetailPage via NIP19Page (full story rendered through the existing ArticleContent markdown component, plus a sticky donate rail with progress). - DonateDialog presets are tuned for on-chain amounts (10K-1M sats) with a dust-aware minimum guard derived from the split math. - Fundraisers sidebar item with a HandHeart icon. Kept the existing social-feed pages addressable from the sidebar; the overhaul is scoped to the home/landing experience rather than removing the underlying Nostr features.