Nightly restore drills for database backups

Dev toolWeb1 weekNode.jsFly.ioPostgresStripe

The idea

Everyone has backups; almost nobody has restores. The pg_dump cron has been green for two years, and whether the dumps are complete, current and loadable is a question first answered during the actual disaster. Uptime gets monitored obsessively while the last line of defence gets checked never, because restore drills are tedious manual work with no natural owner.

The market gap is clean: below enterprise DR suites there is nothing but DIY scripts. A service that boots a scratch Postgres nightly, restores the latest dump, runs your sanity queries and emails a dated pass/fail certificate turns an ignored risk into a morning email. As a bonus the restore duration is a real measured RTO, which most small teams have literally never seen.

Who pays

The buyer is a solo SaaS founder or tiny team whose entire business is one Postgres database; the product is sleep insurance priced at 19 to 49 dollars a month, well under the cost of thinking about it. The certificate email doubles as evidence for SOC 2 and customer security questionnaires, which hardens retention. Distribution: indie hacker communities, r/PostgreSQL, and SEO on how do I know my backups work style anxiety queries.

MVP scope

  • S3/R2/GCS connection and automatic latest-dump discovery
  • Nightly restore into an ephemeral Fly Machine, destroyed after the drill
  • Built-in checks (freshness, restore success, row counts, recency) plus custom SQL assertions
  • Morning pass/fail certificate email, immediate Slack alert on failure, 90-day history
  • Stripe subscriptions
  • Skip for v1: MySQL/Mongo, WAL/point-in-time verification, huge multi-terabyte databases, running drills inside the customer’s own cloud, compliance report packs
// Build prompt — paste into Cursor / Claude Code / Lovable / Bolt
Build RestoreProof, a service that verifies database backups by actually restoring them every night. Stack: Node.js API and worker, Fly.io Machines for ephemeral restore instances, Postgres for app state, Stripe for billing. Server-rendered dashboard is fine; keep the frontend minimal.

Core flow: user connects the S3 (or R2/GCS) bucket holding their pg_dump files with read-only credentials and defines sanity checks: built-ins (dump newer than 26 hours, restore completes without error, row count per named table above a floor, max(created_at) on a named table within 24 hours) plus arbitrary user-defined SQL that must return true. Each night a worker finds the latest dump, boots a right-sized ephemeral Fly Machine running Postgres, restores into it, runs the checks, records timings and results, then destroys the machine so no customer data outlives the drill.

The result is a pass/fail certificate emailed each morning: backup timestamp, dump size and delta vs yesterday, restore duration (their real RTO number), each check green or red. Failures also alert via Slack webhook immediately. Keep a 90-day history so the dashboard can chart restore time and dump size growth, both of which creep up silently.

Pages: landing pitching the day-it-matters scenario, setup wizard, check editor, run history with certificate view, billing.

Implementation notes: stream the dump straight from S3 into pg_restore rather than staging on disk; encrypt stored credentials with a KMS-managed key.

Pricing: 19 GBP/month one database, 49 GBP/month five.

// More Dev tool ideas