Case study / PaidToday Kit
Turning overdue invoice anxiety into a paid recovery workflow.
PaidToday Kit is a focused web app that turns one overdue invoice into a practical recovery pack: follow-up emails, SMS reminders, a phone script, final notice language, payment-page copy, and a next-step checklist.
The product problem is deliberately narrow: help freelancers, consultants, contractors, small agencies, and solo service businesses chase overdue invoices without sounding desperate, hostile, or unprofessional.
Product constraint
The MVP is intentionally accountless and payment-first. A buyer should move from landing page to structured intake, Stripe Checkout, paid result verification, and generated Markdown/copy output without requiring a user account, dashboard, accounting integration, or automated debtor contact.
That constraint forced the architecture to separate payment state, commercial entitlement, kit generation, and artifact delivery rather than hiding all of that under a generic user account model.
System shape
The architecture uses Next.js server actions and routes, Stripe Checkout for the commercial boundary, Supabase for durable records, and a generated artifact flow that remains useful even when optional providers are unavailable.
Architectural decisions
Payment is verified server-side
The client never gets to claim payment success. The result page verifies the Stripe Checkout Session before unlocking or generating the kit.
Entitlements are a ledger
Purchases, subscriptions, kit entitlements, entitlement uses, and generated kits are modeled as separate concepts so bundles and future subscriptions can evolve without corrupting the one-kit path.
AI is useful, not load-bearing
OpenAI generation improves output quality, but deterministic fallback generation protects paid fulfillment when API keys, quota, model behavior, or provider availability fail.
Scope protects launch speed
Accounts, dashboards, PDF generation, analytics, and accounting integrations are deferred until user behavior proves they are worth the operational and product complexity.
What this demonstrates
- Product scoping around a painful, specific cash-flow problem.
- Backend architecture that separates commercial rights from generated artifacts.
- Payment-flow design that avoids trusting client-side success states.
- Graceful degradation when AI, email, or webhook timing is imperfect.
- Operational discipline around environment variables, server-only secrets, migrations, and smoke tests.