Redesign faucet claim flow: login → loading → eligibility → claim

- Backend: payout is now random between FAUCET_MIN_SATS and FAUCET_MAX_SATS
- Remove weighted buckets; simplify config and .env.example
- Frontend: show loading and eligibility in main body, modal only for confirm/success
- Rename Confirm payout to Claim; add styles for body loading and eligible state

Made-with: Cursor
This commit is contained in:
SatsFaucet
2026-03-02 14:59:37 +01:00
parent 381597c96f
commit 623eb720dc
6 changed files with 67 additions and 74 deletions

View File

@@ -26,6 +26,8 @@ export const config = {
trustProxy: envBool("TRUST_PROXY", false),
/** Public path prefix when behind a reverse proxy that strips it (e.g. nginx /api/ -> backend /). */
publicBasePath: (process.env.PUBLIC_BASE_PATH ?? "").replace(/\/$/, ""),
/** Host of the API subdomain (e.g. faucetapi.lnpulse.app). When request Host matches, OpenAPI server URL is /. */
apiHost: (process.env.API_HOST ?? "faucetapi.lnpulse.app").split(":")[0],
allowedOrigins: (process.env.ALLOWED_ORIGINS ?? process.env.FRONTEND_URL ?? "http://localhost:5173,http://localhost:5174").split(",").map((s) => s.trim()),
// Database: omit DATABASE_URL for SQLite; set for Postgres
@@ -44,14 +46,6 @@ export const config = {
emergencyStop: envBool("EMERGENCY_STOP", false),
faucetMinSats: envInt("FAUCET_MIN_SATS", 1),
faucetMaxSats: envInt("FAUCET_MAX_SATS", 5),
payoutWeightSmall: envInt("PAYOUT_WEIGHT_SMALL", 50),
payoutWeightMedium: envInt("PAYOUT_WEIGHT_MEDIUM", 30),
payoutWeightLarge: envInt("PAYOUT_WEIGHT_LARGE", 15),
payoutWeightJackpot: envInt("PAYOUT_WEIGHT_JACKPOT", 5),
payoutSmallSats: envInt("PAYOUT_SMALL_SATS", 10),
payoutMediumSats: envInt("PAYOUT_MEDIUM_SATS", 25),
payoutLargeSats: envInt("PAYOUT_LARGE_SATS", 50),
payoutJackpotSats: envInt("PAYOUT_JACKPOT_SATS", 100),
dailyBudgetSats: envInt("DAILY_BUDGET_SATS", 10000),
maxClaimsPerDay: envInt("MAX_CLAIMS_PER_DAY", 100),
minWalletBalanceSats: envInt("MIN_WALLET_BALANCE_SATS", 1000),