ProductionReady
productionready
FROM PROTOTYPE TO PRODUCTION
← Blog

The audit checklist: 47 things we check before any AI-built app goes live

By Herbert Samuels · Founder of ProductionReady.co. Thirty years in software development, architecture, cloud infrastructure, and IT management across marketing technology, advertising, healthcare, and financial services.

We use a 47-point checklist when reviewing AI-built applications, and we're publishing it so builders can run the same first pass themselves.

The checklist covers eight areas that repeatedly produce real findings in the applications we review. It's intended as a practical pre-launch gate, not a theoretical security framework.

Skip an item when it genuinely doesn't apply. When it does apply and you can't confidently answer it, treat that uncertainty as something to investigate before launch.

Category 1: Authentication and session management

  1. Passwords are hashed using bcrypt, scrypt, or Argon2, never MD5, SHA-1, or plain text
  2. Authentication tokens have a defined expiration (access tokens: 15–60 minutes; refresh tokens: days to weeks)
  3. Tokens are stored in HTTP-only, Secure, SameSite cookies, not localStorage or sessionStorage
  4. A token refresh mechanism exists so users aren't forced to re-authenticate constantly
  5. Failed login attempts are rate-limited (no more than 5–10 attempts per minute per IP)
  6. Failed login attempts are logged with timestamp, IP address, and targeted account
  7. Password reset tokens are cryptographically random, single-use, and expire within 30 minutes
  8. Session revocation is possible, at minimum "log out everywhere" on password change
  9. Multi-factor authentication is available for admin accounts (recommended for all users in sensitive applications)

Category 2: Authorization and access control

  1. Every API endpoint independently verifies the user's identity, with no reliance on frontend route guards
  2. Every data endpoint verifies the user is authorized to access the specific resource (not just authenticated)
  3. Resource IDs in URLs and API requests are validated against the requesting user's permissions
  4. Role-based access control is enforced server-side, not through client-side UI hiding
  5. Admin endpoints are protected by role verification, not obscurity
  6. Privilege escalation isn't possible through parameter manipulation (changing role values, user IDs, or permission flags in requests)

Category 3: Input validation and injection prevention

  1. Every API endpoint validates incoming data against an expected schema (types, lengths, required fields, allowed values)
  2. Validation happens server-side, with frontend validation treated as UX only
  3. Database queries use parameterized queries or a properly configured ORM, no string concatenation
  4. User input rendered in HTML is escaped or sanitized to prevent XSS
  5. File uploads are restricted by type (whitelist, not blacklist), size, and validated content (not just extension)
  6. Uploaded files are stored with non-predictable names (UUIDs) and can't be executed by the server
  7. API request body size limits are enforced

Category 4: Data exposure and privacy

  1. API responses return only the fields the client needs, with no full database records sent to the frontend for client-side filtering
  2. Sensitive data (passwords, tokens, SSNs, full credit card numbers) is never included in API responses
  3. Personally identifiable information is identified and its storage, transmission, and retention are documented
  4. Data at rest is encrypted for sensitive fields (beyond database-level encryption)
  5. Data in transit uses TLS: HTTPS is enforced, HTTP requests redirect to HTTPS
  6. Error responses don't expose internal details (stack traces, database schemas, file paths, library versions)

Category 5: Infrastructure and configuration

  1. All credentials, API keys, and secrets are stored in environment variables or a secrets manager, never in source code
  2. The .env file (or equivalent) is in .gitignore and has never been committed to the repository
  3. Development and production environments are separate: different databases, different API keys, different configurations
  4. CORS is restricted to specific allowed origins, not Access-Control-Allow-Origin: *
  5. Security headers are set: Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, Strict-Transport-Security
  6. The application runs with minimum necessary permissions: no root/admin execution in production
  7. Default credentials for databases, admin panels, and third-party services have been changed

Category 6: Error handling and logging

  1. Unhandled exceptions are caught and return generic error messages to the client
  2. Detailed error information is logged server-side with timestamps and request context
  3. Authentication events (login, logout, failed attempts, password changes) are logged
  4. Data modification events (create, update, delete) are logged with user identity and timestamp
  5. Logs are stored separately from the application and retained for a defined period
  6. Logs don't contain sensitive data (passwords, tokens, full credit card numbers)

Category 7: API security

  1. Rate limiting is applied to all public-facing endpoints, with stricter limits on authentication and expensive operations
  2. API versioning is implemented to prevent breaking changes for existing consumers
  3. Request authentication is required for all non-public endpoints
  4. Pagination is implemented on listing endpoints to prevent full-database dumps

Category 8: Dependency and deployment health

  1. Dependencies are pinned to specific versions (no ranges or "latest")
  2. A health check endpoint exists for monitoring services to verify the application is running and connected to its data stores

How to use the checklist

A 'no' in Categories 1 through 4 usually represents a direct security weakness that should be addressed before launch because those categories cover authentication, authorization, input handling and data exposure.

A 'no' in Categories 5 through 8 is more often an operational or maintenance risk. It may not create an immediate breach, but it makes failures more likely and incident response more difficult.

It's common for an AI-built application that hasn't been hardened to produce more 'no' answers than 'yes.' That result is useful because it identifies exactly where the initial feature build stopped short of production engineering.

Use the checklist as a pre-launch gate or as a way to decide whether a deeper review is warranted.

Free Production Readiness Check

See where your app stands in 5 minutes.

16 questions across 8 categories: authentication, secrets, data layer, API security, and more. Get a scored report with prioritized recommendations.

ProductionReady
productionready
FROM PROTOTYPE TO PRODUCTION
Security audits, hardening, and backend builds for vibe-coded applications.
Company