Run the same salary through three different paycheck calculators and you'll get three different answers. None of them explain why. That bothered me enough to spend three weeks building an alternative.
The result is payculate.org — a paycheck calculator for all 50 US states and DC where every deduction line opens up and shows its own arithmetic.
The interesting problem wasn't the code
The tax math itself is straightforward: progressive brackets are a loop, FICA is two multiplications with a cap. I had a working federal calculator in an afternoon.
The hard part was that every state is a special case, and a generic model breaks on most of them:
- Wisconsin has a standard deduction that shrinks as you earn more — it starts at $13,230 and falls by 12 cents per dollar above a threshold, reaching zero around $126,000.
- Alabama lets you deduct your entire federal income tax before calculating state tax. The more federal tax you pay, the less Alabama income you have.
- Utah looks flat at 4.5%, but gives a taxpayer credit that phases out with income — so the effective rate climbs while the headline rate never moves.
- Ohio taxes nothing on the first $26,050, then a flat 2.75%.
- South Carolina rewrote its entire income tax in March 2026: six brackets became two (1.99% / 5.21%), and the federal standard deduction was replaced by a state-specific deduction that phases out above $40,000 of AGI.
That last one I only caught during a routine data check last week. Most calculators I checked are still showing the old six-bracket system.
The lines nobody counts
The bigger discovery was what national calculators leave out entirely: employee-paid state payroll premiums.
Washington charges no income tax at all. But Paid Family & Medical Leave (0.807%) and WA Cares (0.58%, uncapped) still take about $1,040 a year from a $75,000 salary. Most tools show $0 on that line.
California's SDI lost its wage cap in 2024 and now takes 1.3% of every dollar — on a $200,000 salary that's $2,600 that appears in no bracket table. Rhode Island's TDI, Oregon's paid leave, Maryland's county income tax (which can exceed $2,000/year) — same story.
These aren't rounding errors. They're the difference between a calculator being right and being confidently wrong.
The architecture
Deliberately boring:
- Static HTML/CSS/JS. No framework, no build step at runtime, no backend, no database.
- A Python generator holds the tax data as plain dicts and emits 51 pages from one template.
- The calculator engine is ~200 lines of vanilla JS shared across every page.
- Everything runs client-side, so no salary data ever leaves the browser — nothing to store, nothing to leak, nothing to put in a privacy policy beyond "we can't see it."
- Deployed free on Cloudflare. Total cost to date: $11 for the domain.
The one thing I'd defend hardest: I wrote an independent Python implementation of the same math and diffed it against the JS on every state before shipping. For a financial tool, "it looks right" isn't a test. Getting Missouri's eight-bracket ladder to match the published figure to the dollar was the moment I trusted the engine.
What I got wrong
CSS specificity ate three debugging sessions. A .money input { padding-left: 38px } rule was silently overridden by a later input[type=number] { padding: 11px 12px } shorthand. I kept increasing the number instead of checking whether the rule applied at all.
Browser form restore. Chrome repopulates number inputs on reload without firing an event, so the visible input and the rendered results could disagree. Fixed with autocomplete="off" plus a pageshow listener that recalculates.
I assumed data was static. It isn't. Five states changed rates on January 1, 2026, and South Carolina restructured mid-year. A tax site is not a project you finish; it's one you maintain.
Where it stands
Three weeks live: indexed, appearing for ~25 queries, average position around 50 — which is page 5, so impressions but no clicks yet. The content and technical work is done. What's missing is authority, which is a slower problem than any of the code.
Happy to answer questions about the tax data or the architecture. And if you're in the US and your paystub disagrees with my numbers, please tell me — a correction from a real paystub is the single most useful thing I can receive.
Top comments (0)