Inspiration
Moving countries for work is one of the biggest decisions a person can make. It reshapes where you live, how you build a career, whether your partner can work, and whether you can stay long enough to call the place home.
And yet, when you start researching it, you end up buried.
Buried under Reddit threads full of contradictory experiences. Buried under salary comparisons that ignore taxes, cost of living, and the fact that your visa might depend on a lottery you have a 30% chance of winning. Buried under vague advice like "it depends" or "you should be fine" from people whose citizenship, degree, and timeline are nothing like yours.
What's missing is not more information. It's the right picture, grounded in real data, built around your specific situation.
That's why we built tradeoff.
Not a tool that sells you the dream of one country over another. Not a tool that picks a winner. But a tool that gives you an honest, clear picture of what each path actually looks like — what you gain, what you give up, and what matters most to you.
Because the decision is yours. We just think you deserve real data to make it.
What it does
tradeoff helps international students and recent graduates compare two countries for building their career.
A user enters:
- Their citizenship
- Degree field
- Career stage
- Two destination countries
- What matters most to them, such as residency stability, salary, employer flexibility, or partner work rights
The app then produces an immigration-aware comparison covering:
- Likely visa route
- Employer sponsorship dependency
- Lottery exposure
- Ability to switch employers
- Partner work rights
- Path to permanent residency
- Wage and cost-of-living context
- Tax-adjusted take-home
- Immigration policy outlook
- A “sacrifice map” showing where each country is stronger or weaker
The output is deliberately framed as tradeoffs, not a recommendation. The app never says “choose Country A.” It shows what each path costs, what it protects, and what the user should verify next.
How we built it
We built tradeoff as a FastAPI + React application with a structured AI pipeline behind it.
The backend is written in Python, using FastAPI, Pydantic v2, and the Gemini SDK. The frontend uses React, TypeScript, Vite, and Tailwind CSS.
The key architectural decision was separating hard facts from soft reasoning.
Hard facts, like wages, tax rates, salary floors, PR timelines, lottery history, and partner work rights, come from live APIs or curated cited JSON files. The LLM is not allowed to invent them.
Soft reasoning, like route interpretation, policy climate, and tradeoff framing, is handled by Gemini, but every output is checked before it reaches the dashboard.
Our pipeline has four LLM calls total:
| Stage | Type | What it does |
|---|---|---|
| 1. Intake | Deterministic | Validates the user profile and rejects unsupported countries before AI runs |
| 2. Route + outlook research | AI, one call per country | Uses Gemini with Google Search grounding to research immigration route and policy climate |
| 3. Route + outlook structuring | AI, no search | Converts research into strict JSON with citations pinned to approved sources |
| 4. Fact assembly | Deterministic | Pulls wage, cost-of-living, tax, and curated visa facts |
| 5. What-if reasoning | AI | Generates seven structured tradeoff insights |
| 6. Validation | Deterministic | Checks every AI insight against source data and user context |
| 7. Dashboard | Deterministic | Renders sacrifice map, visa panels, insights, caveats, and human-decision boundary |
For the sacrifice map, we compute dimensions like take-home pay, cost of living, PR timeline, lottery risk, partner opportunity, and visa stability. One simplified version of the visa stability score is:
[ \text{visa stability} = \frac{\max(0,\ \text{base} - \text{trend penalty} - \text{lottery penalty})}{2.5} ]
That score combines deterministic visa facts with a grounded immigration trend signal, while still exposing uncertainty to the user.
Our data sources include:
- OECD wage and PPP data
- BLS occupation wage data for the US
- World Bank price-level and exchange-rate data
- WhereNext cost-of-living fallback data
- Curated visa rules with cited official sources
- Curated tax brackets
- An approved official-source registry for immigration citations
We deliberately avoided LangChain, MCP, and a database because the project did not need them. Every dependency had to justify its surface area.
Challenges we ran into
One major challenge was grounding leakage across countries. Our first version made one combined AI research call for both countries. We discovered that the model could spend its entire search budget on the first country, then answer the second from memory while still sounding confident. We only caught this by inspecting grounding metadata, not by reading the prose. The fix was to run one grounded research call per country.
Another challenge was that search and structured output did not work reliably in the same call. Gemini with Google Search grounding was useful for research, but strict JSON schema output was more reliable without search. So we split the task into two steps: grounded raw research first, then schema-enforced structuring.
We also had to fight fabricated citations. The model sometimes produced plausible-looking URLs that were not actually approved sources. We fixed this by pinning citation fields to an approved registry and then verifying them deterministically against the grounding metadata.
The hardest product challenge was keeping the human truly in the loop. It is easy to say “AI does not decide,” but harder to enforce. We added a persistent human-boundary banner, made every insight tradeoff-native, and required each insight to end with a concrete “verify this next” action instead of a recommendation.
Accomplishments that we're proud of
We are proud that tradeoff does not treat immigration as generic advice. It models the decision citizenship-by-citizenship, which is where the real complexity lives.
We are also proud of the responsible AI design. The model can propose, but deterministic code decides whether its output is trustworthy enough to show. If an insight fails validation, it is replaced with a visible safe fallback instead of being silently hidden.
The system validates AI output with rules such as:
- The cited fact must exist in the correct country bundle
- The insight must quote or match the user’s stated priorities
- The tradeoff must connect both countries where required
- The conclusion cannot be boilerplate
- The next action must be specific and imperative
- The scenario type must be allowed
We are especially proud of the “sacrifice map” framing. Instead of ranking countries as winners and losers, it shows where each path is stronger and what the user may be giving up.
What we learned
We learned that an LLM should be treated like an unreliable narrator when the stakes are high. It can be useful for interpretation and synthesis, but it should not be trusted as the source of hard facts.
We also learned that grounding is not automatic. A model can sound grounded while only partially using search. The real lesson was to measure what the model actually retrieved, not just what it claimed.
Another lesson was that responsible AI is not just a disclaimer. It has to be built into the pipeline: typed inputs, source registries, deterministic validators, confidence downgrades, visible fallbacks, and a clear human-decision boundary.
Finally, we learned that uncertainty is part of the product. Wage and cost-of-living data are not always available at the same granularity across countries, so the dashboard surfaces confidence levels and precision caveats rather than pretending the comparison is more exact than it is.
What's next for tradeoff
Next, we want to expand tradeoff beyond the six supported destinations: the US, UK, Canada, Australia, Germany, and France.
We also want to add more personalized scenarios, such as:
- “What if I lose my job after one year?”
- “What if my partner needs work authorization?”
- “What if I want to switch employers?”
- “What if permanent residency takes longer than expected?”
We would also like to improve the dashboard with a clearer action-plan section, caching for repeated comparisons, more frontend tests, and broader coverage of immigration routes.
Longer term, tradeoff could become a planning tool for international students before they graduate: not just comparing countries after an offer, but helping them understand which paths are realistic before they invest years of study, money, and effort into a destination.
Built With
- bls
- fastapi
- google-genai
- html
- javascript
- json
- oecd
- pydantic
- python
- react
- render
- tailwind
- typescript
- uvicorn
- vercel
- vite
- wherenext
- worldbank
Log in or sign up for Devpost to join the conversation.