production-readiness
Skill26 starsChanged 6 months agoMITView on GitHub
Use when the user says "ready to ship", "ready for launch", "going live", "ready for prod", "production-ready", "ship it", before opening to real users, or before announcing a launch. Walks the full pre-launch checklist across security, data, reliability, ops, billing, and rollout — and explicitly flags what's missing.
- Reads credentials
17 other projects use a version of this.
Adopted by
Most recently taken up by
- KbWen/agentic-ostheir own version, first seen Nov 7, 2026
- pankaj-mahaur/Agent-Daemontheir own version, first seen Nov 6, 2026
- gilsmt/skillsword for word, first seen Oct 29, 2026
- Gladiarn/Glad-Personaltheir own version, first seen Oct 25, 2026
- abevz/devops-skillstheir own version, first seen Oct 15, 2026
- trycompai/comptheir own version, first seen Oct 8, 2026
Used with
Projects with it also use testing, systematic-debugging and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
NVIDIASkilltesting
Run Python and Rust tests for physicsnemo-curator using uv + pytest with coverage reporting via pytest-cov, and cargo-nextest for Rust tests. Includes benchmark workflows with pytest-benchmark and criterion.
Also in 4 projects that use this
OpenAISkillsystematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
Also in 3 projects that use this
MicrosoftSkillhandoff
Compact the current conversation into a handoff document for another agent to pick up.
Also in 3 projects that use this
Other versions17 projects use a version of this.
Word for word · 1
- gilsmt/skills★ 2100% same
Edited · 0
None found.
Wrote their own version · 16
- trycompai/comp★ 2.1ksame name
- KbWen/agentic-os★ 229same name
- magnus919/agent-skills★ 172same name
- KbWen/agent-virtual-office★ 65same name
- caiaffa/claude-code-ultimate-engineering-system★ 17same name
- wpank/ai★ 11same name
- dekoza/oh-my-slop★ 4same name
- Gladiarn/Glad-Personal★ 4same name
- kleosr/bridle★ 1same name
- kleosr/kleosrules★ 1same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- api-route-hardeningSkill
- auth-and-sessionsSkill
- authorizationSkill
- caching-and-invalidationSkill
- database-query-safetySkill
- data-privacySkill
- error-handlingSkill
- file-uploadsSkill
- input-validationSkill
- jobs-and-queuesSkill
- llm-endpoint-safetySkill
- migrations-and-schemaSkill
- observabilitySkill
- reliability-patternsSkill
- rsc-boundariesSkill
- secrets-and-envSkill
- testing-strategySkill
- transactions-and-consistencySkill
- webhooksSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Before a public announcement (Show HN, Product Hunt, press, paid ads)
- Distinctive: line 13
Before opening a closed beta to real customers
- Distinctive: line 14
Before turning off feature flags for a major feature
- Distinctive: line 188
Write the result as a punch list, organized by section, with status next to each item:
- Very specific: line 197
Don't say "looks good" without naming the file you checked.
- Distinctive: line 211
Not optional. Run it.
“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Production Readiness Review
"Working in dev" and "safe for real users" are different states. This is the pre-launch checklist: have you actually thought about each of these.
When to use
- Anyone says "we're ready to launch" / "let's ship it" / "going live tomorrow"
- Before a public announcement (Show HN, Product Hunt, press, paid ads)
- Before opening a closed beta to real customers
- Before turning off feature flags for a major feature
When to skip
- Internal demos to teammates with no real user impact
- Dev environments still in early scaffolding
How to run this
For each section: ask the question. Ground it in the actual code/config (not "I'll check later"). If something is missing, it's a launch blocker unless explicitly waived with a reason.
This is a review skill — pair it with the underlying topic skills (secrets-and-env, auth-and-sessions, etc.) when you find a gap.
1. Secrets & configuration
- No
NEXT_PUBLIC_*_SECRET/_KEY/_TOKENin the bundle (secrets-and-env) .env*gitignored; no committed secrets in history (git log -p | grep -E '(_KEY|_SECRET|_TOKEN)='returns nothing)- Production secrets live in the platform secret manager — not in
.envfiles - Env validated at boot (Zod) — missing config fails loud at start, not at first request
- Server-only modules guarded with
import 'server-only'
2. Authentication & authorization
- Tokens in
httpOnlysecuresameSite: 'lax'cookies — never localStorage (auth-and-sessions) - Passwords with argon2id (or via managed provider)
- Auth endpoints rate-limited (login, signup, reset, MFA verify)
- Same response for unknown email + wrong password
- Every endpoint handling user data scopes by
userId/orgId/tenantId(authorization) - 404 (not 403) for "exists but not yours"
- Server Actions and RSC data fetching have authz checks
- CSRF protection in place (Server Actions, or
sameSite: 'lax'+ double-submit token)
3. Input handling
- Every endpoint parses input via Zod/Valibot at the boundary (
input-validation) - Schemas use
.strict()— no mass assignment - Server-controlled fields (
id,role,userId) cannot come from request body - String/array max lengths set explicitly
- Webhook receivers verify signatures on the raw body, check timestamp, dedupe by event ID (
webhooks)
4. API hardening
- Rate limits on every mutating endpoint, per-user and per-IP (
api-route-hardening) - Request body size cap before parsing
- Idempotency keys on charge / send / irreversible mutations
- Stable JSON error contract with codes (no leaking internals to users)
- CORS allowlist, not
* - Response DTOs, not raw DB rows
- Per-call timeouts on every outbound
fetch(reliability-patterns)
5. LLM / cost-bearing endpoints
- LLM API key server-only; client calls a proxy (
llm-endpoint-safety) - Auth required to hit any LLM endpoint
- Per-user daily quota (token or $ cap), not just rate limit
maxOutputTokensset on every callabortSignal: req.signalso client disconnect cancels upstream- Provider-side billing cap configured (OpenAI / Anthropic dashboard)
6. Database
- All queries parameterized; no string-concat SQL with user input (
database-query-safety) - Indexes on every filter + sort column on hot queries (verified with
EXPLAIN) - Every list endpoint has a max page size
- No N+1 in hot paths (verified by query-count log)
- Multi-step writes wrapped in transactions (
transactions-and-consistency) - Money / inventory / counters use atomic ops or
SERIALIZABLEwith retry - Connection pooler configured (PgBouncer, platform pooler) — serverless connections won't blow up the DB
statement_timeoutset per role
7. Migrations
- Last migration is additive; no breaking schema change without a deploy plan (
migrations-and-schema) - Migrations linted for unsafe patterns (Squawk or equivalent in CI)
NOT NULLadds are 3-step (nullable → backfill → enforce)- Indexes on big tables created
CONCURRENTLY - Backfills are batched, not single huge
UPDATE - Down migration written (or irreversibility explicit)
8. File uploads (if any)
- Direct-to-storage with presigned URLs; server doesn't proxy bytes (
file-uploads) - Size cap enforced at the bucket
- MIME sniffed server-side; SVG rejected or sanitized
- Uploads served from separate domain or as
Content-Disposition: attachment - Image dimension cap (
limitInputPixels) - EXIF stripped
- Per-user storage quota
9. Background jobs (if any)
- Handlers are idempotent (dedupe by business key) (
jobs-and-queues) - Retries with exponential backoff + jitter; max attempts; DLQ
- DLQ monitored / alerts fire when growing
- Visibility timeout > expected job duration
- Crons run on a single leader; idempotent per period
- Outbox pattern for "DB write + enqueue"
10. Reliability
- Every outbound call has a timeout (
reliability-patterns) - Retries with backoff + jitter on transient errors only
- Circuit breaker on chronically flaky upstreams
- Fallback (or fail-loud) decided per dependency
- Concurrency limits on outbound parallel calls
- Health check verifies real dependencies (DB + cache), not just "200 OK"
11. Observability
- Structured logger, no
console.login prod (observability) requestIdin every log line and echoed in response header- Errors logged with
{ err }(full Error), not stringified - OpenTelemetry instrumented; traces flow across services + jobs
- RED dashboard per service (rate / errors / latency)
- At least one SLO-based alert wired to a human (PagerDuty, on-call)
- Sensitive fields redacted at the logger level (passwords, tokens, full PII)
12. Errors
- No silent
catch {}(error-handling) - Every async UI surface has loading + error + empty states; user can recover (retry, back)
- User-facing messages are generic; full detail in logs with
requestIdcorrelation - Auth/permission failures fail closed; auxiliary failures fail open (and surface degradation)
- Top-level
unhandledRejection/uncaughtExceptionhandlers
13. Caching
- Cache keys include every input that varies the result (
caching-and-invalidation) - No per-user data in a globally-keyed cache
- Tag-based invalidation on entity mutations (
revalidateTagafter Server Actions) - Stampede protection on hot keys (SWR, single-flight, jitter)
- Permission/auth state not cached, or only briefly
14. Privacy & compliance
- Only fields the product needs are collected (
data-privacy) - HTTPS everywhere; HSTS configured
- High-sensitivity fields encrypted at app level (managed KMS)
- Card data via tokenization (Stripe Elements / Checkout) — never on your server
- Real deletion path for "delete my account" — DB + indexes + caches + sub-processors, tested end-to-end
- Data export available (GDPR / CCPA right of access)
- Privacy policy lists every sub-processor
- DPA signed with sub-processors handling EU user data
15. Release & rollout
- Feature flag for the new feature; can disable without redeploy
- Migration ordering: additive migration → deploy code that handles both shapes → contract migration after the deploy stabilizes
- Preview env mirrors production config (same DB engine, same auth provider) — caught surprises before prod
- Canary / staged rollout if supported (10% → 50% → 100%)
- Rollback plan documented and tested (last green deploy reachable in 1 click)
- Recent-deploy markers visible on dashboards
- Pre-launch smoke tests pass against the prod URL (without leaving artifacts)
16. Cost & abuse
- Billing alerts at the platform (Vercel, Cloudflare, AWS) and at every paid API (OpenAI, Anthropic, Resend, Twilio)
- Hard usage caps where the provider supports them
- Rate limits and quotas on anything that consumes paid resources
- One eyes-on monitoring for unusual spend / 5xx / signup-spam patterns post-launch
17. Day 1 / 2 ops
- On-call rotation set; one human paged for the SLO alert
- Incident response checklist (who, where, how) written down somewhere accessible
- Runbook for known recurring issues (DB connection blowups, queue backups, deploy rollback)
- Status page (Statuspage, BetterStack, or a public Vercel/Cloudflare-hosted page)
- Customer support inbox monitored —
support@, intercom, etc.
Output format when running this review
Write the result as a punch list, organized by section, with status next to each item:
## Auth & authz
✅ Tokens in httpOnly cookies (verified app/lib/session.ts)
❌ Authorization: /api/projects/[id] doesn't scope by userId — IDOR risk
⚠️ CSRF: Server Actions used everywhere except /api/legacy-import — gapDon't say "looks good" without naming the file you checked. If you didn't check, mark it ❓ and ask.
War story
A startup launched on Product Hunt without going through any pre-launch review. Within 6 hours: (1) NEXT_PUBLIC_OPENAI_API_KEY was scraped from the bundle, $9k charged before billing alerts caught it, (2) a missing .scope by userId let visitors paginate through every other user's saved chats, (3) a feature flag had been missing the kill switch, so the broken auth flow stayed live during the entire 8-hour incident. Each individual rule in the checklist would have caught one of these. The checklist itself would have caught all three.
Quick framing for the team
Going through this list takes ~1 hour for a small app. The cost of skipping it is measured in:
- Customer-data-leak posts on HN
- Refund queues
- Founder-eyes-shut-on-the-couch debugging at 2am
- "We just have to launch" turning into "we just had to launch with all the holes"
Not optional. Run it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

