Production-ready overhaul: backend fixes, claim flow polish, SEO, mobile, nginx

Backend:
- Fix activity score (followersCount check), NIP-98 URL proto, wallet balance guard
- Add payment_hash to confirm response, spentTodaySats to stats
- Add idx_claims_ip_hash; security headers, graceful shutdown, periodic nonce cleanup

Frontend:
- Remove 8 legacy components; polish wizard (rules summary, profile card, confetti, share)
- Stats budget bar uses spentTodaySats; ErrorBoundary with reload

SEO & production:
- Full meta/OG/Twitter, favicon, JSON-LD, robots.txt, sitemap.xml
- Mobile CSS fixes; nginx static dist + gzip + cache + security headers
- Vite manualChunks; aria-labels, dynamic page titles

Made-with: Cursor
This commit is contained in:
Michaël
2026-02-27 16:29:37 -03:00
parent f31bbb12ab
commit 5b516f02cb
32 changed files with 432 additions and 927 deletions

View File

@@ -3,7 +3,49 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sats Faucet</title>
<title>Sats Faucet — Free Bitcoin for Nostr Users</title>
<meta name="description" content="Free Bitcoin sats faucet for Nostr users. Connect your Nostr account, prove your identity, and claim sats via Lightning. Transparent, fair, community-funded." />
<meta name="robots" content="index, follow" />
<meta name="theme-color" content="#0c1222" />
<link rel="canonical" href="https://faucet.lnpulse.app/" />
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:title" content="Sats Faucet — Free Bitcoin for Nostr Users" />
<meta property="og:description" content="Claim free sats via Lightning. Connect your Nostr identity, pass eligibility checks, and receive a randomized payout. Community-funded and transparent." />
<meta property="og:url" content="https://faucet.lnpulse.app/" />
<meta property="og:site_name" content="Sats Faucet" />
<meta property="og:image" content="https://faucet.lnpulse.app/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Sats Faucet — Free Bitcoin for Nostr Users" />
<meta name="twitter:description" content="Claim free sats via Lightning. Connect your Nostr identity, pass eligibility checks, and receive a randomized payout." />
<meta name="twitter:image" content="https://faucet.lnpulse.app/og-image.png" />
<!-- Favicon (inline SVG lightning bolt) -->
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='6' fill='%230c1222'/%3E%3Cpath d='M18 4L8 18h6l-2 10 10-14h-6z' fill='%23f97316'/%3E%3C/svg%3E" />
<link rel="apple-touch-icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 180'%3E%3Crect width='180' height='180' rx='36' fill='%230c1222'/%3E%3Cpath d='M100 20L45 100h35l-12 60 58-80H90z' fill='%23f97316'/%3E%3C/svg%3E" />
<!-- Structured Data (JSON-LD) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Sats Faucet",
"url": "https://faucet.lnpulse.app",
"description": "Free Bitcoin sats faucet for Nostr users. Claim sats via Lightning with your Nostr identity.",
"applicationCategory": "FinanceApplication",
"operatingSystem": "Any",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
</script>
</head>
<body>
<div id="root"></div>