Inspiration

I've made financial decisions without understanding the tax consequences. Most people have. You get married, buy a house, start a side business, and then discover at filing time that your taxes changed by thousands of dollars. By then it's too late to do anything about it.

I looked for a tool that could answer a simple question: if I do X, how do my taxes change? Every tax tool I found was backward-looking. TurboTax, H&R Block, FreeTaxUSA - they all answer "what do I owe for last year." None of them answer "what happens next."

That gap is what TaxShift fills.

What it does

You pick one of six life events - getting married, having a baby, buying a home, moving states, starting a side business, or getting divorced. You enter a few numbers. TaxShift instantly shows you:

  • A before-and-after comparison of your estimated federal and state taxes
  • The exact dollar amount you'd save or owe
  • A visual breakdown of where the change comes from (bracket shifts, new credits, deduction changes)
  • A plain-English explanation of why it changed and what you can do about it

The tax engine uses exact 2025 IRS brackets updated for the One Big Beautiful Bill Act (OBBBA) - including the new $40,000 SALT cap, $2,200 Child Tax Credit, and updated standard deductions. It covers 24 states representing roughly 80% of the US population.

The AI insight panel is powered by Gemini, with a built-in fallback system that uses parameterized templates referencing your actual numbers. If the API is slow or unavailable, you still get a relevant, specific explanation. Judges will never see the seam.

How I built it

The entire app is a single-page React application. No backend, no database, no user accounts. All tax calculations run client-side in a custom JavaScript engine.

Tax engine first. I started by building the calculation layer: federal bracket math with exact 2025 thresholds, state tax models for 24 states (9 no-tax, 11 flat-rate, 4 progressive-bracket), Child Tax Credit with phaseout logic, self-employment tax, SALT-capped itemized deductions, and Head of Household triggers. Every number was verified against IRS publications and stress-tested with 83 automated assertions covering bracket boundaries, cross-event consistency, monotonicity checks, and edge cases.

Life event orchestrator. Each of the six events has its own before/after calculation function that composes the engine primitives. Marriage computes two single returns vs. one joint return. Baby triggers a single-to-HoH filing status switch. Home buying compares itemized vs. standard deduction. The orchestrator returns a structured result with the delta, breakdown, and contextual notes.

Design with intent. The UI uses an editorial financial aesthetic - Instrument Serif for headlines, JetBrains Mono for dollar amounts, DM Sans for body text. No purple gradients, no glassmorphism, no rounded-everything. The results section inverts to a dark background to make the reveal feel like a moment, not just more content. Colored category labels, SVG icons, and a credibility strip add visual identity without being decorative noise.

AI integration. The Gemini API call goes through a Vercel serverless function that constructs the full prompt server-side. The API key and system prompt never touch the browser. A fallback template system generates insights instantly using the calculation results, and the AI response replaces it asynchronously when it arrives.

Challenges

Getting the tax math right for the Tax track. Approximate numbers won't cut it when judges know the domain. I discovered mid-build that the OBBBA (signed July 2025) changed three critical figures: the SALT cap jumped from $10,000 to $40,000, the standard deduction increased to $15,750/$31,500/$23,625, and the Child Tax Credit rose to $2,200. If I'd shipped the old numbers, any tax-aware judge would have noticed immediately. I had to update every bracket, deduction, and credit across the entire engine and verify the math from scratch.

Head of Household logic. HoH isn't just a filing status - it's a triggered state change. Having a baby as a single filer should switch you to HoH (wider brackets, higher deduction). Getting divorced with custody should also trigger it. Missing this would understate the benefit for single parents by thousands of dollars. I had to trace through every life event and explicitly model where HoH kicks in.

Negative tax totals. Stress testing revealed that when the Child Tax Credit exceeds federal tax liability (like a $0-income filer having a baby), the engine produced negative totals. The non-refundable portion of the CTC can't reduce liability below zero. A one-line fix (clamping credits at liability) solved it, but I only caught it because of comprehensive stress tests - not manual testing.

What I learned

Tax code is more interesting than I expected. The marriage bonus/penalty isn't a bug - it's a structural consequence of how bracket widths interact with combined incomes. The 2025 MFJ brackets are exactly double the single brackets through the 32% tier, which means equal-income couples see almost zero marriage effect. The bonus only appears with unequal incomes. Building the simulator taught me more about how taxes actually work than years of filing them.

I also learned that scope discipline matters more than ambition. I've lost hackathons before by building too much. This time I picked six events, built them well, stress-tested them thoroughly, and spent the remaining time on presentation quality. The "What We Deliberately Don't Build" list in my project plan was the most important section.

What's next

  • All 50 states (currently 24)
  • Scenario comparison (side-by-side: "what if we marry in December vs. January?")
  • Multi-year projections for events with compounding effects
  • More life events: receiving an inheritance, going back to school, selling a home

Built With

Share this project:

Updates