Fair-share per entrant — the core metric
fair_share = prize_pool_usd / current_registrant_count
The naive equal split. Not a prediction of winnings — a proxy for how much prize money chases each competitor. A $100K event with 300 entrants ($333/share) is a very different animal from $100K with 20,000 ($5/share).
Opportunity score (0-100)
opportunity_score =
value_score x 0.40 (log-scaled prize pool, $1M ceiling)
+ odds_score x 0.35 (fair-share tiers: ≥$50=100 ... <$0.50=10)
+ urgency x 12 (≤7 days = full marks, >60 days = partial)
+ access x 13 (online = full, IRL = discounted) The decision engine (v0.2)
We compute two different numbers, because they answer different questions:
Opportunity score — how attractive is this with plenty of time? Deadline plays almost no role.
Action state — given today's date and everything else you could build, what should you do right now?
States: ENTER NOW / SPRINT / PREP / WATCH / SKIP Finish-feasibility prior (planning-fallacy adjusted): <1d 10% · 1-2d 25% · 2-3d 45% · 3-5d 65% · 5-7d 80% 7-10d 90% · 10-14d 97% · 14d+ 100% Latest safe start = deadline - P80 build time (40h @ 4h/day) - 2d buffer
Payout model
p(any payout) = sigmoid( logit( paying_slots / serious_field ) ) paying slots: 3-12 assumed until prize ladders are verified on official pages serious field: P50 of the distribution below
Heuristic cash EV = normalized prize x p(any payout). Prize-ladder data upgrades this to a ranked EV sum later.
🔥 Mega-opportunity detector
A flag requires stated facts crossing thresholds — never a vibe:
- Fair-share ≥ $20/entrant (strong flag, +35)
- Prize ≥ $100K AND below-median competition (+30)
- Closing within 14 days with odds-score ≥ 55 (+15)
- Total score must reach 30 to display
What we don't do
- We don't rank by sponsorship or affiliate relationships
- We don't predict winners — we normalize competition
- We don't hide declining events; ended events show as closed
- Data comes from the official Devpost API only — no scraping, no guesses