// MAKE A MILLY OR IT'S EMBARRASSING // King Omar (Claude Pro) vs Basic Rhys (Codex) vs Pussy (Hermes Plus Ching Chong) vs Patty (Copilot & Clawpilot) // Last to $1M is confirmed gay const GOAL = 1_000_000; const ORG = 'https://github.com/Bored-investments'; export default { async fetch(request, env) { const url = new URL(request.url); if (url.pathname === '/favicon.ico') return new Response(null, { status: 204 }); // API: competitor revenue update if (url.pathname === '/update' && request.method === 'POST') { const auth = request.headers.get('Authorization'); const body = await request.json(); const { competitor, revenue } = body; const secrets = { rhys: env.RHYS_SECRET, pussy: env.PUSSY_SECRET, patty: env.PATTY_SECRET, omar: env.OMAR_SECRET }; if (!secrets[competitor] || auth !== `Bearer ${secrets[competitor]}`) { return new Response('Unauthorized', { status: 401 }); } const revenues = JSON.parse(await env.MILLY_METRICS.get('revenues') || '{}'); revenues[competitor] = parseFloat(revenue) || 0; await env.MILLY_METRICS.put('revenues', JSON.stringify(revenues)); return new Response('Updated'); } const competitors = defaultCompetitors(); const [revenuesRaw, metricsRaw, ...commitArrays] = await Promise.all([ env.MILLY_METRICS.get('revenues'), env.MILLY_METRICS.get('metrics'), ...Object.values(competitors).map(c => fetchCommits(env, c.repo)), ]); const revenues = revenuesRaw ? JSON.parse(revenuesRaw) : {}; const metrics = metricsRaw ? JSON.parse(metricsRaw) : {}; // Omar's revenue = live Stripe competitors.omar.revenue = metrics.total_revenue || 0; // Others = self-reported via /update API for (const id of ['rhys', 'pussy', 'patty']) { if (revenues[id] != null) competitors[id].revenue = revenues[id]; } // Attach commits Object.keys(competitors).forEach((id, i) => { competitors[id].commits = commitArrays[i] || []; }); return new Response(render(competitors), { headers: { 'Content-Type': 'text/html;charset=UTF-8', 'Cache-Control': 'no-store' } }); } }; function defaultCompetitors() { return { omar: { name:'King Omar', ai:'Claude Pro', revenue:0, color:'#6366f1', emoji:'๐Ÿ‘‘', github:'kingomarwashere', repo:'Bored-investments/chuckasickie' }, rhys: { name:'Basic Rhys', ai:'Codex', revenue:0, color:'#f59e0b', emoji:'๐Ÿค“', github:'rhy-collab', repo:'Bored-investments/milly-countdown' }, pussy: { name:'Pussy', ai:'Hermes Plus Ching Chong',revenue:0, color:'#ec4899', emoji:'๐Ÿฑ', github:'QuixThe2nd', repo:null }, patty: { name:'Patty', ai:'Copilot & Clawpilot', revenue:0, color:'#10b981', emoji:'๐Ÿค ', github:null, repo:null }, }; } async function fetchCommits(env, repo) { if (!repo) return []; const cacheKey = `commits:${repo}`; const cached = await env.MILLY_METRICS.get(cacheKey); if (cached) return JSON.parse(cached); try { const res = await fetch(`https://api.github.com/repos/${repo}/commits?per_page=3`, { headers: { 'User-Agent': 'milly-countdown' } }); const data = await res.json(); if (!Array.isArray(data)) return []; const commits = data.map(c => ({ sha: c.sha?.slice(0, 7), message: c.commit?.message?.split('\n')[0]?.slice(0, 72), date: c.commit?.author?.date, })); await env.MILLY_METRICS.put(cacheKey, JSON.stringify(commits), { expirationTtl: 300 }); return commits; } catch { return []; } } const fmt = n => n >= 1e6 ? `$${(n/1e6).toFixed(3)}M` : n >= 1000 ? `$${(n/1000).toFixed(1)}K` : `$${n.toFixed(0)}`; const pct = r => Math.min((r / GOAL) * 100, 100); function render(competitors) { const entries = Object.entries(competitors); const sorted = [...entries].sort((a, b) => b[1].revenue - a[1].revenue); const leaderId = sorted[0][0]; const loserId = sorted[sorted.length - 1][0]; return ` MAKE A MILLY OR IT'S EMBARRASSING ๐Ÿ‡
github.com/Bored-investments MAKE A MILLY OR IT'S EMBARRASSING
4 competitors ยท 4 AIs ยท $1,000,000 goal ยท December 31, 2026
โš ๏ธ   LAST TO $1,000,000 IS CONFIRMED GAY ๐Ÿณ๏ธโ€๐ŸŒˆ   โš ๏ธ
Live Race โ€” Updated every 60 seconds
๐Ÿ
${sorted.map(([id, c], i) => { const p = pct(c.revenue); const atGate = p === 0; return `
${i+1}
${c.emoji}
${c.github ? `${c.name}` : c.name}
${c.ai}
${c.github ? ` @${c.github} ` : ''}
${fmt(c.revenue)}
${[10,25,50,75].map(m => `
$${m===10?'100K':m===25?'250K':m===50?'500K':'750K'}
`).join('')}
๐ŸŽ
${p > 4 ? `${p.toFixed(2)}%` : ''}
`; }).join('')}
${sorted.map(([id, c], i) => `
#${i+1}
${c.emoji}
${c.github ? `${c.name}` : c.name}
${c.ai}
${fmt(c.revenue)}
${pct(c.revenue).toFixed(3)}% to $1M
${i===0?'๐Ÿ† Winning':i===sorted.length-1?'๐Ÿณ๏ธโ€๐ŸŒˆ Losing':i===1?'๐Ÿฅˆ 2nd Place':'๐Ÿฅ‰ 3rd Place'} ${c.github ? ` github.com/${c.github} ` : `no github connected`} ${c.commits?.length ? `
${c.commits.map(cm => `
${cm.sha} ${cm.message}
`).join('')}
` : ''}
`).join('')}

๐Ÿข Bored Investments GitHub Org

Competition repos, accountability, and code โ€” all in one place.

Time until last place is confirmed
---
Days
--
Hours
--
Mins
--
Secs
`; }