Stripe recovery v1

SecondLoop

Silent churn is still churn

Catch failed Stripe renewals before they become invisible revenue loss.

SecondLoop is a focused SaaS surface for small subscription teams: audit the last 90 days, route customers into Stripe-hosted payment updates, and keep the operator view compact enough to run solo.

Recovery window
< 5 min

From Stripe webhook receipt to first customer touch.

Operator posture
Read, route, recover

Built for one-person teams before sales or support ops exist.

Scope
Billing v1

Subscription invoice failures only. No AI fluff, no extra rails.

Failed renewal detected

invoice.payment_failed enters the queue.

Prompt customer cleanly

Send a short recovery note with Stripe-hosted update flow.

See recovered revenue

Recovered invoices settle back into the operator timeline.

Why this v1 exists

A tight workflow beats a broad dashboard when one person owns recovery.

The first release keeps each section narrow: diagnose, notify, recover, verify. No extra motion, no pricing maze, no pseudo-AI layer yet.

01 Audit

See the last 90 days of missed renewal pressure in one pass.

SecondLoop starts with a Stripe-first diagnostic so operators can quantify exposed revenue before turning on automation.

02 Notify

Trigger the cleanest possible follow-up path.

Customers get routed into Stripe-hosted payment updates instead of a custom billing maze your team has to maintain.

03 Recover

Track what came back, what stalled, and what needs human eyes.

The dashboard stays compact: open cases, timing pressure, webhook health, and recovered revenue.

First-ship sequence

  1. 01

    Sign in with a magic link, create the owner workspace, and claim the operator shell.

  2. 02

    Connect a restricted Stripe key and save the Stripe webhook signing secret.

  3. 03

    Run a 90-day failed invoice diagnostic to size the leak.

  4. 04

    Turn on payment-failed prompts that point into Stripe Customer Portal.

  5. 05

    Watch recovered revenue, unresolved cases, and event health from one shell.

Operator snapshot

$6,780 recovered from $12,840 exposed

35% recovery rate

Cloudsmith

Pro annual / expired_card

$1,490

41m since failure

Relayform

Growth monthly / authentication_required

$299

14m since action required

Northstar

Starter monthly / insufficient_funds

$119

Recovered in 32m

Blueprint

The repo is already staged around the next build prompts.

Dependencies, scripts, docs, dashboard surfaces, and CI are in place so the next passes can focus on actual Stripe onboarding, webhooks, and recovery state.

  • Passwordless Auth.js sign-in is wired through Resend.

  • The app locks /app until both workspace creation and Stripe verification succeed.

  • Workspace-specific webhook URLs are issued with opaque tokens.

  • CI is configured to run lint, typecheck, tests, and a production build.

  • v1 docs define scope, secrets handling, architecture, and release assumptions.

v1 scope

Read, route, recover.

Single-owner workspace. Stripe Billing only. Minimal recovery automation.

Built now

  • App Router scaffold and Tailwind theme
  • Dashboard shell with overview, diagnostics, cases, settings
  • Drizzle schema, Stripe and Resend client helpers
  • CI pipeline and local scripts for build quality

Next pass

  • Auth.js magic link and workspace onboarding
  • Restricted-key validation and webhook endpoint issuance
  • 90-day Stripe diagnostics and event idempotency
  • Portal deep links and Resend-backed recovery templates
The point of this first prompt is momentum: everything around the product has shape, so implementation can now focus on billing logic instead of repo setup.

Ready for the next prompt

The v1 shell is up. Next comes auth, database wiring, and Stripe onboarding.

This repo now reads like a product, not a starter template. The next phases can stay focused on real recovery logic.