Inspiration
When looking at the prompt, we realized that wanted to solve a real problem that each of us faced when watching live sports: the substantial and frankly unwanted time consumption. With the various timeouts, halftimes, and pauses this isn't just our problem, it is everyone's . But there's a solution already right? We already have access to highlights that get posted right after the game which should be enough. But this doesn't capture the magic; this stress of a tense situation or a close game without any news or spoilers to ruin the fun. The truth is, any live sports viewer knows the joy of such a situation but time is still an issue. Also, NBA live viewership is dangerously going down and highlights are watched much more frequently, so there is a pressing need to build engagement within an every-busy audience. So our solution was to determine if it was possible to watch such highlights before they happened.
What it does
Obviously, all highlights are random, correct? How could there be a way to predict them BEFORE they happen. We trained an ML model using 23 factors considering details like like ball possession, point margin, time left per quarter, star player impact, etc. By training it on a number of simulations, it established its own unique ratings for these different factors and combined them into an index then set the index threshold to match the average number of highlights per game.
How we built it
We built Wontan's frontend as a Typescript Next.js app using both App router and Tailwind CSS. We had gotten the original layout through Vercel's v0 app, then customized it into a multi-page website and interaction flow that explains how Wotan works, what games are live, and the probably of a highlight worthy shot. For backend, we used Python to blend together both live game API and a custom trained ML model. The model takes in play-by-play and box score data from sportsdata.io and sportradar along with previous context in the game to predict the highlight-likelihood predictions through rest endpoints.
Challenges we ran into
We ran into many challenges with the api implementation. Even though we had real time access to live scores, line-up changes, and game updates there was a large cooldown between API calls. We solved this by making the best possible insight based on the data currently retrieved, and also implementing another API to retrieve the same data to reduce the impact of the cooldowns.
Accomplishments that we're proud of
We are proud that we were actually able to test our model on a live game as we had little time till the latest sports event of the day (11:30 PM).
What we learned
We learned about the difficulty in training a model and its near impossibility in a short time period which really hindered our model's scrutiny. On the bright side, we learned how to take a fuzzy product idea (“tell me when a game is about to get exciting”) and turn it into an fully-fleshed system with clear data contracts between a Next.js frontend and a prediction API backend. -On the frontend side, we realized how powerful TypeScript + mock data are for making a UX look good early. -On the backend side, we learned how messy live sports data is in practice, how hard it is to encode lineup context and injuries into usable features, and how to balance model complexity with latency so our “Next Moment Score” is both meaningful and fast enough to feel live. -Complexity was actually the hardest part, because we had such little time it was hard to decide what factors our ML model should consider when indexing because some of these just would not work with the limited data we were able to parse.
What's next for Wotan
The future of Wotan is the best part. We started with basketball so we could access the closest live sport event to demo, however this method can be applied to many other sports. For example, in tennis there can be player profiles (based on their favorite shots, style of serves, etc), real time fatigue measurement, etc. There are limitless categories to implement because the more data the better the estimate!

Log in or sign up for Devpost to join the conversation.