Skip to content

[Airdrop P1] Add campaign config module #879

@realproject7

Description

@realproject7

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

  • lib/airdrop/config.ts

Acceptance Criteria

  • Config module exports AIRDROP_CONFIG with all fields
  • NEXT_PUBLIC_AIRDROP_MODE=test uses test config (small pool, low milestones)
  • NEXT_PUBLIC_AIRDROP_MODE=prod (or unset) uses prod config
  • TypeScript types are strict (as const)

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/T3Assigned to T3 builder agentairdropPLOT 10x Airdrop Campaign

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions