# 🚀 Phase 6 Deployment Checklist Use this checklist to deploy Phase 6: Premium Monetization to production. --- ## Prerequisites - [ ] Production server ready (Node.js 18+, PostgreSQL 14+) - [ ] Stripe account verified and activated - [ ] Domain configured with SSL/TLS - [ ] GitHub repository access - [ ] Database backups configured --- ## 1. Database Setup ### Apply Migration ```bash # SSH into production server ssh user@your-server.com # Navigate to project directory cd /path/to/AeThex-Connect # Apply migration npm run migrate # Or manually with psql psql $DATABASE_URL -f src/backend/database/migrations/006_premium_monetization.sql ``` ### Verify Migration ```sql -- Check tables created SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'premium_%' OR table_name LIKE '%_domain%'; -- Verify feature_limits populated SELECT * FROM feature_limits; -- Should show 3 rows: free, premium, enterprise -- Check user column added SELECT column_name FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'premium_tier'; ``` **Status:** ☐ Complete --- ## 2. Stripe Configuration ### 2.1 Create Products & Prices Go to [Stripe Dashboard → Products](https://dashboard.stripe.com/products) **Premium Yearly:** - [ ] Create product "AeThex Connect Premium (Yearly)" - [ ] Set price: $100.00 USD - [ ] Billing: Recurring, interval = 1 year - [ ] Copy Price ID: `price_...` - [ ] Save to `STRIPE_PREMIUM_YEARLY_PRICE_ID` **Premium Monthly:** - [ ] Create product "AeThex Connect Premium (Monthly)" - [ ] Set price: $10.00 USD - [ ] Billing: Recurring, interval = 1 month - [ ] Copy Price ID: `price_...` - [ ] Save to `STRIPE_PREMIUM_MONTHLY_PRICE_ID` **Enterprise:** - [ ] Create product "AeThex Connect Enterprise" - [ ] Set price: $500.00 USD (or custom) - [ ] Billing: Recurring, interval = 1 month - [ ] Copy Price ID: `price_...` - [ ] Save to `STRIPE_ENTERPRISE_PRICE_ID` ### 2.2 Configure Webhook Go to [Stripe Dashboard → Developers → Webhooks](https://dashboard.stripe.com/webhooks) - [ ] Click "Add endpoint" - [ ] Endpoint URL: `https://yourdomain.com/webhooks/stripe` - [ ] Select events to send: - [ ] `customer.subscription.created` - [ ] `customer.subscription.updated` - [ ] `customer.subscription.deleted` - [ ] `invoice.payment_succeeded` - [ ] `invoice.payment_failed` - [ ] `customer.subscription.trial_will_end` - [ ] Click "Add endpoint" - [ ] Copy signing secret (starts with `whsec_`) - [ ] Save to `STRIPE_WEBHOOK_SECRET` ### 2.3 Get API Keys Go to [Stripe Dashboard → Developers → API Keys](https://dashboard.stripe.com/apikeys) **⚠️ Important:** Switch to **LIVE MODE** (toggle in top right) - [ ] Copy "Publishable key" (starts with `pk_live_`) - [ ] Save to `STRIPE_PUBLISHABLE_KEY` - [ ] Reveal "Secret key" (starts with `sk_live_`) - [ ] Save to `STRIPE_SECRET_KEY` **Status:** ☐ Complete --- ## 3. Environment Variables ### 3.1 Backend Environment Edit production `.env` file: ```bash # Switch to production NODE_ENV=production # Stripe LIVE keys (not test!) STRIPE_SECRET_KEY=sk_live_... STRIPE_PUBLISHABLE_KEY=pk_live_... STRIPE_WEBHOOK_SECRET=whsec_... # Stripe Price IDs (from step 2.1) STRIPE_PREMIUM_YEARLY_PRICE_ID=price_... STRIPE_PREMIUM_MONTHLY_PRICE_ID=price_... STRIPE_ENTERPRISE_PRICE_ID=price_... # Blockchain (optional - Phase 7) POLYGON_RPC_URL=https://polygon-mainnet.g.alchemy.com/v2/YOUR_KEY FREENAME_REGISTRY_ADDRESS=0x... DOMAIN_MINTER_PRIVATE_KEY=0x... # Use hardware wallet! # Platform settings PLATFORM_FEE_PERCENTAGE=10 FREE_MAX_FRIENDS=5 FREE_STORAGE_GB=0.1 PREMIUM_STORAGE_GB=10 ENTERPRISE_STORAGE_GB=-1 # Security JWT_SECRET= SESSION_SECRET= ENCRYPTION_KEY= # Database DATABASE_URL=postgresql://user:password@host:5432/database # CORS CORS_ORIGINS=https://yourdomain.com,https://www.yourdomain.com ``` **Generate Secrets:** ```bash # Generate JWT secret node -e "console.log(require('crypto').randomBytes(64).toString('hex'))" # Generate encryption key (32 chars) node -e "console.log(require('crypto').randomBytes(16).toString('hex'))" ``` **Verification:** - [ ] All secrets generated and unique - [ ] Stripe keys are LIVE (not test) - [ ] Database URL is production - [ ] CORS origins match production domain - [ ] NODE_ENV=production ### 3.2 Frontend Environment Edit frontend `.env` (or `.env.production`): ```bash REACT_APP_STRIPE_PUBLISHABLE_KEY=pk_live_... REACT_APP_API_URL=https://yourdomain.com/api REACT_APP_SOCKET_URL=https://yourdomain.com ``` **Verification:** - [ ] Publishable key is LIVE (not test) - [ ] API URL is production - [ ] Socket URL is production **Status:** ☐ Complete --- ## 4. Code Deployment ### 4.1 Pull Latest Code ```bash # On production server cd /path/to/AeThex-Connect git pull origin main ``` ### 4.2 Install Dependencies ```bash # Install/update backend dependencies npm install --production # Install/update frontend dependencies cd src/frontend npm install npm run build ``` ### 4.3 Restart Services ```bash # Using PM2 pm2 restart aethex-connect # Or systemd sudo systemctl restart aethex-connect # Or Docker docker-compose restart ``` **Verification:** ```bash # Check server is running curl https://yourdomain.com/health # Check logs pm2 logs aethex-connect # or sudo journalctl -u aethex-connect -f ``` **Status:** ☐ Complete --- ## 5. Security Hardening ### 5.1 SSL/TLS Configuration - [ ] SSL certificate installed (Let's Encrypt, etc.) - [ ] HTTPS enforced (HTTP redirects to HTTPS) - [ ] Certificate auto-renewal configured - [ ] Strong cipher suites enabled ### 5.2 Firewall & Network - [ ] Firewall configured (allow 80, 443, deny all else) - [ ] Rate limiting enabled - [ ] DDoS protection active - [ ] Database not publicly accessible ### 5.3 Application Security - [ ] CORS configured for production domain only - [ ] Helmet.js security headers enabled - [ ] SQL injection protection (parameterized queries) - [ ] XSS protection enabled - [ ] CSRF protection enabled ### 5.4 Secrets Management - [ ] Environment variables not in Git - [ ] `.env` file has restricted permissions (600) - [ ] Database credentials rotated - [ ] API keys documented in secure location **Status:** ☐ Complete --- ## 6. Testing ### 6.1 Test Webhook Endpoint ```bash # Test webhook is accessible curl -X POST https://yourdomain.com/webhooks/stripe \ -H "Content-Type: application/json" \ -d '{"test": true}' # Should return 400 (no signature) - that's good! # Should NOT return 404 or 500 ``` ### 6.2 Test Stripe Webhook (Stripe CLI) ```bash # Install Stripe CLI brew install stripe/stripe-cli/stripe # Login stripe login # Forward events to production (for testing) stripe listen --forward-to https://yourdomain.com/webhooks/stripe ``` ### 6.3 Test Premium Upgrade Flow **Using Browser:** 1. [ ] Go to `https://yourdomain.com/premium/upgrade` 2. [ ] Select "Premium" tier 3. [ ] Enter domain name 4. [ ] Check availability works 5. [ ] Enter test card: `4242 4242 4242 4242` 6. [ ] Complete subscription 7. [ ] Verify redirect to success page 8. [ ] Check Stripe dashboard for subscription **Using API:** ```bash # Get auth token first TOKEN="your-jwt-token" # Test domain availability curl -X POST https://yourdomain.com/api/premium/domains/check-availability \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain": "testuser.aethex"}' # Test subscription creation curl -X POST https://yourdomain.com/api/premium/subscribe \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tier": "premium", "paymentMethodId": "pm_card_visa", "billingPeriod": "yearly" }' ``` ### 6.4 Verify Database Updates ```sql -- Check subscription created SELECT * FROM premium_subscriptions WHERE user_id = 'test-user-id' ORDER BY created_at DESC LIMIT 1; -- Check user tier updated SELECT id, email, premium_tier FROM users WHERE id = 'test-user-id'; -- Check payment logged SELECT * FROM payment_transactions ORDER BY created_at DESC LIMIT 5; ``` **Status:** ☐ Complete --- ## 7. Monitoring Setup ### 7.1 Application Monitoring - [ ] Error tracking configured (Sentry, Rollbar, etc.) - [ ] Log aggregation setup (Loggly, Papertrail, etc.) - [ ] Uptime monitoring (Pingdom, UptimeRobot, etc.) - [ ] Performance monitoring (New Relic, Datadog, etc.) ### 7.2 Stripe Monitoring - [ ] Email notifications enabled in Stripe - [ ] Failed payment alerts configured - [ ] Revenue reports scheduled ### 7.3 Alerts - [ ] Server down alerts - [ ] Database connection errors - [ ] Failed payment alerts - [ ] High error rate alerts - [ ] Disk space warnings **Status:** ☐ Complete --- ## 8. Backup & Recovery ### 8.1 Database Backups - [ ] Automated daily backups configured - [ ] Backup retention policy set (30+ days) - [ ] Backup restoration tested - [ ] Off-site backup storage ### 8.2 Code Backups - [ ] Git repository backed up - [ ] Environment variables documented - [ ] Configuration files backed up ### 8.3 Disaster Recovery Plan - [ ] Recovery procedures documented - [ ] RTO/RPO defined - [ ] Failover tested **Status:** ☐ Complete --- ## 9. Documentation ### 9.1 Internal Documentation - [ ] Deployment procedures documented - [ ] Rollback procedures documented - [ ] Environment variables documented - [ ] API endpoints documented - [ ] Database schema documented ### 9.2 User Documentation - [ ] Pricing page updated - [ ] FAQ created - [ ] Support documentation - [ ] Terms of service updated - [ ] Privacy policy updated **Status:** ☐ Complete --- ## 10. Launch Checklist ### Pre-Launch - [ ] All tests passing - [ ] No errors in production logs - [ ] Stripe test mode disabled - [ ] Analytics tracking enabled - [ ] Customer support ready ### Launch - [ ] Announce premium features - [ ] Monitor error rates - [ ] Watch for failed payments - [ ] Check webhook processing - [ ] Monitor server load ### Post-Launch (First 24 Hours) - [ ] Review error logs - [ ] Check payment success rate - [ ] Verify webhook sync - [ ] Monitor user signups - [ ] Track revenue ### Post-Launch (First Week) - [ ] Analyze conversion rates - [ ] Review customer feedback - [ ] Fix any issues - [ ] Optimize performance - [ ] Plan improvements **Status:** ☐ Complete --- ## 11. Rollback Plan If issues occur, follow this rollback procedure: ### Immediate Rollback ```bash # SSH to server ssh user@server # Stop services pm2 stop aethex-connect # Revert to previous version git checkout # Rollback database (if needed) psql $DATABASE_URL -f rollback_006.sql # Restart services pm2 restart aethex-connect ``` ### Database Rollback SQL ```sql -- Drop Phase 6 tables (if needed) DROP TABLE IF EXISTS payment_transactions CASCADE; DROP TABLE IF EXISTS enterprise_team_members CASCADE; DROP TABLE IF EXISTS usage_analytics CASCADE; DROP TABLE IF EXISTS domain_transfers CASCADE; DROP TABLE IF EXISTS enterprise_accounts CASCADE; DROP TABLE IF EXISTS blockchain_domains CASCADE; DROP TABLE IF EXISTS feature_limits CASCADE; DROP TABLE IF EXISTS premium_subscriptions CASCADE; -- Remove user column ALTER TABLE users DROP COLUMN IF EXISTS premium_tier; ``` **Status:** ☐ Documented --- ## 12. Success Metrics Track these metrics post-launch: ### Revenue Metrics - [ ] Premium subscriptions created - [ ] Enterprise accounts created - [ ] Domain registrations - [ ] Marketplace sales - [ ] MRR (Monthly Recurring Revenue) - [ ] ARR (Annual Recurring Revenue) ### Technical Metrics - [ ] Uptime % - [ ] API response times - [ ] Failed payment rate - [ ] Webhook success rate - [ ] Error rate ### User Metrics - [ ] Free to premium conversion % - [ ] Premium to enterprise conversion % - [ ] Churn rate - [ ] Customer lifetime value - [ ] Net promoter score **Status:** ☐ Tracking --- ## 🎉 Deployment Complete! Once all checkboxes are ✅, Phase 6 is live! ### Quick Verification Commands ```bash # Check server health curl https://yourdomain.com/health # Check API curl https://yourdomain.com/api/premium/marketplace # Check webhook stripe listen --forward-to https://yourdomain.com/webhooks/stripe # Check database psql $DATABASE_URL -c "SELECT COUNT(*) FROM premium_subscriptions;" # Check logs pm2 logs aethex-connect --lines 50 ``` ### Support Resources - **Stripe Dashboard:** https://dashboard.stripe.com - **Stripe Logs:** https://dashboard.stripe.com/logs - **Server Logs:** `pm2 logs` or `/var/log/` - **Database:** `psql $DATABASE_URL` - **Documentation:** See PHASE6-COMPLETE.md --- ## 📞 Emergency Contacts - **DevOps Lead:** name@company.com - **Backend Lead:** name@company.com - **Stripe Support:** https://support.stripe.com - **Server Provider:** support link --- **Last Updated:** January 10, 2026 **Version:** 1.0 **Status:** Ready for Production ✅