Ffomo
F the FOMO. See how a 9–5 and a business of your own turned out for people who already chose. Then you decide.
💡 Inspiration
Someone is stuck on a sentence they can actually say out loud: so I am stuck on whether I should do a 9–5 job or start my own business. A chatbot will answer that in one breath. It will usually agree with whichever way the sentence leans, and it will leave out the dull fact that shows up later. In this case the dull facts are on irs.gov. Net self-employment earnings of $400 or more mean Schedule SE and self-employment tax. Estimated tax is generally due quarterly. A payroll job already withholds Social Security and Medicare. None of that is a personality test. All of it changes the month after you quit.
The regret people actually describe is not "I picked the wrong life in the abstract." It is a detail they met after the choice. One post in this run wished they had known how to make the full-time job work before quitting to start a company. Another, eight years into a business, would not go back. Both can be true. A single verdict throws one of them away.
The research lines up with that mess. Maximizers report more regret than satisficers (Schwartz et al., 2002). Leaving the door open makes the choice feel worse, not freer (Gilbert and Ebert, 2002). People overestimate how long a feeling lasts (Wilson and Gilbert, 2005). Models tend to agree with what the user already seems to believe (Anthropic, 2023).
Ffomo does not pick the job or the company. It puts the later posts on one screen, checks the facts those posts cannot know, and stays for the week after.
🧭 What it does
One session, in their words. This is the 9–5 run from end to end.
| 🧩 Step | What the screen asks | What this run showed |
|---|---|---|
| Say it | The decision, typed or spoken. A photo is optional, and it is a photo of the thing, not a face. | "so i am stuck on whether i should do a 9–5 job or start my own business." |
| How big | Small or big. Easy or hard to undo. "Anxiety makes everything feel big. Answer the decision, not the feeling." | Big, and not a shirt. |
| Questions | A few questions in the language of that fork. Skip is allowed. | No job offer. A window of a few months. Missing piece: not knowing if the business will work. |
| Both paths | The fork, named back. Here, "9–5 job" or "Start my own business." | Search runs on both. Stories arrive as they check out. |
| Check first | Spec pages only, each with the link. Then: does a real limit rule one path out? Is the thing you were afraid of missing already in hand? | IRS on self-employment tax. Deel on payroll benefits. Three things the posts will not tell you. |
| The meter | Raw count and strength on each side. "What these posters reported. Not your odds." | 16 posts. The two sides do not agree. |
| Must-haves | Three lines. Good enough beats perfect. | Good money. Peace. Happiness. |
| Future you | A week, a year, five years, written only from the posts on screen. A photo is a separate ask. | A year into the 9–5: paycheck, benefits, time off, and the laptop actually closing. |
| Your call | Both columns stay up. They tap the one they are keeping. | They kept the 9–5. |
| Your reasons | What they are telling themselves, how loud it is from 0 to 100, what supports it, what complicates it, the downside, and the last day they can still switch. | Growth, against stress and time. Look again if they regret it. |
| Home | The card, what is still unknown, and one check: did you do the next thing? | Yes, not yet, or partly. Then how loud it is now. |
There is no face camera and no coin. The read of the gut is a number they type, and a sentence in their own words. That sentence is what comes back if the worry returns.
📊 The 9–5, counted
Sixteen posts, link-checked, from people who had already chosen. A first-week post is the highlight reel, so time has a weight, and the weight sits next to the count.
$$ \text{strength}(m)= \begin{cases} 1 & m<1\text{ month, or unknown}\ 2 & 1\le m<12\text{ months}\ 3 & m\ge 12\text{ months} \end{cases} $$
| 🟢 Path | Wrote later | Glad | Regret | Mixed | Strength | What people reported |
|---|---|---|---|---|---|---|
| 9–5 job | 5 | 4 | 0 | 1 | 11 | Most were glad |
| Start my own business | 11 | 6 | 2 | 3 | 29 | They do not agree |
The business side is longer and louder. The job side is smaller and calmer. Ffomo does not add those into a winner. Under the bars: people who felt fine often do not post.
One wish the posts supported, with the link still on it: they wished they had known how to make the full-time job work before quitting to start a startup.
Three things the posts will not tell you, and the screen says so:
- Which path fits your risk tolerance
- Whether this particular business can support you
- How much monthly spending pressure you are under
🔬 How we built it
One Next.js app on Vercel. TypeScript, Tailwind, shadcn restyled to a dark purple field, white type, and one pink button. The session is a short exchange. Ffomo asks one thing. The person answers with a tap or a sentence.
| Piece | Job |
|---|---|
| 🟦 Gemini Flash | One grounded call names the two paths, writes the questions in their words, and returns firsthand posts |
| 🔎 Google Search | The posts, and a second pass for spec pages only |
| ✅ Link check | Every URL is fetched. A page that does not open is dropped |
| 📐 Zod | One JSON schema. The phone streams a line at a time while the search is still running |
| 🪪 Clerk | Sign-in |
| 🗄️ MongoDB | The decision can be opened again. The reasons and the check-in live with it |
Story strength is hand-set. It is not a model score.
SETTLE, the loudness number 📐
The model behind "how loud is it" is SETTLE, from A Kiss, Not an Assay. A kiss is not a lab assay. You do not wire a face to decide a career. You name the worry, you show the later posts, and you let the person say how loud it still is.
Classic choice theory maximizes expected value. The term that actually ambushes people is discovered regret, the fact you only meet after you commit:
$$ i^\star=\arg\max_i\big[R(i)-D(i)\big] $$
(R(i)) is how path (i) turned out. (D(i)) is the regret found later. Quarterly estimated tax is a (D(i)). So is "I could have fixed the job before I quit."
Four signals set the alarm. Threat (T), volatility (V), stress (S), and control (C). The weights are design constants from the paper. They are not a fit, and they are not a scan.
$$ A=\operatorname{clamp}_{0}^{100}\big(0.48\,T+0.16\,V+0.20\,S+0.16\,(100-C)\big) $$
Control lowers the alarm. Naming the fear, writing three must-haves, and writing the reason are control. Refreshing the same search is volatility.
| Alarm (A) | Band |
|---|---|
| (A\ge 55) | 🔴 loud |
| (32\le A<55) | 🟡 restless |
| (A<32) | 🟢 quiet |
People overestimate how long the feeling lasts, so the same alarm is drawn forward under two doors. Closed, or still open. The horizons are now, one week, one month, and six months.
$$ \mathbf{m}{\text{closed}}=\langle 1,\ 0.62,\ 0.38,\ 0.18\rangle \qquad \mathbf{m}{\text{open}}=\langle 1,\ 0.90,\ 0.78,\ 0.64\rangle $$
At (A=52), which is restless, just under loud:
| Horizon | 🔒 Door closed | 🚪 Door open |
|---|---|---|
| Now | 52 | 52 |
| 1 week | 32 | 47 |
| 1 month | 20 | 41 |
| 6 months | 9 | 33 |
On this run they left the last day to switch on None, and they wrote the condition that would reopen it: if they regret it. The screen keeps that sentence. It does not pretend the feeling has already faded.
The policy that sits on top of the number is ordered. A binding fact goes first. A wide, real gap in later gladness can speak. Three must-haves can call a path good enough. If none of that settles it, the person commits and the search stops.
| Treatment | When it fires |
|---|---|
🧾 FACT |
A real limit is still unchecked, or it rules one path out |
🔁 RECONSIDER |
Later posts point the other way, and leaving is cheap |
✅ GOOD-ENOUGH |
One path meets all three must-haves |
📊 EVIDENCE |
The glad-rate gap is wide, and both sides have enough posts |
🪙 COMMITMENT |
There is no best. Keep one, and write why |
On the 9–5 run the sides do not agree, the must-haves were still being checked, and the person tapped the job anyway. The card records that. It does not correct them.
Future you is the same rule in pictures. "From the posts on screen. Not a prediction." Each beat points at a post. A photo is off until they add one, and the screen says it is sent to Google to draw both paths. Funny is fine. Mean is not.
🎓 What we learned
- A career fork is a fact problem wearing a feeling. The useful first screen was not advice. It was Schedule SE, quarterly estimates, and the benefits a payroll job already includes.
- More posts is not a winner. Eleven later posts on the business, strength 29, still included regret and mixed. Five later posts on the job, strength 11, were mostly glad. Both stayed up.
- The gut is a sentence, not a sensor. "How loud is it" from 0 to 100, plus "look again if I regret it," told us more than a face would have, and it is what the card can show them when they come back.
- Thin is allowed. If a search comes back short, the count on screen is the count we found. We do not backfill a prettier life.
🧗 Challenges
- Firsthand, and later. The useful post is a choice plus a result after some time. Launch-day excitement does not count the same, and a URL that fails to open is dropped even when the paragraph was good.
- Facts that are not stories. The IRS pages and the benefit page had to be a separate grounded pass, shown before the feelings, with the link on the card. No page means the line says unchecked.
- The camera was the wrong mirror. An earlier build read a smile on the phone. A person can change their face in a second, and a career is not a flinch. The final session asks how loud it is, what supports the choice, what complicates it, and what would make them look again.
- Future you drifting into fiction. Every caption has to trace to a post already on the page. The year-in line about the paycheck and the closed laptop is that kind of line. A generated picture never outranks it.
- The door. Closing it for a night, a week, or 30 days has to feel reversible. One sentence unlocks it. On this run they left it open on purpose, and named the condition.
Sixteen people already lived the two paths. The 9–5 was mostly glad. The business was longer, and mixed. The call was still theirs. 🫀
Built With
- clerk
- elevenlabs
- emotiefflib
- google-gemini
- lucide
- mediapipe
- mongodb
- motion
- onnx
- onnxruntime-web
- react
- shadcn-ui
- smartspectra
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.