Optiqo

Changelog

What we shipped, what changed in the data, what we fixed. Public-facing items only — the internal dev log lives in the repo. Newest first.

2026

  1. Feature

    The biggest lever was switched off — and the plan is now CHF 89

    A pension-fund buy-in is the largest lever in Swiss personal tax: at CHF 180'000 in Zürich, putting CHF 50'000 in saves CHF 15'955 in that year alone. Optiqo was showing it as not applicable to almost everyone, because the only way to know your capacity is the “maximal möglicher Einkauf” figure on your annual pension certificate, and we never asked for it — our own estimate models the statutory minimum, which for most people in a decent plan is far below what they could actually pay in. There is now a field for it in the calculator, and supplying it lights the lever exactly. The calculator and the plan page also now agree on what is free: every lever that applies to you and what each is worth, stated up front. What the plan adds is how much to put into each, in what order, and by which deadline. That change, and the depth behind it, is why the one-time plan is now CHF 89 rather than CHF 49 — a fiduciary charges CHF 400–900 to plan a single buy-in. Anyone who already bought at CHF 49 keeps everything, forever, at the price they paid.

  2. Fix

    Pages for merged communes now forward instead of 404ing

    Swiss communes merge most Januaries. When we refreshed to 2026 tax data, the fourteen communes that merged away lost their pages — so a link or search result for, say, Astano in Ticino led to a dead end. Those now forward to whichever commune absorbed them (Astano to Lema, Villnachern to Brugg, and so on), in all four languages. Moutier, which moved from Bern to Jura at the start of 2026, forwards to its new canton. We also fixed the 404 page itself, which was throwing errors in the browser instead of rendering — you now get a proper page with somewhere useful to go.

  3. Feature

    The calculator is now a live simulator

    No more filling in a form and pressing a button. /calculator recomputes as you type and as you drag: a tax curve showing where you sit and how steep the next franc is, sliders for your 3a contribution and pillar-2 buy-in that move the bill in real time, the same income across all 26 cantons (click one to switch), and the cheapest communes in your canton. There's a panel for the three things we can't know about you — your pillar-2 salary deduction, other income, and any deductions you itemise — and one that spells out exactly what the estimate assumes. Six one-click scenarios if you'd rather just look around, and the full state lives in the URL so you can share a simulation.

  4. Fix

    Married lump-sum withdrawals were quoted the single tariff

    Our capture of the federal tax administration's capital-withdrawal tables sent the marital-status field in a format their API accepts but silently ignores, defaulting everyone to the single tariff. Married users therefore saw too much tax on every lump-sum figure — 10–30 % too much depending on canton; a CHF 750,000 withdrawal in Zürich read CHF 71,006 where the correct figure is CHF 89,227. The tables have been recaptured and every number now matches the official calculator exactly. Single-status figures were never affected. Separately, married households in Valais were shown communal tax about 25 % too high, because Valais grants its marital relief after the communal multiplier in a way our capture missed.

  5. Data

    Sharper gross-to-taxable model: ALV ceiling, self-employed rates, pension deductions

    Four corrections to the step between your gross salary and your taxable income. Unemployment-insurance contributions now stop at the CHF 148,200 ceiling instead of applying to your whole salary (which had understated tax at high incomes by up to CHF 1,147), and the ceiling applies per earner, so a couple gets two of them. Dividends, rent and pensions no longer generate a social-contribution deduction, because they don't attract one. Self-employed users get their own AHV scale — 5.371 % to 10 % on the published sliding scale, and no unemployment contribution, which they don't pay. And 3a contributions and pillar-2 buy-ins now come off taxable income in full, as the law provides, which had been understating every deduction's saving by 6–10 %.

  6. Fix

    Valais communes now match the federal calculator exactly

    Valais is the one canton where each commune adds its own indexation on top of the cantonal coefficient, so the published multiplier doesn't describe what you actually pay — and the effect changes with your income and whether you're married. In Leukerbad, for instance, the effective rate swings between 149 and 177 depending on both. We were applying a single flat rate per commune, which left us a few per cent out on income tax and up to 12 % out on lump-sum withdrawals everywhere except Sion. Each affected commune now carries a rate curve instead of a single number. Checked against the federal calculator across 30 Valais communes: income tax within 0.19 %, lump-sum exact.

  7. Data

    Now computing 2026 tax, not 2025

    We were quoting last year's tariffs under a 2026 heading. Everything the calculator uses — the cantonal and federal scales, all 2,110 commune multipliers, the standard deductions — has been recaptured from the Federal Tax Administration for tax year 2026. Three hundred communes changed their multiplier, ten cantons changed deduction amounts, and Moutier's move from Bern to Jura is now reflected. Most people will see a slightly lower bill than before: Zürich about 1.9 % lower, Zug 4.3 %, Lucerne 5.0 %, Schwyz 6.2 %. We also now check every figure against the federal calculator across three communes in each canton rather than just the cantonal capitals — which is how the earlier commune-level errors had gone unnoticed.

  8. Fix

    Lump-sum withdrawals were missing the communal tax in six cantons

    In Aargau, Graubünden, St. Gallen, Nidwalden, Obwalden and Appenzell Innerrhoden we were charging no communal tax at all on pillar-2 and 3a withdrawals — a CHF 500,000 withdrawal in St. Gallen showed CHF 21,750 where the correct figure is CHF 37,233, 41 % too low. The cause was a wrong multiplier: we were scaling the communal part by the rate cantons apply to company capital, which those six levy only at cantonal level, instead of the ordinary communal income rate a lump-sum benefit actually follows. Fixed and re-checked against the federal calculator at fifteen communes, capitals and villages alike — every one now matches to the franc. If you modelled a withdrawal in those cantons, the real tax is higher than we told you.

  9. Fix

    We stopped guessing your pillar-2 buy-in capacity

    The old estimate returned the same CHF 268,531 for anyone earning between 120k and 400k — a constant dressed up as a personal figure. It now says which of three things it knows: the figure from your pension certificate, a conservative floor estimated from the gap your pay rises opened, or — if you've earned at or above the pillar-2 salary ceiling your whole career — that it genuinely cannot tell, because your buy-in room sits in your fund's non-mandatory plan. Where a saving depends on capacity we can't confirm, the page says so.

  10. Fix

    Newsletter: "you're already on the list" instead of confusing success

    The newsletter form used to show "thanks, check your email" even for emails that were already confirmed — so users sat waiting for a confirmation that never arrived (by design: no re-confirmation needed). The form now reads the `alreadySubscribed` field from the API response and shows a different message: "You're already on the list — no new email needed."

  11. Data

    All 26 cantonal tax scales now verified

    BL and VS were the last two scales still flagged as approximations. BL's §34 StG logarithmic formula (verified at section boundaries against the ESTV reference) and VS's Calcul_IC indexed brackets (transcribed from the canonical Art. 32 LF table) are now in the verified set. New regression tests in the engine guard the boundary numbers + the monotonicity invariants. The "two scales we still mark as approximations" disclaimer is gone from the homepage.

  12. Data

    Atlas data: filter out partial-status (fraction) communes

    The cantonal-move target and the cheaper-commune-within-canton lookup used to surface VD partial-tax-status entries (e.g. 'Les Bioux (fraction) **' at Steuerfuss 3) — not real places you can move to. They're now filtered everywhere: /score, /explore top-10 cheapest, canton-page commune lists, OG image ranks. Real cheapest commune in CH is now Schwende-Rüte (AI, Steuerfuss 18) — and that's a legitimate target.

  13. Feature

    Optimisation Score v2 — engine-backed, feasibility-weighted

    The free Score no longer uses heuristic ranges. Every CHF figure on /score now comes from a real engine pass: baseline tax + four engine levers (3a max, LPP buy-in, swap to cheapest commune in your canton, swap to cheapest CH commune). Each lever has a feasibility weight (1.0 'Easy' → 0.25 'Very hard') so cantonal-move doesn't dominate the score — raw savings still shown on the cards, but the score reflects realistic headroom.

  14. Feature

    Public changelog at /changelog

    Curated release notes — features, data refreshes, fixes — tagged and grouped by year. Available as RSS at /changelog/feed.xml.

  15. Feature

    Atlas: keyboard navigation + mobile list view

    The 26-canton heat-map is now fully keyboard-navigable: tab between cantons, hear the name and average Steuerfuss read by screen readers, see the active stroke move with focus. A sorted list below the map serves as the primary view on phones and as a tabular fallback for assistive tech. Reduced-motion preference is respected.

  16. Feature

    Open Graph cards on canton + commune share links

    Pasting any /commune/[bfs] or /explore/canton/[code] URL into iMessage, WhatsApp, LinkedIn, or Slack now shows a magazine-cover preview with the commune/canton name, Steuerfuss, and ranking. Home, /score, /pricing, /learn share a default editorial card.

  17. Feature

    Security headers + HSTS preload eligibility

    Full security-headers set added: HSTS (2 years, preload-eligible), Content-Security-Policy, Referrer-Policy, Permissions-Policy, X-Content-Type-Options. /embed/* routes get a loosened CSP so partner sites can iframe them. Framework leak (X-Powered-By) removed.

  18. Feature

    Dashboard: full DE / FR / IT translation

    Every page under /dashboard — overview, all-levers, profile, document upload, action plan, combo, multi-year planner, cantonal-move — now switches language with the EN / DE / FR / IT toggle in the header. Translations use Swiss-domain terminology (Steuerfuss / coefficient communal / moltiplicatore, BVG / LPP, Rachat / Einkauf / Riscatto). Pre-launch native review still recommended.

  19. Feature

    Sentry live: error reporting with EU residency

    Errors are now reported to a Sentry project in the EU (de.sentry.io) with strict PII scrubbing — email, salary, income, pension data, auth tokens, and request bodies on /api/profile and /api/levers/* are dropped before transport. Tunnel route bypasses ad-blockers.

  20. Feature

    Pension certificate (Vorsorgeausweis) extractor

    Upload your annual 2nd-pillar statement, get insured salary, current capital, and — the headline — your buy-in capacity extracted into your profile. Encrypted at rest with AES-256-GCM, 30-day auto-purge, 'delete immediately after extraction' opt-in.

  21. Feature

    Optimisation Score (free) — 0-100 with named top lever

    A 60-second test that estimates your tax bill, identifies which of six levers apply to your situation, and names the biggest one ("your largest gap is the Pillar 2 buy-in window — about CHF 3,500/yr"). Free, no signup. Horizontal optimisation scale shows where you sit.

  22. Launch

    First real charge — Stripe live with TWINT

    CHF 49 via TWINT, status succeeded. Cross-border activation took ~10 days of Stripe risk review. Card + TWINT both work; checkout is in CHF, no subscription, no card-on-file.

  23. Feature

    Onboarding wizard with commune-level precision

    New paid users land in a 9-step wizard: canton → commune → birth year → civil status → children → salary → flash baseline → situation flags → pillar data. The commune picker quantifies precision: choosing the right commune is up to 28% more accurate than canton-default.

  24. Data

    All 2,061 communes ingested

    Full 2026 Steuerfuss tables for every Swiss commune (all 26 cantons). 24 of 26 cantonal scales transcribed from cantonal Steuergesetz / Loi sur les impôts texts; VS and BL marked as approximations pending source confirmation.

  25. Feature

    PRO tier launched — CHF 49 one-time, no subscription

    Free atlas + free calculator + free score stay free forever. The personalised plan (multi-year LPP buy-in optimiser, 4 specialist calculators, cantonal-move ROI, document upload + extraction, printable action plan) is CHF 49 one-time for tax year 2026.

  26. Feature

    Tax engine: 6 optimisation levers

    Pillar 3a (single year), LPP buy-in (single year + multi-year DP optimiser), staggered lump-sum withdrawal, the buy-in × withdrawal combo, and 3a multi-account split. Pure TypeScript engine with decimal.js arithmetic — no LLM in the calculation path.

Subscribe

One short email a month with the latest changelog entries and any 2026 Swiss tax rule shifts that affect your bill — no marketing fluff. Sign up for the dispatch