Parent: #877
Scope
Create lib/airdrop/config.ts with test/prod configuration switchable via env var.
Config
const TEST_CONFIG = {
CAMPAIGN_START: new Date("2026-XX-XX"), // TBD — 3-day test
CAMPAIGN_END: new Date("2026-XX-XX"), // start + 3 days
POOL_AMOUNT: 10, // 10 PLOT
MILESTONES: {
BRONZE: { mcap: 7_000, pct: 10 },
SILVER: { mcap: 10_000, pct: 30 },
GOLD: { mcap: 50_000, pct: 100 },
},
LOCKER_ID: null,
};
const PROD_CONFIG = {
CAMPAIGN_START: new Date("2026-XX-XX"), // TBD
CAMPAIGN_END: new Date("2026-XX-XX"), // start + 6 months
POOL_AMOUNT: 50_000,
MILESTONES: {
BRONZE: { mcap: 1_000_000, pct: 10 },
SILVER: { mcap: 10_000_000, pct: 30 },
GOLD: { mcap: 70_000_000, pct: 100 },
},
LOCKER_ID: null,
};
// Shared config
POINTS: {
BUY_PER_PLOT: 1,
REFERRAL_PCT: 20,
WRITE_FLAT: 50,
RATE_FLAT: 5,
RATE_DAILY_CAP: 10,
},
STREAK_BOOSTS: { 7: 0.05, 14: 0.10, 30: 0.20, 50: 0.30, 100: 0.50 },
STREAK_MIN_GAP_MINUTES: 30,
Switch via NEXT_PUBLIC_AIRDROP_MODE=test|prod env var.
Files
Acceptance Criteria
Parent: #877
Scope
Create
lib/airdrop/config.tswith test/prod configuration switchable via env var.Config
Switch via
NEXT_PUBLIC_AIRDROP_MODE=test|prodenv var.Files
lib/airdrop/config.tsAcceptance Criteria
AIRDROP_CONFIGwith all fieldsNEXT_PUBLIC_AIRDROP_MODE=testuses test config (small pool, low milestones)NEXT_PUBLIC_AIRDROP_MODE=prod(or unset) uses prod configas const)