BetMyLife

Make your everyday life predictable, social, and fun.

Inspiration

We all set small goals like “wake up by 7” or “go to the gym three times this week”, then sometimes quietly give up on them. When you work on a goal by yourself, nobody really notices when you fail, and there is usually no one to celebrate with when you succeed.

At the same time, we noticed something that happens all the time in our group chats. Someone says, “I’m waking up at 6 tomorrow,” and everyone immediately responds, “No you’re not 😂.” People are already making predictions about whether their friends will follow through. We wanted to turn that teasing into something that could actually motivate people, while also helping them understand their own habits.

That became BetMyLife.

No real money is involved. BetMyLife only uses in-app points that cannot be cashed out.

What it does

  • Post a challenge in plain language, such as “Wake up by 7am on Saturday.”

  • Friends predict YES or NO and stake their in-app points.

  • An ML model estimates the chance that you will complete the goal and uses that probability to set dynamic odds, so predicting an unlikely outcome gives a higher reward.

  • Prove it using a photo, device data, or a simple check-in. Friends who predicted correctly earn points.

  • Compete with friends through a leaderboard, then use points to unlock profile cosmetics.

  • Habit DNA shows patterns in your behaviour, such as whether you are more consistent on weekdays than weekends. AI vs Friends also compares how well the AI predicts you against your friends.

How we built it

  • App: We used Expo and React Native with TypeScript and Expo Router, allowing us to run the app on iOS, Android, and the web.

  • Backend: We built the backend with FastAPI and TiDB Cloud. The full stack can also be run locally with Docker Compose.

  • Goal parsing: Users can describe a challenge naturally instead of filling out a form. Gemini converts the text into structured data such as the category, deadline, and target time. We constrained this with a 29-entry category dictionary and a JSON Schema, then validated the result in Python.

  • Odds model: We built a separate FastAPI service for the prediction system.

First, a logistic regression trained using public Fitbit and American Time Use Survey data gives us a general probability, \(g\), based on factors such as the goal category, day of the week, and target hour.

We then adjust that estimate using the user's own record of \(s\) successes in \(n\) attempts. We treat the general estimate as \(m = 5\) virtual attempts:

$$ p = \frac{s + m g}{n + m} $$

This gives new users a reasonable starting estimate, while allowing their own history to have more influence as they complete more challenges.

We also calculate weekday and weekend behaviour separately. For example, our demo persona Sora has an estimated 76% chance of completing a Tuesday wake-up challenge, but only 36% on Saturday.

We use fair odds with no house margin:

$$ \text{YES odds} = \frac{1}{p}, \qquad \text{NO odds} = \frac{1}{1 - p} $$

Challenges we ran into

  • Cold start: New users do not have any personal history yet. We solved this by using the population model as a prior, then gradually letting the user's own results take over.

  • Messy free text: People describe the same activity in different ways. For example, “gym”, “workout”, and “lift” should be related, but “walking” should not automatically be treated as a Fitbit step goal. Using a closed category dictionary and explicit matching rules helped keep the results predictable.

  • Time zones: At first, we calculated the day of the week in UTC. This caused problems where a Saturday morning challenge could be treated as Friday. We changed the system to calculate dates and weekdays using the user's local time.

  • Team merges: We were developing the frontend, backend, NLP, and ML components at the same time, which led to quite a few merge conflicts. We ended up defining shared schemas early and keeping matching versions in both Python and TypeScript.

Accomplishments that we're proud of

plain-English goal → LLM extraction → 🔮 ML predicts your future → 🎲 dynamic odds → friend predictions → proof → points → back into the ML

The heart of that cycle is machine learning that predicts what you will do next. Before you even attempt a challenge, the model estimates how likely you are to succeed.

That prediction becomes dynamic odds. Every goal is priced specifically for that person, that goal, and that day, so no two challenges have to pay the same. A reliable early riser waking up on a Tuesday might be an easy bet, while someone who rarely wakes up early taking on a Saturday 7am challenge could be a long shot worth backing.

That makes every prediction a real decision: do you trust the AI, or do you trust what you know about your friend?

When the challenge ends, the actual result is fed back into the model as new history. The next prediction — and the odds that come with it — can then become more personalised based on what actually happened.

Every challenge gives the model another piece of information about you, so the system gets better at predicting your habits over time.

https://canva.link/qzimqfe1e3yk5yu

Share this project:

Updates

Submission history