Skip to content
kvit
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.