// borsenspiel.jsx — "Catch the Monkey" weekly stock-picking contest. // A separate, gamified mini-experience: 5 predictions per week, best return wins. // Distinct visual identity (playful, energetic) vs the rest of the app. function CatchTheMonkey({ dark }) { const t = useTheme(dark); // Contest accent — use brand green but with a playful banana-yellow as the contest theme color const contestBg = dark ? '#1A1408' : '#FFF8E6'; // warm cream const contestInk = dark ? '#FFD66B' : '#8B6914'; const yellow = '#FFC93C'; return (
{/* Header */}
{Icon.back(t.text, 22)}
Börsenspiel · KW 20–21/2026 · 2 Wochen
🐵 Catch the Monkey
{ActIcon.more(t.text, 20)}
{/* HERO — countdown + prize */}
{/* big banana / monkey decoration */}
🍌
Endet in LIVE
{/* Countdown digits — days for a 2-week contest */}
{[ { v: '03', l: 'Tage' }, { v: '06', l: 'Std' }, { v: '59', l: 'Min' }, ].map((u, i) => (
{u.v} {u.l}
{i < 2 && :}
))}
{/* Prizes — real prize on top, virtual points below, visually distinct */}
Real-Preis
🥈 ½ Unze Silber für Platz 1
{/* MY STANDING — what's in it for me */}
Dein Stand
#142 von 1,247
+3.42%
diese Woche
{/* Progress: 5 predictions needed */}
Du brauchst noch 2 Einschätzungen 3/5
{[1,1,1,0,0].map((on, i) => (
))}
{/* Existing 3 picks */}
{[ { sym: 'NVDA', dir: 'buy', pl: '+4.2%' }, { sym: 'GOOGL', dir: 'buy', pl: '+1.4%' }, { sym: 'AMZN', dir: 'buy', pl: '−1.5%' }, ].map((p, i) => (
{p.sym} {p.pl}
))} {/* empty slots */} {[0,1].map(i => (
+
))}
2 Einschätzungen abgeben
{/* PODIUM — top 3 leaderboard, hero-style */}
Bestenliste · Live 1,247 Spieler
{/* #2 */} {/* #1 */} {/* #3 */}
{/* LEADERBOARD list */}
{[ { r: 4, name: 'WatchMen', rend: '+13.72%' }, { r: 5, name: 'B. Riley Financial', rend: '+11.55%' }, { r: 6, name: 'Bankster', rend: '+11.01%' }, { r: 7, name: 'Vassago8', rend: '+10.57%' }, { r: 8, name: 'Lekrim', rend: '+10.08%' }, { r: 142, name: 'Stefan', rend: '+3.42%', isYou: true }, ].map((u, i) => (
0 ? `0.5px solid ${t.border}` : 'none', }}> #{u.r} {u.name}{u.isYou && · DU} {u.rend}
))}
Alle 1,247 anzeigen →
{/* TOP PICKS — best & worst predictions this week */}
Top Picks der Woche
🚀 Best
{[ { sym: 'FUEL', name: 'Fuel Energy', by: 'PapaSmurf', rend: '+63.4%' }, { sym: 'D-WV', name: 'D-wave Q.', by: 'geldnutzer', rend: '+46.0%' }, { sym: 'CSL', name: 'Coinbase E.', by: 'geldnutzer', rend: '+47.0%' }, ].map((p, i) => (
0 ? `0.5px solid ${t.border}` : 'none' }}>
{p.sym} {p.rend}
von {p.by}
))}
💀 Worst
{[ { sym: 'RGNX', name: 'Regenix.', by: 'Bankster', rend: '−5.6%' }, { sym: 'BIQ', name: 'Bioxcel', by: 'Lekrim', rend: '−3.9%' }, { sym: 'RGCT', name: 'RGC Tech', by: 'Vassago8', rend: '−21.7%' }, ].map((p, i) => (
0 ? `0.5px solid ${t.border}` : 'none' }}>
{p.sym} {p.rend}
von {p.by}
))}
{/* Rules collapsed */}
?
Wie funktioniert es?
Regeln in 30 Sekunden
{Icon.chevR(t.textDim, 14)}
{/* Comments thread peek */}
Diskussion Alle 28 →
{[ { name: 'PapaSmurf', when: '12m', body: 'Wer hat noch NVDA für diese Woche? Bin gespannt auf den Q3-Setup.' }, { name: 'Kryptonit', when: '1h', body: 'Catch the Monkey ist eine Sucht. Schon wieder #3, aber #1 ist heute weit weg.' }, ].map((c, i) => (
{c.name} {c.when}
{c.body}
))}
{/* Past contests */}
Vergangene Wochen
{[ { week: 'KW 18–19', date: '02.05', winner: 'DerAlmanach', rend: '+12.10%' }, { week: 'KW 16–17', date: '18.04', winner: 'fenjal', rend: '+6.42%' }, { week: 'KW 14–15', date: '04.04', winner: 'WatchMen', rend: '+18.88%' }, { week: 'KW 12–13', date: '21.03', winner: 'Kryptonit', rend: '+3.55%' }, ].map((w, i) => (
0 ? `0.5px solid ${t.border}` : 'none', }}> {w.week} {w.winner} {w.rend} {Icon.chevR(t.textDim, 12)}
))}
); } // ───────────────────────── Podium step ───────────────────────── function PodiumStep({ t, rank, name, rend, avatar, height, color, badge }) { return (
{/* Avatar */}
{badge && (
{badge}
)}
{/* Name + return */}
{name}
{rend}
{/* Bar */}
{rank}
); } Object.assign(window, { CatchTheMonkey });