AeThex-Connect/PHASE6-DEPLOYMENT-CHECKLIST.md
2026-01-10 08:00:59 +00:00

13 KiB

🚀 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

# 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

-- 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

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

  • 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

⚠️ 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:

# 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=<generate-new-secret>
SESSION_SECRET=<generate-new-secret>
ENCRYPTION_KEY=<generate-32-char-key>

# Database
DATABASE_URL=postgresql://user:password@host:5432/database

# CORS
CORS_ORIGINS=https://yourdomain.com,https://www.yourdomain.com

Generate Secrets:

# 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):

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

# On production server
cd /path/to/AeThex-Connect
git pull origin main

4.2 Install Dependencies

# Install/update backend dependencies
npm install --production

# Install/update frontend dependencies
cd src/frontend
npm install
npm run build

4.3 Restart Services

# Using PM2
pm2 restart aethex-connect

# Or systemd
sudo systemctl restart aethex-connect

# Or Docker
docker-compose restart

Verification:

# 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

# 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)

# 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:

# 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

-- 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

# SSH to server
ssh user@server

# Stop services
pm2 stop aethex-connect

# Revert to previous version
git checkout <previous-commit-hash>

# Rollback database (if needed)
psql $DATABASE_URL -f rollback_006.sql

# Restart services
pm2 restart aethex-connect

Database Rollback 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

# 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


📞 Emergency Contacts


Last Updated: January 10, 2026
Version: 1.0
Status: Ready for Production