SU

supabase-prod-checklist

A 14-step checklist to ensure Supabase projects are production-ready and secure.

Install

mkdir -p .claude/skills/supabase-prod-checklist && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4213" && unzip -o skill.zip -d .claude/skills/supabase-prod-checklist && rm skill.zip

Installs to .claude/skills/supabase-prod-checklist

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Execute a Supabase production deployment checklist covering RLS, key hygiene, connection pooling, backups, monitoring, Edge Functions, and Storage policies. Use when deploying to production, preparing for launch, or auditing a live Supabase project for security and performance gaps. Trigger with "supabase production", "supabase go-live", "supabase launch checklist", "supabase prod ready", "deploy supabase", "supabase production readiness".
443 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

Key capabilities

  • Enforce Row Level Security on all public tables
  • Separate `anon` and `service_role` keys for client and server-side use
  • Configure Supabase connection pooling for serverless functions
  • Enable automatic daily backups and Point-in-Time Recovery
  • Restrict database access with IP allowlists
  • Configure custom domains for API and auth endpoints

How it works

The skill provides a 14-step checklist to configure a Supabase project for production, covering security, performance, and data recovery. It includes verification steps and commands for each item.

Inputs & outputs

You give it
Supabase project configuration and deployment settings
You get back
Production-ready Supabase project with security, performance, and recovery measures

When to use supabase-prod-checklist

  • Performing a pre-launch audit
  • Configuring production environment security
  • Validating Edge Function deployment settings
  • Establishing disaster recovery and backup procedures

About this skill

Supabase Production Deployment Checklist

Overview

Actionable 14-step checklist for taking a Supabase project to production, based on Supabase's official production guide. Each step below carries its verification checklist inline; the full SQL, TypeScript, and CLI commands for every step live in references/step-commands.md.

Prerequisites

  • Supabase project on Pro plan or higher (required for PITR, network restrictions)
  • Separate production project (never share dev/prod)
  • @supabase/supabase-js v2+ installed
  • Supabase CLI installed (npx supabase --version)
  • Domain and DNS configured for custom domain
  • Deployment platform ready (Vercel, Netlify, Cloudflare, etc.)

Instructions

Work top to bottom. Every checkbox must be satisfied before go-live. Each step names the commands to run; copy them from references/step-commands.md.

Step 1: Enforce Row Level Security on ALL Tables

RLS is the single most critical production requirement. Without it, any client with your anon key can read/write every row. Start with the audit query — it must return zero rows before going live:

-- Find tables WITHOUT RLS enabled (must return zero rows before launch)
SELECT schemaname, tablename, rowsecurity
FROM pg_tables
WHERE schemaname = 'public' AND rowsecurity = false;

Then ALTER TABLE ... ENABLE ROW LEVEL SECURITY and add per-command policies — full CREATE POLICY patterns in step-commands.md.

  • RLS enabled on every public table (zero rows from audit query above)
  • SELECT, INSERT, UPDATE, DELETE policies defined for each table
  • Policies tested with both authenticated and anonymous roles
  • No tables use USING (true) without intent (public read tables only)

Step 2: Enforce Key Separation — Anon vs Service Role

The anon key is safe for client-side code. The service_role key bypasses RLS entirely and must never leave server-side environments. See the two-client setup in step-commands.md.

  • Anon key used in all client-side code (NEXT_PUBLIC_ prefix)
  • Service role key used only in server-side code (API routes, Edge Functions)
  • Service role key not in any client bundle (verify with grep -r "service_role" dist/)
  • Database password changed from the auto-generated default

Step 3: Configure Connection Pooling (Supavisor)

Supabase uses Supavisor for pooling. Serverless functions (Vercel, Netlify, Cloudflare Workers) MUST use the pooled connection string (port 6543) to avoid exhausting the database connection limit — direct connections (port 5432) are for migrations and admin tasks only. Connection strings and client config in step-commands.md.

  • Application code uses pooled connection string (port 6543)
  • Direct connection reserved for migrations and admin tasks only
  • Connection string in deployment platform env vars (not hardcoded)
  • Verified pool mode: transaction for serverless, session for long-lived connections

Step 4: Enable Database Backups

Supabase provides automatic daily backups on Pro plan. Point-in-time recovery (PITR) enables granular restores.

  • Automatic daily backups enabled (Pro plan — verify in Dashboard > Database > Backups)
  • Point-in-time recovery configured (Dashboard > Database > Backups > PITR)
  • Tested restore procedure on a staging project (do not skip this)
  • Migration files committed to version control (supabase/migrations/ directory)
  • npx supabase db push tested against a fresh project to verify migrations replay cleanly

Step 5: Configure Network Restrictions

Restrict database access to known IP addresses. This prevents unauthorized direct database connections even if credentials leak.

  • IP allowlist configured (Dashboard > Database > Network Restrictions)
  • Only deployment platform IPs and team office IPs are allowed
  • Verified that application still connects after restrictions applied
  • Documented which IPs are allowed and why

Step 6: Configure Custom Domain

A custom domain replaces the default *.supabase.co URLs with your brand domain for API and auth endpoints.

  • Custom domain configured (Dashboard > Settings > Custom Domains)
  • DNS CNAME record added and verified
  • SSL certificate provisioned and active
  • Application code updated to use custom domain URL
  • OAuth redirect URLs updated to use custom domain

Step 7: Customize Auth Email Templates

Default Supabase auth emails show generic branding. Customize them so users see your domain and brand.

  • Confirmation email template customized (Dashboard > Auth > Email Templates)
  • Password reset email template customized
  • Magic link email template customized
  • Invite email template customized
  • Custom SMTP configured (Dashboard > Auth > SMTP Settings) — avoids rate limits and improves deliverability
  • Email confirmation enabled (Dashboard > Auth > Settings)
  • OAuth redirect URLs restricted to production domains only
  • Unused auth providers disabled

Step 8: Understand Rate Limits Per Tier

Supabase enforces rate limits that vary by plan. Hitting these in production causes 429 errors.

ResourceFreeProTeam
API requests500/min1,000/min5,000/min
Auth emails4/hour30/hour100/hour
Realtime connections200 concurrent500 concurrent2,000 concurrent
Edge Function invocations500K/month2M/month5M/month
Storage bandwidth2GB/month250GB/monthCustom
Database size500MB8GB50GB
  • Rate limits documented for your plan tier
  • Client-side retry logic with exponential backoff for 429 responses
  • Auth email rate limits understood (use custom SMTP to increase)
  • Realtime connection limits planned for expected concurrent users

Step 9: Review Monitoring Dashboards

Supabase provides built-in monitoring. Review these before launch to establish baselines, and deploy a health check endpoint (full route handler in step-commands.md).

  • Dashboard > Reports reviewed (API requests, auth, storage, realtime)
  • Dashboard > Logs > API checked for error patterns
  • Dashboard > Database > Performance Advisor reviewed and recommendations applied
  • Health check endpoint deployed and monitored (uptime service)
  • Error tracking configured (Sentry, LogRocket, etc.)
  • Alerts set for: error rate spikes, high latency, connection pool exhaustion

Step 10: Deploy Edge Functions with Proper Env Vars

Edge Functions run on Deno Deploy. Set environment variables via the Supabase CLI or Dashboard, not hardcoded. Secret commands and a webhook function template in step-commands.md.

  • All Edge Functions deployed to production (npx supabase functions deploy)
  • Environment secrets set via npx supabase secrets set (not hardcoded)
  • SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY available automatically (no need to set)
  • Edge Functions tested with npx supabase functions serve locally before deploying
  • CORS headers configured for Edge Functions that receive browser requests

Step 11: Verify Storage Bucket Policies

Storage buckets need explicit policies, similar to RLS on tables. Without policies, buckets are inaccessible (default deny). Inspection queries and example policies in step-commands.md.

  • Each bucket has explicit SELECT/INSERT/UPDATE/DELETE policies
  • Public buckets are intentionally public (not accidentally open)
  • File size limits set per bucket (file_size_limit in bucket config)
  • Allowed MIME types restricted per bucket (allowed_mime_types)
  • User upload paths scoped to auth.uid() to prevent overwrites

Step 12: Add Database Indexes on Frequently Queried Columns

Missing indexes are the leading cause of slow queries after launch. Add indexes on foreign keys, filter columns, and sort columns. Diagnostic queries (missing-index, slow-query, table-bloat) and index DDL in step-commands.md.

  • Indexes on all foreign key columns
  • Indexes on columns used in WHERE, ORDER BY, and JOIN clauses
  • pg_stat_statements enabled for ongoing query monitoring
  • Performance Advisor reviewed (Dashboard > Database > Performance)
  • statement_timeout set for authenticated role to prevent runaway queries
  • Table bloat checked — VACUUM if dead tuple percentage > 10%

Step 13: Apply Migrations with npx supabase db push

All schema changes must go through migration files, never manual Dashboard edits in production. Migration commands in step-commands.md.

  • All schema changes in supabase/migrations/ directory (version controlled)
  • npx supabase db push tested against a fresh project
  • Migration history matches between local and remote (npx supabase migration list)
  • Rollback migration prepared for risky schema changes
  • No manual schema edits in production Dashboard

Step 14: Pre-Launch Final Verification

Run the final linked-project verification commands in step-commands.md, then confirm:

  • CORS settings match production domain (Dashboard > API > CORS)
  • Environment variables set correctly in deployment platform
  • Realtime enabled only on tables that need it (reduces connection usage)
  • Webhook endpoints registered and tested
  • Load test completed on staging (see supabase-load-scale)
  • SSL enforcement enabled (Dashboard > Database > Settings > SSL)
  • DNS and custom domain verified end-to-end

Output

  • All 14 checklist sections verified with zero unchecked item

Content truncated.

Prerequisites

Supabase project on Pro plan or higherSeparate production project`@supabase/supabase-js` v2+ installedSupabase CLI installed

Limitations

  • Point-in-time recovery and network restrictions require a Pro plan or higher
  • Service role key must not be included in any client bundle
  • Serverless functions must use the pooled connection string (port 6543)

How it compares

This skill offers a structured, step-by-step checklist for Supabase production readiness, which is more complete than ad-hoc configuration.

Compared to similar skills

supabase-prod-checklist side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
supabase-prod-checklist (this skill)127dReviewIntermediate
unity-editor-toolkit106moReviewAdvanced
azure-resource-manager-mysql-dotnet13moReviewIntermediate
railway-database17moReviewBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

unity-editor-toolkit

Dev-GOM

Automate and control Unity Editor with 500+ commands, real-time WebSocket communication, and SQLite integration for efficient game development.

10126

azure-resource-manager-mysql-dotnet

microsoft

Azure MySQL Flexible Server SDK for .NET. Database management for MySQL Flexible Server deployments. Use for creating servers, databases, firewall rules, configurations, backups, and high availability. Triggers: "MySQL", "MySqlFlexibleServer", "MySQL Flexible Server", "Azure Database for MySQL", "MySQL database management", "MySQL firewall", "MySQL backup".

14

railway-database

davila7

Add official Railway database services (Postgres, Redis, MySQL, MongoDB). Use when user wants to add a database, says "add postgres", "add redis", "add database", "connect to database", or "wire up the database". For other templates (Ghost, Strapi, n8n), use the railway-templates skill.

12

railway-new

davila7

Create Railway projects, services, and databases with proper configuration. Use when user says "setup", "deploy to railway", "initialize", "create project", "create service", or wants to deploy from GitHub. Handles initial setup AND adding services to existing projects. For databases, use railway-railway-database skill instead.

11

migration-checklist

eisandromc

Skill especializada para migration checklist.

00

fastapi-templates

wshobson

Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.

5201,086

Search skills

Search the agent skills registry