Last updated · May 17, 2026
Changelog.
We ship in public. Here’s what’s new, newest first.
Launch
SaaS launch readiness
- Privacy-first auth — sign up with an account number, no email required.
- Stripe-backed subscriptions: $8/mo, $60/yr, pay-what-you-want, lifetime tier.
- GDPR endpoints: GET /api/me/export, DELETE /api/me. One JSON file in, one nuke out.
- Per-user OpenRouter quotas, Sentry-based observability, recovery flow via Cloudflare email.
Feature
Background AI audit
- The audit re-categorize run now happens off the request path — no more 504s on long histories.
- Real-time progress over SSE, fully restartable mid-run.
- Chat can now create categorization preferences from a single message ("never categorize Spotify as Other").
Redesign
Apple Wallet warm-minimal redesign
- Whole-app visual rewrite: warm palette, generous spacing, dark mode by default.
- Dashboard rebuilt around a single hero number + 6-month trend + section breakdown bars.
- New Pill, Amount, Segmented primitives; Card variants with shadow-card / shadow-raised.
Data
Cash-as-asset model + on-demand audit
- Cash, taxes, fees, and business sections promoted to first-class assets in net calculation.
- Settings → Audit re-runs categorization across history with one click. Recovered 48.7K EUR of income mislabeled as Other on the first internal test.
- 50 transfer pairs auto-linked, 11 duplicates flagged for review.
Redesign
v2 simplified UX
- Schema rewrite: sections (8 built-ins) → categories → transactions. countsAsOut flag drives net.
- 66 individual tasks shipped behind a single migration; legacy flat columns dropped.
- New Settings → Sections + Categories pages, drag-reorder, color picker, audit log with per-row undo.
Platform
Realtime architecture
- Per-user SSE bus for cross-tab and cross-page sync. Upload progress, new transactions, preference changes all push live.
- Mobile dashboard hydrates from the same stream — no manual pull-to-refresh required.
Feature
Refresh-safe upload pipeline
- POST /api/upload now returns 202 immediately; the parse job runs detached.
- Refresh mid-upload no longer kills the work. A "Resume" banner re-hydrates from /api/uploads on the next visit.
- Three-layer dedup (statement number, exact, fuzzy ±1 day) plus post-save R1–R5 rules.
Feature
Multi-bank account auto-detection
- Separate AI call per uploaded file detects the owning bank account from the filename + first 10 rows.
- New accounts are created atomically with the transactions write — no orphan rows on failure.