Deploy checklist
Verify the project is production-ready with a comprehensive checklist.From its SKILL.md
npx -y skills add edulazaro/laraclaude --skill deploy-checklistAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.2 KB, as published. Nobody here has run it
Deploy Checklist
Verify that a Laravel project is production-ready by checking configuration, security, performance, and code quality. Reports a pass/fail checklist with remediation steps for each failure.
Subcommands
| Subcommand | Description |
|---|---|
| (no argument) | Run the full deployment readiness checklist. Read-only report. |
This is an analysis-only skill. It reports findings but does not modify files. Use the suggested remediation steps or other skills (e.g., lc:security-audit, lc:docker-check) to fix issues.
Checklist Categories
1. Environment Configuration
APP_DEBUG
- Check:
Read.envand verifyAPP_DEBUG=false. - Also check:
config/app.phpusesenv('APP_DEBUG', false)(not hardcodedtrue). - PASS:
APP_DEBUG=falseor not set (defaults to false) - FAIL:
APP_DEBUG=true - Why it matters: Debug mode exposes sensitive information (stack traces, env variables, database credentials) to end users.
APP_ENV
- Check:
Read.envand verifyAPP_ENV=production. - PASS:
APP_ENV=production - FAIL:
APP_ENV=localorAPP_ENV=staging - Why it matters: Some packages and features behave differently in production vs other environments.
APP_KEY
- Check:
APP_KEYis set and not empty in.env. - PASS:
APP_KEY=base64:...(non-empty, properly formatted) - FAIL:
APP_KEY=(empty) or missing - Why it matters: The app key is used for encryption. Without it, sessions, encrypted cookies, and other encrypted data are insecure.
APP_URL
- Check:
APP_URLuseshttps://(nothttp://). - PASS: Starts with
https:// - FAIL: Starts with
http://or ishttp://localhost - Why it matters: Insecure URLs affect generated links, asset URLs, and OAuth callbacks.
2. Cache Configuration
Cache Driver
- Check:
CACHE_STORE(orCACHE_DRIVER) in.env. - PASS:
redis,memcached,database, ordynamodb - WARN:
file(works but slower in production, not suitable for multi-server) - FAIL:
arrayornull(no persistent caching) - Why it matters: File cache is slow and doesn't work across multiple servers.
Session Driver
- Check:
SESSION_DRIVERin.env. - PASS:
redis,memcached,database - WARN:
file(works for single-server deployments) - FAIL:
arrayorcookie(no persistence or security concerns)
3. Queue Configuration
Queue Driver
- Check:
QUEUE_CONNECTIONin.env. - PASS:
redis,database,sqs,beanstalkd - FAIL:
sync(jobs execute inline, blocking the request) - Why it matters: Sync queue means email sending, file processing, and other jobs block HTTP requests.
4. Mail Configuration
Mail Driver
- Check:
MAIL_MAILERin.env. - PASS:
smtp,ses,mailgun,postmark,sendgrid - FAIL:
log(emails only written to log file, not sent) - FAIL:
array(emails discarded) - Why it matters: Users will not receive emails (password resets, notifications, invitations).
5. Security Checks
HTTPS Enforcement
- Check: Look for HTTPS enforcement mechanisms:
URL::forceScheme('https')inAppServiceProviderHTTPSmiddleware or\Illuminate\Http\Middleware\TrustProxies.htaccessor nginx config redirecting HTTP to HTTPS
- PASS: At least one HTTPS enforcement mechanism found
- FAIL: No HTTPS enforcement detected
CORS Configuration
- Check:
Readconfig/cors.php. - PASS:
allowed_originsis specific (not['*']in production) - WARN:
allowed_originsis['*'](allows all origins) - Why it matters: Wildcard CORS allows any website to make requests to your API.
Rate Limiting on Auth Routes
- Check: Look for rate limiting on login/registration routes.
- Use
Grepto findthrottlemiddleware on auth routes. - PASS: Auth routes have
throttlemiddleware - FAIL: No rate limiting on auth routes
- Why it matters: Without rate limiting, brute-force attacks are possible.
6. Storage and Files
Storage Link
- Check: Verify
public/storagesymlink exists. - Use
Bash:ls -la public/storage - PASS: Symlink exists and points to
storage/app/public - FAIL: Symlink missing (run
php artisan storage:link)
7. Code Quality
TODO/FIXME/HACK Comments
- Check: Use
Grepto findTODO,FIXME,HACK,XXX,TEMPin PHP and Blade files. - PASS: Zero found
- WARN: Found (list them with file paths and line numbers)
- Why it matters: These indicate incomplete or temporary code that should be resolved before production.
Debug Statements
- Check: Use
Grepto find debug statements that should not be in production:dd(,dump(,ray(in PHP filesconsole.log(in JS files (except in build/vendor)var_dump(,print_r(in PHP files
- PASS: Zero found
- FAIL: Debug statements found (list them)
.env in Version Control
- Check: Verify
.envis in.gitignore. - Use
Grepto check.gitignorefor.enventry. - PASS:
.envis gitignored - FAIL:
.envis not gitignored (security risk)
8. Database
Migrations Can Run
- Check: If Docker is available, note whether migrations appear consistent (do not actually run migrate:fresh -- that is destructive).
- Look for common migration issues by parsing files (FK ordering, duplicate columns).
- PASS: No obvious migration issues detected
- WARN: Potential issues found (reference
lc:migration-fresh-testfor full test)
Schema Dump
- Check: Look for
database/schema/*.sqlfiles. - WARN: Schema dump exists (may cause issues with migrate:fresh, data imports may be lost)
- PASS: No schema dump
9. Performance
Config Caching
- Check: Note whether config, route, and view caching commands should be run in deployment.
- Verify
config/app.phpdoes not useenv()outside of config files (breaks config caching). - Use
Grepto findenv(calls inapp/,routes/,resources/directories. - PASS: No
env()calls outside config files - FAIL:
env()used outside config (breaks config caching)
Eager Loading
- Note: Reference
lc:find-n-plus-onefor N+1 query detection.
Report Format
DEPLOYMENT READINESS CHECKLIST
================================
ENVIRONMENT
[PASS] APP_DEBUG = false
[FAIL] APP_ENV = local (should be 'production')
[PASS] APP_KEY is set
[FAIL] APP_URL uses http:// (should be https://)
CACHE & SESSIONS
[PASS] CACHE_STORE = redis
[PASS] SESSION_DRIVER = redis
QUEUE
[FAIL] QUEUE_CONNECTION = sync (should be redis/database/sqs)
MAIL
[PASS] MAIL_MAILER = ses
SECURITY
[PASS] HTTPS enforcement found (URL::forceScheme)
[WARN] CORS allows all origins (config/cors.php)
[PASS] Rate limiting on auth routes
[PASS] .env is gitignored
STORAGE
[PASS] Storage symlink exists
CODE QUALITY
[WARN] 3 TODO comments found
[FAIL] 2 dd() statements found
- app/Http/Controllers/DashboardController.php:45
- app/Services/PropertyService.php:102
DATABASE
[PASS] No obvious migration issues
[WARN] Schema dump exists at database/schema/mysql-schema.sql
PERFORMANCE
[FAIL] env() used outside config files:
- app/Services/StripeService.php:15
- app/Http/Middleware/CustomMiddleware.php:8
SUMMARY
========
Passed: 10
Warnings: 3
Failed: 4
Score: 59% ready
PRIORITY FIXES (do these first):
1. Set APP_ENV=production
2. Set QUEUE_CONNECTION=redis
3. Remove dd() statements
4. Move env() calls to config files
Notes
- This checklist is based on static analysis and configuration file inspection. Some checks require runtime verification.
- Not all warnings are blockers. Some are acceptable trade-offs for specific deployments (e.g.,
filecache on a single-server setup). - The checklist does not check infrastructure concerns (SSL certificates, server configuration, DNS, CDN).
- For security-specific deep analysis, use
lc:security-audit. - For Docker configuration, use
lc:docker-check. - For migration testing, use
lc:migration-fresh-test.