Runbooks
Supabase Project Lifecycle — Pause Prevention, Restoration, Tier Sizing
Supabase Project Lifecycle — Pause Prevention, Restoration, Tier Sizing
Document name: supabase-project-lifecycle.md
Version: 1.0.0
Last updated: 2026-05-27
Owned by: Build & Infrastructure
Pairs with: cybersuite-supabase-runbook.md (project setup, deploy, env vars) — wherever that runbook lives; this document covers the lifecycle layer above setup
Purpose
The CyberSuite assessment app’s Supabase project (cmevvhyvrkphsfkghpix) paused on or about 2026-05-06 after the initial deploy was followed by ~10 days of no incoming traffic. The project was restored on 2026-05-26 with all data intact. This runbook documents:
- Why Supabase projects pause (Free-tier behavior)
- How to verify which tier the project is on
- How to prevent pause recurrence
- What the 90-day deletion clock means
- The restoration procedure
- Monitoring options
- The Free vs Pro cost picture
- CyberSuite’s recommendation
The short version: a production assessment app cannot run on Free tier. Pro at $25/mo is the right answer once revenue covers it, and a daily uptime ping is the stopgap before then.
1. Why Supabase projects pause
Supabase Free-tier projects pause after 7 consecutive days of inactivity. “Inactivity” here means no database connections, no incoming API requests, no Edge Function invocations against the project. A Free project sitting with no traffic for 7 days transitions from ACTIVE_HEALTHY to INACTIVE automatically.
What happened with the CyberSuite project:
- Initial deploy and testing: 2026-05-06 window
- No customer traffic followed (assessment app not yet live on
assessment.cybersuite.tech) - Internal pings from the operator stopped once setup was done
- 7-day inactivity threshold hit around 2026-05-13 → project transitioned to
INACTIVE - 90-day deletion clock began counting at that point
- Project was restored 2026-05-26, about 13 days into the clock
Pro-tier projects are not subject to this rule. Pro projects stay ACTIVE_HEALTHY regardless of traffic.
2. How to verify the current tier
Three options, in increasing order of definitiveness:
Option A — Supabase dashboard
- Open https://supabase.com/dashboard/project/cmevvhyvrkphsfkghpix
- Left sidebar → Project Settings → Billing
- The plan card at the top names the current plan:
Free,Pro,Team, orEnterprise
Option B — Project home banner
- The dashboard home page for the project shows a banner near the top when the project is on Free or in a paused/restored state. If you see no plan banner and the project Settings → Billing shows “Pro Plan — $25/month”, you’re on Pro.
Option C — Supabase CLI (advanced)
supabase projects list
The output column shows the project’s plan if you’re authenticated with an account that owns the project.
3. How to prevent pause
Two paths. Pro is recommended.
Path A — Upgrade to Pro ($25/mo per project)
This is the production answer. Project Settings → Billing → Upgrade. Pro removes the 7-day inactivity pause entirely. It also unlocks the items listed in section 7.
Path B — Stay on Free with a daily uptime ping
This is the stopgap. Set up an external service to hit a Supabase Edge Function or REST endpoint once per day. Any database connection within 7 days resets the inactivity timer.
Acceptable ping targets, in order of preference:
- A no-op Edge Function (e.g.,
https://cmevvhyvrkphsfkghpix.supabase.co/functions/v1/healthcheck) that returns200 OKand exits. - A read against a small table via the REST API.
Acceptable ping services:
- UptimeRobot (free tier: 5-minute intervals; 50 monitors) — preferred, gives email alerts on failure
- Cron-job.org (free tier: 1-minute granularity)
- GitHub Actions scheduled workflow (free for public repos; for private, accrues toward Action minutes)
This is a stopgap because (a) it does not provide the additional resources Pro provides, (b) any ping outage of >7 days still triggers pause, and (c) it does not fix the larger problem: Free tier is not intended for production.
4. The 90-day deletion clock
When a Free project pauses, Supabase starts a 90-day countdown. During those 90 days:
- The project is
INACTIVE. No traffic is served. The database is offline. Edge Functions return errors. - The data is retained on Supabase’s storage. Nothing is deleted yet.
- Restoration is one click from the dashboard. After restore, the project comes back with all data, schema, RLS policies, Edge Functions, and secrets intact.
- Restoring an
INACTIVEproject is free if it’s still inside the 90-day window.
If the 90 days elapse without restoration, the project and its data are permanently deleted. There is no recovery path past day 90.
The CyberSuite project entered INACTIVE around 2026-05-13. It was restored 2026-05-26, well inside the window. The next pause cycle (if Free is retained) would start 7 days after the last database connection.
5. Restoration procedure
If the project shows Inactive in the dashboard:
- Open https://supabase.com/dashboard/project/cmevvhyvrkphsfkghpix
- The project home page shows a banner: “Restore project”
- Click Restore project. Confirm the prompt.
- Wait approximately 2 to 5 minutes. The dashboard transitions through
RESTORINGtoACTIVE_HEALTHY. - Verify by hitting one of the existing Edge Function URLs:
curl -i https://cmevvhyvrkphsfkghpix.supabase.co/functions/v1/submit- Expect HTTP 405 or 400 (route exists, method/body wrong) — NOT a connection error.
- Verify the database is responsive: dashboard → SQL Editor →
select count(*) from submissions;
If restoration fails or the project never returns to ACTIVE_HEALTHY, open a Supabase support ticket from the dashboard. Free-tier support response is best-effort; Pro support is the same channel with priority.
6. Monitoring
Supabase does not send automatic email alerts on project state changes for Free-tier projects. Two ways to know if the project pauses:
Option A — UptimeRobot or equivalent If a daily uptime ping is configured (section 3, Path B), failure of the ping is the first signal that pause is approaching or has happened. Configure UptimeRobot to email on three consecutive failures.
Option B — Supabase notification settings Dashboard → Account Settings → Notifications. Enable “Project status changes”. Supabase will email the account owner when the project transitions between states (paused, restored). This works on Free and Pro.
For production: combine both. The notification setting tells you when state changes. The uptime ping prevents the state change in the first place (and tells you sooner if anything else goes wrong).
7. Free vs Pro — what Pro unlocks beyond no-pause
Free-tier limits (as of 2026):
- 500 MB database
- 1 GB file storage
- 50,000 monthly active users (auth)
- 7-day inactivity pause
- 7-day point-in-time recovery NOT included; no daily backups
- 2 free projects total per organization
Pro-tier ($25/mo per project, as of 2026):
- 8 GB database (auto-scales with overage at ~$0.125/GB/mo)
- 100 GB file storage
- 100,000 monthly active users
- No pause — project stays live regardless of traffic
- Daily backups, 7-day retention — meaningful for the assessment app since submissions are customer data
- Point-in-time recovery available as an add-on
- 8x more compute headroom (more concurrent requests before throttling)
- Priority support channel
For the CyberSuite assessment app, the operationally important Pro features are:
- No pause (the immediate driver)
- Daily backups (matters once we have real customer submissions; a corrupted schema or bad migration is recoverable)
- Higher compute (matters during marketing pushes where a wave of prospects hits the assessment in a short window)
8. Cost implications
CyberSuite production infrastructure cost on Pro tier:
| Component | Cost | Notes |
|---|---|---|
Supabase Pro (cmevvhyvrkphsfkghpix) | $25/mo | One project; covers assessment app DB + Edge Functions |
| Cloudflare Workers Paid | $5/mo | Required for Reports Engine routes; covers Browser Rendering API quota |
| Fixed infrastructure subtotal | $30/mo | Floor cost regardless of customer count |
Additional per-customer costs (Resend email sends, Cloudflare Pages bandwidth) remain on free tiers at low volume and shift to usage-based billing at scale.
Below first paying customer revenue, the $30/mo is a real cost out of pocket. Above first customer revenue ($500/mo Standard plan would cover ~16x the infra floor), it is negligible. The decision on when to upgrade Supabase to Pro is therefore an Operations call, not a Build call — see the recommendation below.
9. Recommendation
Upgrade Supabase to Pro before the assessment app accepts the first real prospect submission. The trigger conditions, in priority order:
- Hard trigger: Cloudflare Pages deployment goes live at
assessment.cybersuite.techwith the embed snippet on the marketing site. From that moment the project is in production posture and pause risk is unacceptable. - Soft trigger: A scheduled sales conversation where a prospect is expected to visit the assessment within days.
Until those triggers fire, Free tier with a daily uptime ping is acceptable but fragile. Set the ping up now if Pro is deferred.
The Pro upgrade is one click from Project Settings → Billing → Upgrade. Pro pricing is prorated daily, so partial-month upgrades are not punitive.
Operator decision needed: when to upgrade to Pro. This belongs in Operations because it’s a $25/mo recurring spend decision tied to launch timing.
Change log
| Version | Date | Change |
|---|---|---|
| 1.0.0 | 2026-05-27 | Initial runbook drafted after the 2026-05-06 → 2026-05-26 pause/restore cycle |
How to update
Edit this file in place. Increment the version in the header per semantic versioning rules:
- Patch (1.0.x): typo fixes, link updates
- Minor (1.x.0): new sections, new recommendations, expanded procedures
- Major (x.0.0): structural rewrite, change in core recommendation
Update the change log table with one line summarizing the change.