Inspiration

Everyone remembers being right. Nobody keeps the receipts on being wrong, because the wrong call quietly stops being a call you ever made.

There is a real number hiding in there. Of all the things you said you were ninety percent sure about, how often were you actually right? Most people have never checked. Foretold exists to show you your own number.

What it does

Write down what you think will happen. Attach a confidence percentage and a date it resolves. Lock it.

A locked prediction cannot be edited. That is the point. A forecast you can quietly revise is not a forecast.

When the date arrives the app asks you to grade it: right, wrong or void. Over time it builds your calibration curve: the gap between how sure you said you were and how often you were correct. Duels put two people's calls on the same question side by side and settle them together.

Locking is a moment. Hit Lock it in and the lock pops shut with a little wobble and a buzz, then "On the record." fades in. The intro's first slide plays the loop on its own: a call types itself, the confidence counts up, it seals.

Void is a real grade. Void is for a call that became unanswerable, and it stays out of your score. Grade ten and Calibration sets what you said next to what happened, band by band. Any call can be graded early, and if you allow notifications a reminder lands the day it resolves.

Duels stay sealed. Share a short code. Neither side sees the other's call until both are locked, then you each rule on the claim itself. Agree and it settles, disagree and it is a split.

Calls are receipts. Any call shares as a card with a LOCKED badge or a tilted RIGHT, WRONG or VOID stamp.

Free is a real app. Five open calls at a time, unlimited grading, free duels and the full calibration curve. Pro is one purchase, $7.99 in the US, no subscription: unlimited open calls, your full archive, calibration by category, streak details, your own categories, and JSON export and import. The offer shows once after the intro, then only when you tap something Pro unlocks.

How we built it

Expo SDK 54 and expo-router in TypeScript, built on Replit. Everything lives on the device through AsyncStorage: no account, no sign up, no server holding your predictions. Duels are the only part that puts anything you wrote on a server, and they run against a small Cloudflare Worker using an anonymous device UUID rather than an identity.

The calibration maths, the immutability rule and the export live in a pure library layer with no React in it, tested under vitest. That separation is deliberate: the rules that make the app honest are the ones that most need to be provable.

RevenueCat carries a lifetime unlock you buy once, not a subscription, because charging rent on your own prediction history felt wrong.

Challenges we ran into

Immutability sounds simple and is not. A locked prediction has to survive an app update, an export and an import, and a user who really wants to change it. Making the lock a property the tests assert on, rather than a disabled button, is what makes it mean anything.

Grading also has to stay honest about ambiguity. Plenty of predictions resolve to "sort of". The score only counts right and wrong, so there is a third grade, void, for a call that became unanswerable. It stays out of every number and does not count toward the ten you need to unlock Calibration.

Accomplishments that we are proud of

The app never sees a login, and the calls you lock on the Open tab never leave your phone. Only duels touch a server. It still delivers the one thing it promises: a number about you that you did not previously have.

What we learned

I think people will accept a harsh score if they trust the rules were fixed in advance. The same score, from a system that could have moved the goalposts, is worthless.

What is next for Foretold

  • Group duels, so a whole group can call the same question

Built With

Share this project:

Updates

Submission history