Skip to main content

Production Readiness Checklist

Date: October 14, 2025
Status: โš ๏ธ REVIEW REQUIRED BEFORE DEPLOYMENT


๐Ÿšจ CRITICAL - Security (MUST FIX)โ€‹

Environment Variablesโ€‹

  • .env added to .gitignore
  • VERIFY: .env was NEVER committed to git
    git log --all --full-history -- .env
    # Should return nothing
  • IF .env was committed: Remove from git history immediately
    git filter-branch --force --index-filter \
    'git rm --cached --ignore-unmatch .env' \
    --prune-empty --tag-name-filter cat -- --all
  • Review ALL commits for accidentally committed secrets
  • Rotate ANY API keys that were ever in git history

Vercel Environment Variablesโ€‹

Set these in Vercel Dashboard (NOT in .env file):

Required:

  • LEMON_SQUEEZY_API_KEY
  • LEMON_SQUEEZY_STORE_ID
  • LEMON_SQUEEZY_PRODUCT_ID
  • LEMON_SQUEEZY_VARIANT_ID
  • LEMON_SQUEEZY_WEBHOOK_SECRET
  • DOWNLOAD_SECRET (generate with: openssl rand -hex 32)
  • SITE_URL (e.g., https://photoflowseo.com)
  • ALLOWED_ORIGINS (your domain)

Optional (AI - BYOK mode):

  • AI_PROVIDER=mock (or leave unset for BYOK-only)
  • Do NOT set GEMINI_API_KEY (users provide their own)
  • Do NOT set OPENROUTER_API_KEY (users provide their own)

โœ… Code Qualityโ€‹

Server-Sideโ€‹

  • Security fix implemented (fail-secure license validation)
  • BYOK support added
  • Batch endpoint (1-50 images)
  • Gemini provider support
  • Rate limiting configured
  • Test all API endpoints manually
  • Test license validation
  • Test BYOK flow

Client-Side (Package)โ€‹

  • BYOK code in CaptionProvider.js
  • Batch processing support
  • README with BYOK docs
  • Package rebuilt (photoswipe-pro-5.4.4.tgz)
  • Test package installation
  • Test BYOK flow from user perspective

Git Statusโ€‹

Current modified files:

M build/build-pro-package.js
M server/ai/router.js
M src/pro/ai/CaptionProvider.js
M docs/*.md
M dist-pro/*
  • Review all changes
  • Commit changes with clear message
  • Tag release (e.g., v5.4.4-byok)

๐Ÿ“ฆ Package Deliveryโ€‹

Lemon Squeezy Setupโ€‹

  • Product created in Lemon Squeezy
  • Variants configured (if multiple tiers)
  • Webhook configured
    • URL: https://your-domain.com/api/webhooks/lemonsqueezy
    • Secret set in Vercel env vars
  • Test purchase flow (sandbox mode first)
  • Test license delivery email

Download Deliveryโ€‹

  • Package uploaded to Vercel: releases/photoswipe-pro-5.4.4.tgz
  • Download endpoint tested: /api/download
  • Download signature validation working
  • Test full download flow:
    1. Purchase
    2. Receive email with download link
    3. Download package
    4. Verify package integrity

๐ŸŒ Website & Documentationโ€‹

Websiteโ€‹

  • Update pricing page with BYOK model
    PhotoSwipe Pro: $49/year
    โœ“ All Pro features
    โœ“ AI caption generation (BYOK)
    โœ“ Your AI costs: $0-10/year (FREE Gemini tier)
  • Add "Get Free Gemini Key" CTA
  • Update features list
  • Add BYOK explanation
  • Update FAQ

Documentationโ€‹

  • docs/BYOK-BRING-YOUR-OWN-KEY.md created
  • docs/batch-caption-guide.md created
  • docs/AI-BUSINESS-MODEL.md updated
  • docs/SECURITY-FIX-AND-BYOK-COMPLETE.md created
  • Update main README.md
  • Update getting started guide
  • Create video tutorial (optional but recommended)

Help Centerโ€‹

  • "How to get Gemini API key" article
  • "BYOK setup guide" article
  • "Troubleshooting AI captions" article
  • FAQ: "Why do I need my own API key?"

๐Ÿงช Testingโ€‹

Manual Testingโ€‹

Local Testing:

  • Server starts without errors
  • All API endpoints respond
  • Health check works: http://localhost:4001/health
  • License validation works
  • BYOK flow works

API Testing:

# Test health
curl http://localhost:4001/health

# Test AI caption (should require API key)
curl -X POST http://localhost:4001/api/ai/caption \
-H "Content-Type: application/json" \
-d '{"url":"https://picsum.photos/800/600","licenseKey":"test"}'
# Should return: {"error":"api_key_required","byok":true}

# Test batch (should require API key)
curl -X POST http://localhost:4001/api/ai/caption/batch \
-H "Content-Type: application/json" \
-d '{"images":[{"url":"https://picsum.photos/800/600"}],"licenseKey":"test"}'
# Should return: {"error":"api_key_required","byok":true}

End-to-End Testingโ€‹

Full User Flow:

  1. User purchases PhotoSwipe Pro
  2. User receives download link
  3. User downloads package
  4. User installs package
  5. User gets Gemini API key
  6. User configures BYOK
  7. User generates captions successfully

Edge Cases:

  • Invalid license key โ†’ Proper error
  • Missing API key โ†’ Helpful BYOK error
  • Rate limit โ†’ 429 error
  • Invalid image URL โ†’ Proper error
  • Batch too large (>50) โ†’ Error with message

๐Ÿš€ Deploymentโ€‹

Pre-Deploymentโ€‹

  • All tests pass
  • No console errors
  • No console warnings in production mode
  • All environment variables set in Vercel
  • .env NOT committed to git
  • Secrets rotated if ever exposed

Vercel Deploymentโ€‹

# Deploy to preview first
vercel

# Test preview deployment
# - Test all API endpoints
# - Test purchase flow
# - Test download flow
# - Test BYOK flow

# Deploy to production
vercel --prod

Post-Deployment Checksโ€‹

  • Website loads
  • API endpoints work
  • Purchase flow works
  • License delivery works
  • Download works
  • BYOK works
  • No 500 errors in Vercel logs
  • No security warnings

๐Ÿ“Š Monitoringโ€‹

Setup Monitoringโ€‹

  • Vercel Analytics enabled
  • Error tracking setup (Sentry/etc)
  • Uptime monitoring (UptimeRobot/etc)
  • API endpoint monitoring
  • Purchase funnel tracking

Metrics to Watchโ€‹

First Week:

  • Successful purchases
  • Download completion rate
  • BYOK setup rate
  • Support tickets about BYOK
  • API error rate

Ongoing:

  • Monthly purchases
  • Churn rate
  • BYOK adoption rate
  • Average AI usage per user
  • Cost per customer (should be ~$0)

๐Ÿ“ง Marketing & Launchโ€‹

Pre-Launchโ€‹

  • Pricing page updated
  • Product description mentions BYOK
  • BYOK benefits highlighted
    • "Use your free Gemini API key"
    • "Pay only for what you use"
    • "No monthly quotas or limits"
  • Comparison table (vs competitors)

Launch Communicationsโ€‹

Email List:

  • Announcement email drafted
  • Explains BYOK clearly
  • Links to "Get Free Gemini Key" guide
  • Early bird discount (optional)

Social Media:

  • Twitter thread prepared
  • LinkedIn post prepared
  • Reddit posts prepared (r/webdev, r/ecommerce)
  • Dev.to article written

Launch Day:

  • Post on Product Hunt
  • Post on Hacker News (Show HN)
  • Email newsletter sent
  • Social media posts published

๐Ÿ†˜ Support Preparationโ€‹

Common Questionsโ€‹

Prepare answers for:

  1. "What is BYOK?"
  2. "How do I get a Gemini API key?"
  3. "How much will AI cost me?"
  4. "Can I use OpenRouter instead?"
  5. "Do I need PhotoSwipe Pro AND a Gemini key?"
  6. "Is my API key secure?"
  7. "What if Gemini raises prices?"

Support Resourcesโ€‹

  • BYOK FAQ page
  • Video: "Getting Your Free Gemini Key"
  • Video: "Setting Up BYOK in 2 Minutes"
  • Troubleshooting guide
  • Support email ready: support@photoflowseo.com

โš ๏ธ Known Issues / TODOsโ€‹

High Priorityโ€‹

  • CRITICAL: Verify .env was never committed
  • Test full purchase โ†’ download โ†’ use flow
  • Create onboarding email sequence
  • Add BYOK setup wizard to website

Medium Priorityโ€‹

  • Add usage dashboard for users
  • Add API key validation on client
  • Add cost estimator ("X images = $Y/month")
  • Create migration guide for existing users (if any)

Low Priorityโ€‹

  • Add analytics to track BYOK adoption
  • Add A/B test for pricing ($49 vs $79)
  • Consider tiered pricing later
  • Add referral program

๐Ÿ“‹ Final Checklistโ€‹

Before Pushing to Vercel:

  • .env in .gitignore โœ…
  • .env NEVER committed to git
  • All secrets in Vercel env vars (NOT in code)
  • All code changes committed
  • Release tagged (e.g., v5.4.4-byok)
  • Package tested locally
  • Server tested locally
  • No console errors
  • Documentation complete

Before Going Public:

  • Vercel preview tested
  • All API endpoints work
  • Purchase flow tested (sandbox)
  • Download flow tested
  • BYOK flow tested end-to-end
  • Pricing page updated
  • Support resources ready
  • Monitoring enabled

Launch Readiness:

  • All above items complete
  • Team briefed
  • Support ready
  • Marketing materials ready
  • Can handle support volume

๐ŸŽฏ Launch Decisionโ€‹

Status: โš ๏ธ NOT READY YET

Blockers:

  1. ๐Ÿšจ CRITICAL: Verify .env was never committed to git
  2. โš ๏ธ Must test full end-to-end flow
  3. โš ๏ธ Must set all Vercel environment variables
  4. โš ๏ธ Must test purchase flow
  5. โš ๏ธ Must update pricing page with BYOK

Estimated Time to Ready: 2-4 hours

Next Steps:

  1. Check git history for .env exposure
  2. Set Vercel environment variables
  3. Deploy to preview
  4. Test end-to-end
  5. Update website
  6. Deploy to production
  7. THEN publicize

โœ… When All Greenโ€‹

You're ready to launch when:

  • All โŒ are โœ…
  • No critical blockers
  • All tests pass
  • Monitoring enabled
  • Support ready

Then:

# Commit changes
git add .
git commit -m "feat: Add BYOK support with batch processing"
git tag v5.4.4-byok

# Deploy
vercel --prod

# Monitor
# Watch Vercel logs
# Watch error tracking
# Watch for support requests

# Launch!
# Send emails
# Post on social
# Celebrate ๐ŸŽ‰

Current Recommendation:

๐Ÿ›‘ DO NOT PUSH TO PRODUCTION YETโ€‹

Fix these first:

  1. Verify no secrets in git
  2. Set Vercel env vars
  3. Test end-to-end
  4. Update website
  5. Then deploy to preview
  6. Then deploy to production

Estimated time needed: 2-4 hours of focused work