Inspiration We built MatchForecast because football predictions can be a bit of a black box. You see a tip online, but rarely know what it is based on, how confident it really is, or whether it was actually any good after the match. We wanted to make that experience clearer. Instead of pretending we can predict football with certainty, MatchForecast shows the probabilities behind a forecast and keeps a record of how predictions perform over time. What we built MatchForecast is a football prediction app for upcoming matches. Users can see a daily free pick, browse fixtures, follow teams and leagues, save matches, and look back at settled predictions. For people who want more detail, Premium adds things like fair odds, model context, and deeper forecast information. The main idea is simple: make predictions easier to follow without overselling them. How we built it The app is built with React, TypeScript, TanStack Start, Tailwind CSS, Supabase, and Stripe. We also used Capacitor so the app can be tested as a native Android or iOS app. The prediction side is a separate Python project. It looks at historical football data and creates pre-match signals using things like market odds, Elo ratings, goal patterns, and other match context. We test it in date order so it is not accidentally learning from future results. The engine sends predictions to MatchForecast through a secure API. The app validates the data before publishing it, records the forecast at that point in time, and later compares it with the real result. What we learned The biggest lesson was that prediction apps need to be honest about uncertainty. A prediction is not a promise, and a high confidence score does not mean a match is guaranteed. We also learned how much work happens behind the scenes. It was not just about building the interface or training a model. We needed to think about authentication, payments, data validation, access control, result settlement, backups, and making sure users only see the information they are entitled to see. Challenges we faced One of the harder parts was connecting the prediction engine to the app safely. We needed a way to publish forecasts without exposing secrets or allowing bad data into the app. Another challenge was making sure the prediction history stayed trustworthy. Once a user has seen a forecast, we keep a snapshot of what was shown at that time. That means performance results are based on the original forecast, not something edited later. We also had to work around the reality of football data: fixtures change, kickoff times are sometimes missing, data providers change formats, and some matches are postponed or abandoned. What’s next We want to keep improving the experience, add more coverage, and make local testing easier. Most importantly, we want the model to earn any future claims through proper testing rather than marketing hype.

Built With

Share this project:

Updates

Submission history