All projects

The Tiebreaker

A decision tool that refuses to just agree with you. Submit a dilemma and it returns a weighted comparison matrix, a SWOT, a 10-10-10 analysis and a verdict with a confidence score — then argues against its own recommendation.

1 / 7

What it is

You give The Tiebreaker a real dilemma — a career move, an architecture choice, a financial decision — and it runs a structured evaluation instead of a conversation:

  • Dynamic weighted pros and cons, scored +1 to +5 and −1 to −5, recalculating live as you add or adjust points
  • A multi-factor criteria matrix comparing every option across weighted criteria like financial ROI, reversibility, effort and peace of mind
  • A SWOT quadrant separating internal strengths and weaknesses from external opportunities and threats
  • A verdict: a recommended option, a confidence score, an executive rationale, and the single decisive factor that tipped it

The part that makes it useful

Anything that gives you a recommendation is also giving you a way to stop thinking. So 3 features exist specifically to make the verdict harder to accept uncritically:

The Devil’s Advocate. After the recommendation, the system argues against its own winner. Not a disclaimer — an actual case for the other option, aimed squarely at confirmation bias.

The 10-10-10 rule. Every option is evaluated at 3 time horizons: how you will feel in 10 minutes, in 10 months, and in 10 years. Most bad decisions are made by weighting one of those three at the expense of the others, and seeing them side by side makes the trade explicit.

The blind spot detector. Surfaces assumptions the user has made without stating them, and risks neither option accounts for.

There is also a what-if stress test — simulate a budget cut, a black swan, a life pivot — to see whether the recommendation survives conditions the user did not consider.

Why structured output mattered more than the prompt

A tool like this fails in a specific way: the model returns something shaped slightly differently each time, the UI half-renders it, and the user loses confidence in the analysis rather than the plumbing.

Using Gemini’s responseSchema with responseMimeType: "application/json" enforces a type-safe contract on every response. The matrix always has the same fields; the SWOT always has 4 quadrants; the verdict always has a confidence number. Parsing bugs and shape drift both disappear, and the UI can be written against a guarantee instead of a hope.

Staying up through rate limits

The backend routes through a model cascade — a fast lite model first, then a stronger one, then a stable alias — with backoff logic, so a 503 or a rate limit during a traffic spike rotates rather than fails. A decision tool that is unavailable when you are stuck is not a decision tool.

Stack

React 19 and Express with Vite middleware in development and esbuild bundling for production. @google/genai with strict structured outputs. Tailwind for the interface. Local history persistence and one-click markdown export, so a decision can be shared or filed rather than trapped in a browser tab.

What I learned

An opinionated framework beats a general assistant. The value is not that a model can discuss your dilemma — it is that SWOT, 10-10-10 and a weighted matrix turn unstructured anxiety into something with shape. The frameworks are the product; the model is the engine.

Build the counter-argument into the output. A confident recommendation is persuasive whether or not it is right. The Devil’s Advocate is there because I did not trust the verdict, and neither should the user.

Schema enforcement is a UX feature. Every parsing failure the user never sees is a moment they do not spend wondering whether the tool works.