BetMetrics
Weten of je goed gokt, of alleen geluk had.
BetMetrics
- Dashboard
- Bets
- Add bet
- Stats
- Settings
Dashboard
+ € 1.284
6,4 %
41,7 %
2,64
- BetMetrics — eigen product
- 2026
- Productontwerp, Datamodel, Frontend, Backend, OCR-integratie
- Sportweddenschappen — performance-analyse
De uitdaging
Wie serieus op sport wedt, weet meestal niet of hij wint. Hij weet wat er op zijn bookmakeraccount staat, en dat is iets anders: dat saldo verzwijgt hoeveel je hebt ingelegd, hoe vaak je stortte, en of de winst uit inzicht kwam of uit één meevaller.
Het antwoord daarop is bijhouden, en daar loopt het altijd stuk. Een weddenschap heeft een sport, een competitie, een wedstrijd, een markt, een selectie, een quotering, een inzet, een bookmaker en een uitslag die pas uren later binnenkomt — en bij een combinatiebet geldt dat voor elk been apart. Dat handmatig in een spreadsheet zetten houdt niemand vol. De spreadsheet stopt na drie weken, en daarmee stopt het antwoord ook.
Strategie
Het knelpunt is de invoer, niet de analyse. Rekenen kan software prima; het probleem is dat er niets te rekenen valt als niemand zijn weddenschappen invoert. Alle belangrijke keuzes in dit product volgen daaruit.
De invoer is een screenshot. Van je betslip heb je al een foto — die maak je toch. Die gaat naar een Supabase Edge Function die hem door een vision-model haalt en er de losse velden uit terugleest: datum, sport, wedstrijd, markt, selectie, quotering, inzet, bookmaker, en bij een combinatie ook elk been afzonderlijk.
Maar het model krijgt niet het laatste woord. Elk gelezen veld komt terug mét een betrouwbaarheidsscore, en belandt in een formulier dat je bevestigt in plaats van in de database. Daarbovenop legt de historietabel per wijziging vast waar een waarde vandaan kwam — OCR, handmatig, import of CSV. Bij een product waar de cijfers het hele punt zijn, moet je van elk getal kunnen navertellen hoe het er is gekomen.
Er wordt bewaard wat pijnlijk is, niet alleen wat vleit. Per weddenschap gaat de slotquotering mee, waardoor closing line value te berekenen is: heb je ingezet tegen een betere prijs dan de markt uiteindelijk gaf. Dat is de maat die geluk van inzicht scheidt. In dezelfde geest staat er een Z-score naast je rendement, met het label erbij: significant, niet significant, of simpelweg "te weinig weddenschappen". Een tracker die je na twintig bets vertelt dat je een winnaar bent, is een tracker die liegt.
Het bankroll is een grootboek, geen getal. Stortingen en opnames staan als losse transacties met het saldo erna, zodat rendement en maximale terugval blijven kloppen op het moment dat je geld bijstort.
Het werkt op de telefoon met slecht bereik. Weddenschappen worden ingevoerd in het café en in het stadion, niet achter een bureau. Mutaties die niet weg kunnen, gaan in een wachtrij op het toestel zelf en worden later alsnog verstuurd.
Ontwerp & interface
Een donkere, dichte interface met winst in groen en verlies in rood — de enige plek waar kleur betekenis draagt, en overal ondersteund door het getal zelf, zodat de aflezing niet van kleur afhangt.
Op mobiel een balk onderin, op desktop een zijbalk: dezelfde routes, maar bereikbaar met de duim waar dat moet. Het dashboard opent met vier kerncijfers — netto resultaat, rendement, trefpercentage, gemiddelde quotering — en daaronder de kapitaalcurve en een kalender die per dag laat zien of er gespeeld is en wat het opleverde.
De uitgebreide statistieken staan bewust op een eigen pagina. Sharpe-ratio, standaarddeviatie, maximale terugval en CLV horen erbij, maar niet op het scherm waar je binnenkomt.
1,12
Need more bets
6,4 %
€ 20.100
+ 12,8
− € 940
0,42
1,83
+ 1,9 %
+ € 780
31 u
− € 112
Add Bet
Bet slip parsed. Review and save below.
Bet Details
2026-09-14
Single
Football
Premier League
Man City vs Arsenal
Match Winner
Man City
1.85
€ 25,00
Bet365
Bets
Man City
+ € 21,25
Over 2.5 goals
− € 15,00
Sinner to win
+ € 8,40
Lakers -4.5
Unsettled
Bouw & techniek
Next.js met de App Router; alles achter de login zit in een eigen routegroep met Supabase voor authenticatie, database en opslag. Rijbeveiliging staat in de database zelf aan, dus een gebruiker kan alleen zijn eigen weddenschappen opvragen — dat is een regel in Postgres en niet een controle in de frontend die je kunt omzeilen.
De vision-aanroep loopt via een Supabase Edge Function in plaats van vanuit de browser. Daardoor blijft de API-sleutel serverkant en kan een gebruiker hem niet uit de netwerkinspectie plukken.
Alle statistiek zit in één losse, pure module: winst, rendement, yield, trefpercentage, gemiddelde quotering, units, standaarddeviatie, Sharpe, kapitaalcurve, maximale terugval, Kelly, CLV, verwachte waarde, Z-score, gemiddelde houdtijd en de invloed van cashouts. Los van React, los van de database, dus per functie te controleren — wat nodig is, want dit is de rekenkern waar een gebruiker beslissingen op neemt.
Segmentatie werkt over elk veld van een weddenschap. Dezelfde functie levert je rendement per sport, per bookmaker of per markt, zonder dat daar per segment een query voor geschreven hoeft te worden. Import en export gaan via CSV, zodat je eigen data er ook weer uit kan.
Resultaat
Er staan ruim 7.000 gebruikers op het platform.
Dat is het enige cijfer dat we hier noemen. Wat mensen met hun eigen data doen weten we niet, en dat is ook niet aan ons: het product laat expres zien wanneer een reeks te kort is om iets uit te concluderen, en dan past het ons niet om over onze eigen cijfers wél grote uitspraken te doen.
