Fork - Devpost submission copy

Inspiration

A friend called me last year, stuck. Two job offers - one in his city, one a flight away for more money. He'd been doing napkin math for a week. "I just can't tell if the bigger number is actually bigger," he said, "after rent, after taxes, after… life."

I opened a cost-of-living calculator with him. It told us one city was "1.8× more expensive." Neither of us believed it. It folded his entire life into a single multiplier and asked him to bet six figures on it. So he did what almost everyone does at a real fork: he decided by gut.

That stuck with me. We've made deciding cheaper than ever - you can ask an AI to weigh anything in seconds. But the decisions that actually reshape a life, the ones with rent and taxes and a family attached, are exactly the ones a chat answer can't hold. I wanted to build the opposite of a calculator. Not a number you're handed and told to trust - a future you can live in before you commit to it.

What it does

You tell Fork your decision in one sentence - typed or spoken. "Bangalore at 25 lakh vs Hyderabad at 18 lakh - which fork?" or "I might move from Toronto to Austin for a job paying $140k." That's the whole input.

Fork builds both futures. Two little lives, side by side - a character in an apartment in each city, with real 2025 tax for the United States, Canada, and India (federal + state/province, FICA/CPP/EI, India's new regime), market rent, and living costs broken out as honest, separate lines instead of one mystery multiplier.

Before the sim starts, Fork asks who's deciding - solo, couple, or family - and what you value most. That shapes the forks you'll face: a single professional gets different dilemmas than a family weighing school districts and childcare.

Then you press play, and three years unfold month by month. Payday lands. Rent leaves. A savings balance ticks up; a runway meter shows how many months you could survive if the income stopped. And life happens - at real forks, the simulation pauses and asks you to choose: the good school district or the cheaper neighborhood, finance the car or go without, take the raise with longer hours or protect your time. The same fork plays differently in each city - a car repair is a speed bump in one life and a crisis in the other.

You can stress-test it - "what if I lose my job in year 2?" - and watch which life survives. You can scrub to any month and open a full transaction ledger: exactly which decision is still costing you (e.g. the nanny choice at month 5 still showing up at month 24), which line items came from stress, and how the balance moved. And at the end, Fork doesn't just say "City A wins." It weighs both paths against what you told it you value - security, lifestyle, growth, family - and gives you an honest read, even when that read is "this one's genuinely close."

You can share the decision - a card and link for a partner: "here's why I'm leaning Austin." It's not advice. It's a way to feel the consequences before they're real.

How I built it

Fork is a real Next.js app - TypeScript, Tailwind, Motion for animation - built as a platform, not a one-off.

The trust core came first. I built and cross-checked tax engines for the US, Canada, and India against published take-home calculators before I wrote a line of UI, because a single wrong tax figure would poison the whole thing. Live rent comes from the RentCast API for US cities (cached, with a 2025 market snapshot fallback); Canada and India use sourced metro snapshots you can override inline - so the app never breaks in a demo, even without API keys.

On top of that sits a deterministic simulation engine that steps a life forward month by month, shaped by the player's household, their values, their decisions, seeded micro-events, and any stress they throw at it. Every month's math is captured as an auditable ledger line - income, rent, groceries, decision-driven costs, interest, savings - with tags back to the fork that caused them.

The visible world - the isometric apartments, the character, the cities - is a set of cohesive 3D-style assets I art-directed and generated to a single locked style, then composited with a live, animated data layer.

Groq (Llama 3.3 70B) is the intelligence, used deliberately as an ingredient, not the product. It parses your one sentence into a structured decision (including Indian lakh/L notation), turns a "what if" worry into a real simulation shock, and narrates your verdict in plain language tuned to your values. Crucially, it never touches the math - every dollar is computed deterministically and sourced. Voice input runs on the browser's native Web Speech API, so speaking your decision costs nothing and uploads nothing.

I instrumented the deployed app with Novus to see where real people actually drop off.

Challenges I ran into

Earning trust on the numbers. Tax across three countries is a thicket - blended brackets, provincial surtaxes, FICA caps, India's new regime. I cross-checked US and Canada against published calculators and surfaced the source of every number in the app, because the entire point is to be the calculator people don't distrust.

Keeping the AI honest. An LLM will happily invent a plausible tax figure. I had to architect Fork so the model only ever interprets and narrates - the moment a number is involved, control hands back to the deterministic engine.

Cohesion in the art. Generating a set of assets that share one light source, palette, and style is far harder than generating one good image. A mismatched apartment broke the whole illusion. It took disciplined, anchored prompting to get a world that feels like one place.

The deepest one - unpredictable, yet reproducible. Real life is random; a decision tool can't be. If you run the same scenario twice and get two different verdicts, you stop trusting it. I solved this with seeded variety: a rich pool of life events, deterministically chosen from your profile - so every playthrough surfaces different life, but the same inputs always replay identically.

Making outcomes auditable without killing the game. The month ledger had to feel like a bank statement you trust, not a spreadsheet you dread - collapsed by default, one month at a time, with decision attribution in plain language.

Accomplishments that I'm proud of

I went deep instead of wide. Three countries with honest tax and cost lines - US, Canada, and India - not ten done shakily. A simulation you can actually live in, with a character whose mood shifts as the runway thins. Household-aware story forks that change with who's deciding. A month-by-month ledger that makes every outcome auditable - scrub to month 24 and see exactly which choice at month 5 is still on your statement. A shareable decision artifact for the conversation that actually matters. And a verdict that speaks to what a person values instead of just shouting the bigger number. It stopped being a calculator and became a decision tool.

What I learned

Two things I'll keep.

Trust comes from transparency, not precision. I spent ages chasing exact figures, but what actually earns belief is showing your work - the source of every number, and the honesty to say "this is an estimate, adjust it to your life."

"Feels real" is cohesion plus a real engine - not fidelity. The world doesn't feel alive because the art is detailed. It feels alive because every asset shares one style and a genuine simulation runs underneath. Realism is a system, not a polish pass.

What's next for Fork

  • Dual-income couple mode - model both partners' careers, not one salary and a household multiplier.
  • Come back and log what happened - close the loop when someone actually moves or takes the offer, so Fork learns and calibration improves over time.
  • More countries as modules - the architecture is built for it (one countries/ module per market); UK and EU next.
  • Aggregate insight - anonymized patterns like "families who chose the smaller city for school quality saved more but reported tighter runway" - Fork gets wiser every time someone lives a decision in it.

Built With

  • groq
  • llama-3.3-70b
  • motion
  • nextjs
  • novus
  • react
  • rentcast-api
  • tailwindcss
  • typescript
  • vercel
  • web-audio-api
  • web-speech-api
Share this project:

Updates