Changelog
What we shipped
One entry per week. What's new, what changed, and what we learned.
v0.13.0 — Self-serve closure: onboarding wizard & in-app upgrade
18 June 2026- Four-step welcome wizard on first login: connect Stripe → set up sender domain → done. No more friction at the door.
- Compact bottom-right checklist shows the remaining setup steps and disappears once everything's wired.
- PRO plan (€49/month) is now bookable in-app — Stripe Checkout runs inline, ongoing billing goes through the customer portal.
- Local sync endpoint fetches subscription state straight from Stripe when webhooks don't reach you — no more "I upgraded but still see Free."
v0.12.0 — Dashboard redesign: less noise, more signal
18 June 2026- Consistent risk badges (LOW/MEDIUM/HIGH/CRITICAL) on one unified palette — Apple-strict black/white/accent, no rainbow warnings.
- Invoice side panel now splits into four tabs: Detail / Plans / Score / History, each with a live indicator (dot on Score, count chips on Plans and History).
- Activity feed shows the last 15 audit events with human-readable labels — what's happening in your account, right now.
- Paused-debtor badge surfaces in the invoices table whenever automation is suspended for a customer.
- WhatsApp, SMS, email, voice, and letter all dispatch from one menu — the button text and icon update to match the channel you pick.
v0.11.0 — Cmd+K command palette with AI fallback
14 June 2026- Hit Cmd+K (or Ctrl+K) — a quick-search palette opens. Navigation, settings, account actions, all keyboard-driven.
- When no static action matches, the palette routes your query to the kvit AI ("Ask kvit:") and returns a short answer inline.
- Hidden until invoked — true to our principle: quiet on the happy path, there when you need it.
v0.10.0 — Payment plans in the customer portal
14 June 2026- Pre-approve per-invoice payment plans (e.g. two instalments every 14 days) that your customers can pick themselves from the portal.
- Pay-in-full continues to use the Stripe hosted link; picking instalments triggers a manual follow-up notification to your team.
- Stays inside RDG boundaries: a fixed menu of options, no AI dialogue, no negotiation.
v0.9.0 — Send reminders from your own domain
14 June 2026- New Settings → Email tab. Add your domain, copy the DKIM TXT record and Return-Path CNAME into your DNS, hit Verify — and reminders now go out from `<you>@yourcompany.de` instead of from us. Customers see you, not kvit.
- DNS records are fetched live from Postmark on every render — regenerate DKIM there and we always show the current record set.
- One-shot setup. Until verified, we keep sending via the kvit default. Pause / resume and the audit log keep working unchanged.
v0.8.0 — Disputes flow through the portal
14 June 2026- Every payment link now lets the debtor raise a dispute in one click — give the reason, hit submit, kvit stops reminders for that invoice while you investigate.
- A dispute writes an audit-log row and pauses the entire nudge cadence for that debtor — same pause mechanism your team uses manually.
- Idempotent: revisiting the link after disputing shows "dispute already raised" — no double-fire.
v0.7.0 — Replies pause reminders automatically
14 June 2026- When a debtor replies to one of your reminders, kvit pauses the cadence automatically. No more "oh no, we kept emailing while they were already in a conversation."
- The reply itself goes to the address you configured — kvit doesn't read or store the body. We only record "they replied" and pause the cadence.
- Safety rule: if you've already manually paused that debtor, we don't overwrite your paused-by or pause reason.
v0.6.0 — Live dashboard, no refresh required
21 May 2026- New invoices appear in the dashboard within a second of being created, without you having to refresh.
- Subtle highlight on each newly-arriving row — a brief accent tint that fades to transparent over 2 seconds.
- Server-Sent Events replaces polling — the browser keeps one open connection, the server only sends updates when something actually changes. Lower network load, faster updates.
- Five concurrent live streams cap per team (DoS guard); every connection open and close lands in the tamper-evident audit log.
v0.5.0 — Invoices visible in the dashboard
21 May 2026- New invoices table on the dashboard — every invoice synced from Stripe, with customer name, amount, status, and due date.
- Status badges for the six invoice states (Open, Overdue, Paid, Cancelled, Escalated, Resolved) with distinct tones.
- Direct "View in Stripe" link for every invoice that carries a hosted-invoice URL.
- Empty state with a clear hint: "The 90-day backfill runs in the background — give it a moment."
v0.4.0 — Stripe phase 2: invoices flow in
20 May 2026- Stripe webhooks live — kvit receives invoice and customer events straight from your Stripe account, signature-verified.
- Initial 90-day backfill — connecting Stripe automatically pulls every open invoice from the last 90 days as a background job.
- Read-only Stripe client — even though OAuth grants write scope, the type system makes it impossible for kvit to charge, refund, or modify anything. Compile-time guarantee, not just a promise.
- Webhook idempotency — every Stripe event lands in the tamper-evident audit log; duplicate deliveries are acked without re-processing.
v0.3.0 — Stripe Connect wired
20 May 2026- Customers can connect Stripe via OAuth — access token stored encrypted under a Stripe-specific key.
- Dashboard shows connected state with Stripe account ID + live/test mode badge.
v0.2.0 — Auth & dashboard
19 May 2026- WorkOS sign-in shipped — Google, Microsoft, and email magic-link available.
- Session cookies HttpOnly + SameSite=Lax — JWT never reaches client JavaScript.
- Host split: `app.getkvit.de` for authenticated surfaces, `www.getkvit.de` for marketing.
- Production domain `getkvit.de` live with SSL.
v0.1.0 — First sign of life
17 May 2026- Marketing landing site live — 11 sections, multilingual (DE + EN)
- API scaffold with /health endpoint, Prisma schema, Swagger docs
- Pre-production infrastructure: Vercel + Railway + Neon + Upstash ready
- Trademark applications filed at EUIPO and DPMA
Deeper technical history lives in the engineering vault. This page publishes only the customer-relevant releases.