| name | clerk-prod-checklist |
| description | Production readiness checklist for Clerk deployment.
Use when preparing to deploy, reviewing production configuration,
or auditing Clerk implementation before launch.
Trigger with phrases like "clerk production", "clerk deploy checklist",
"clerk go-live", "clerk launch ready".
|
| allowed-tools | Read, Write, Edit, Grep, Bash(npm:*) |
| version | 1.14.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","clerk","deployment","audit"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Clerk Production Checklist
Overview
Complete checklist to ensure your Clerk integration is production-ready. Covers environment config, security hardening, monitoring, error handling, and compliance.
Prerequisites
- Clerk integration working in development
- Production environment and domain configured
- CI/CD pipeline ready
Instructions
Step 1: Environment Configuration Checklist
| Check | Status | Action |
|---|
Using pk_live_ keys | [ ] | Switch from test to live keys |
CLERK_SECRET_KEY is sk_live_ | [ ] | Never use test keys in production |
.env.local in .gitignore | [ ] | Prevent accidental secret commits |
CLERK_WEBHOOK_SECRET set | [ ] | Required for webhook verification |
| Production domain in Clerk Dashboard | [ ] | Dashboard > Domains |
| Sign-in/sign-up URLs configured | [ ] | Set NEXT_PUBLIC_CLERK_SIGN_IN_URL etc. |
Step 2: Validation Script
import { createClerkClient } from '@clerk/backend'
async function validateProduction() {
const checks: { name: string; pass: boolean; detail: string }[] = []
const pk = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY || ''
sk = process.. ||
checks.({
: ,
: pk.(),
: pk.() ? : ,
})
checks.({
: ,
: sk.(),
: sk.() ? : ,
})
{
clerk = ({ : sk })
clerk..({ : })
checks.({ : , : , : })
} (: ) {
checks.({ : , : , : err. })
}
checks.({
: ,
: !!process..,
: process.. ? : ,
})
fs = ()
hasMiddleware = fs.() || fs.()
checks.({
: ,
: hasMiddleware,
: hasMiddleware ? : ,
})
.()
( check checks) {
icon = check. ? :
.()
}
allPass = checks.( c.)
.()
process.(allPass ? : )
}
()