Some checks failed
ParentFlow CI/CD Pipeline / Backend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Frontend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Security Scanning (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-app/maternal-app-backend dockerfile:Dockerfile.production name:backend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-web dockerfile:Dockerfile.production name:frontend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Development (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Lint and Test (push) Has been cancelled
CI/CD Pipeline / E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled
## Error Handling System - Add centralized error handling utilities (errorHandler.ts) - Create reusable error components (ErrorMessage, ErrorToast) - Implement multilingual error support (preserves backend error messages in 5 languages) - Update 15+ forms and components with consistent error handling - Auth forms: login, register, forgot-password - Family management: family page, join family dialog - Child management: child dialog - All tracking forms: feeding, sleep, diaper, medicine, growth, activity ## Production Build Fixes - Fix backend TypeScript errors: InviteCode.uses → InviteCode.useCount (5 instances) - Remove non-existent savedFamily variable from registration response - Fix admin panel TypeScript errors: SimpleMDE toolbar type, PieChart label type ## User Experience Improvements - Auto-uppercase invite code and share code inputs - Visual feedback for case conversion with helper text - Improved form validation with error codes ## CI/CD Pipeline - Create comprehensive production deployment checklist (PRODUCTION_DEPLOYMENT_CHECKLIST.md) - Add automated pre-deployment check script (pre-deploy-check.sh) - Validates frontend, backend, and admin panel builds - Checks git status, branch, and sync state - Verifies environment files and migrations - Add quick start deployment guide (DEPLOYMENT_QUICK_START.md) - Add production deployment automation template (deploy-production.sh) ## Cleanup - Remove outdated push notifications documentation files - Remove outdated PWA implementation plan 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
16 KiB
16 KiB
Production Deployment Checklist & CI/CD Pipeline
Project: Maternal App (ParentFlow) Last Updated: October 9, 2025 Environment: Development → Production
Table of Contents
- Pre-Deployment Checklist
- Development Server Steps
- Production Server Steps
- Database Sync Strategy
- Deployment Automation Scripts
- Rollback Procedure
- Post-Deployment Verification
Pre-Deployment Checklist
✅ Code Quality & Testing
- All TypeScript compilation errors resolved
- All ESLint warnings resolved
- Frontend production build succeeds (
npm run buildin maternal-web) - Backend production build succeeds (
npm run buildin maternal-app-backend) - Admin panel production build succeeds (
npm run buildin parentflow-admin) - All unit tests pass
- Critical user flows manually tested
- No console errors in browser
- API endpoints tested with Postman/curl
✅ Database
- All migrations created and tested locally
- Database schema documented
- Backup of production database created
- Migration rollback scripts ready
- Seed data scripts updated (if needed)
✅ Configuration
- Environment variables reviewed (
.env.production) - API URLs point to production endpoints
- Database connection strings verified
- Redis/cache configuration verified
- Email service configuration verified
- File upload paths/S3 buckets verified
- SSL certificates valid and not expiring soon
✅ Security
- No sensitive data in git history
- No API keys in source code
- Rate limiting configured
- CORS settings reviewed
- CSP headers configured
- Authentication flows tested
- Permission checks verified
✅ Performance
- Images optimized
- Code splitting implemented
- Lazy loading configured
- Database indexes reviewed
- Cache strategy implemented
- CDN configured (if applicable)
Development Server Steps
Location: /root/maternal-app/ on development server
Step 1: Clean Production Build (Frontend)
cd /root/maternal-app/maternal-web
# Clean previous builds
rm -rf .next
rm -rf node_modules/.cache
# Production build
npm run build
# Check for errors
# Expected: "✓ Compiled successfully" message
# Expected: No TypeScript or ESLint errors
Expected Output:
✓ Compiled successfully
✓ Generating static pages (39/39)
Route (app) Size First Load JS
...
Step 2: Production Build (Backend)
cd /root/maternal-app/maternal-app/maternal-app-backend
# Clean build directory
rm -rf dist
# Production build
npm run build
# Check for errors
# Expected: "Successfully compiled X files" message
Expected Output:
Successfully compiled XX files with swc
Step 2.5: Production Build (Admin Panel)
cd /root/maternal-app/parentflow-admin
# Clean previous builds
rm -rf .next
rm -rf node_modules/.cache
# Production build
npm run build
# Check for errors
# Expected: "✓ Compiled successfully" message
Expected Output:
✓ Compiled successfully
✓ Generating static pages (13/13)
Route (app) Size First Load JS
...
Step 3: Fix Any Build Errors
If errors occur:
- TypeScript errors: Fix type issues, missing imports
- Dependency errors: Run
npm install - Environment errors: Check
.envfiles
Common Issues:
- Missing
@types/*packages - Incorrect import paths
- Environment variable references
- Missing database entities/columns
Step 4: Database Migration Dry Run
cd /root/maternal-app/maternal-app/maternal-app-backend
# Check pending migrations
npm run migration:show
# Generate SQL for review (don't run yet)
npm run migration:generate -- -n ReviewChanges
# Review generated migration file in src/database/migrations/
Step 5: Commit to Git
cd /root/maternal-app
# Review changes
git status
git diff
# Stage changes
git add .
# Commit with descriptive message
git commit -m "feat: [Description of features/fixes]
- Feature 1 description
- Feature 2 description
- Bug fixes
- Database migrations: [List migration files]
Deployment: Ready for production"
# Push to repository
git push origin main
Step 6: Tag Release
# Create version tag
git tag -a v1.x.x -m "Release v1.x.x - [Brief description]"
git push origin v1.x.x
Production Server Steps
Location: Production server
Step 1: Backup Current State
# Backup database
pg_dump -U postgres -d parentflowprod -F c -f /backup/parentflowprod_$(date +%Y%m%d_%H%M%S).dump
# Backup application directory
tar -czf /backup/maternal-app_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/maternal-app
# Verify backups
ls -lh /backup/
Step 2: Pull Latest Code
cd /var/www/maternal-app
# Stash any local changes (shouldn't be any)
git stash
# Pull latest code
git fetch origin
git pull origin main
# Or checkout specific tag
# git checkout v1.x.x
# Verify correct version
git log -1 --oneline
Step 3: Install Dependencies
# Frontend
cd /var/www/maternal-app/maternal-web
npm ci --production
# Backend
cd /var/www/maternal-app/maternal-app/maternal-app-backend
npm ci --production
Step 4: Run Database Migrations
cd /var/www/maternal-app/maternal-app/maternal-app-backend
# Check pending migrations
npm run migration:show
# Run migrations
npm run migration:run
# Verify migrations applied
npm run migration:show
Step 5: Build Applications
# Build frontend
cd /var/www/maternal-app/maternal-web
npm run build
# Build backend
cd /var/www/maternal-app/maternal-app/maternal-app-backend
npm run build
Step 6: Restart Services
# Restart backend (PM2)
pm2 restart maternal-app-backend
# Restart frontend (PM2)
pm2 restart maternal-web
# Or restart all
pm2 restart all
# Check status
pm2 status
pm2 logs --lines 50
Step 7: Clear Caches
# Clear Redis cache
redis-cli FLUSHDB
# Clear Next.js cache (if needed)
cd /var/www/maternal-app/maternal-web
rm -rf .next/cache
Database Sync Strategy
Database Comparison Script
#!/bin/bash
# File: scripts/compare-databases.sh
DEV_DB="parentflowdev"
PROD_DB="parentflowprod"
DEV_HOST="10.0.0.207"
PROD_HOST="production-db-host"
echo "Comparing database schemas..."
# Export schemas
pg_dump -h $DEV_HOST -U postgres -d $DEV_DB --schema-only > /tmp/dev_schema.sql
pg_dump -h $PROD_HOST -U postgres -d $PROD_DB --schema-only > /tmp/prod_schema.sql
# Compare
diff /tmp/dev_schema.sql /tmp/prod_schema.sql > /tmp/schema_diff.txt
if [ -s /tmp/schema_diff.txt ]; then
echo "⚠️ Schemas differ! Review /tmp/schema_diff.txt"
cat /tmp/schema_diff.txt
else
echo "✅ Schemas are identical"
fi
Migration Workflow
Development → Production:
-
Create Migration (Dev):
npm run migration:generate -- -n DescriptiveName -
Test Migration (Dev):
npm run migration:run npm run migration:revert # Test rollback npm run migration:run # Re-apply -
Commit Migration (Dev):
git add src/database/migrations/* git commit -m "feat: Add [description] migration" -
Apply to Production (Prod):
git pull origin main npm run migration:run
Manual Database Sync
If migrations are out of sync:
-- Check migration history
SELECT * FROM migrations ORDER BY executed_at DESC LIMIT 10;
-- Compare tables
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name;
-- Compare columns for specific table
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'users'
ORDER BY ordinal_position;
Deployment Automation Scripts
Auto-Deploy Script (Production Server)
Create: /var/www/maternal-app/deploy.sh
#!/bin/bash
set -e # Exit on error
echo "======================================"
echo "🚀 Starting Production Deployment"
echo "======================================"
# Configuration
APP_DIR="/var/www/maternal-app"
BACKUP_DIR="/backup"
BRANCH="main"
LOG_FILE="/var/log/maternal-app-deploy-$(date +%Y%m%d_%H%M%S).log"
# Redirect output to log
exec 1> >(tee -a "$LOG_FILE")
exec 2>&1
echo "[$(date)] Deployment started"
# Step 1: Backup
echo "📦 Creating backup..."
pg_dump -U postgres -d parentflowprod -F c -f "$BACKUP_DIR/parentflowprod_$(date +%Y%m%d_%H%M%S).dump"
tar -czf "$BACKUP_DIR/maternal-app_$(date +%Y%m%d_%H%M%S).tar.gz" "$APP_DIR" --exclude node_modules --exclude .next --exclude dist
echo "✅ Backup complete"
# Step 2: Pull code
echo "📥 Pulling latest code..."
cd "$APP_DIR"
git stash
git fetch origin
git pull origin "$BRANCH"
COMMIT=$(git log -1 --oneline)
echo "✅ Updated to: $COMMIT"
# Step 3: Install dependencies
echo "📦 Installing dependencies..."
cd "$APP_DIR/maternal-web"
npm ci --production
cd "$APP_DIR/maternal-app/maternal-app-backend"
npm ci --production
echo "✅ Dependencies installed"
# Step 4: Run migrations
echo "🗄️ Running database migrations..."
cd "$APP_DIR/maternal-app/maternal-app-backend"
npm run migration:run
echo "✅ Migrations complete"
# Step 5: Build applications
echo "🔨 Building applications..."
cd "$APP_DIR/maternal-web"
npm run build
cd "$APP_DIR/maternal-app/maternal-app-backend"
npm run build
echo "✅ Build complete"
# Step 6: Restart services
echo "🔄 Restarting services..."
pm2 restart all
pm2 save
echo "✅ Services restarted"
# Step 7: Health check
echo "🏥 Running health checks..."
sleep 5
BACKEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3020/api/v1/health || echo "000")
FRONTEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3030 || echo "000")
if [ "$BACKEND_STATUS" = "200" ] && [ "$FRONTEND_STATUS" = "200" ]; then
echo "✅ Health checks passed"
echo "[$(date)] Deployment successful!"
echo "======================================"
echo "🎉 Deployment Complete"
echo "======================================"
else
echo "❌ Health checks failed! Backend: $BACKEND_STATUS, Frontend: $FRONTEND_STATUS"
echo "⚠️ Consider rollback if issues persist"
fi
# Send notification (optional)
# curl -X POST https://your-webhook-url -d "Deployment complete: $COMMIT"
Make executable:
chmod +x /var/www/maternal-app/deploy.sh
Usage:
/var/www/maternal-app/deploy.sh
Pre-Deploy Check Script (Development Server)
Create: /root/maternal-app/pre-deploy-check.sh
#!/bin/bash
set -e
echo "======================================"
echo "🔍 Pre-Deployment Checks"
echo "======================================"
ERRORS=0
# Check 1: Frontend build
echo "Checking frontend build..."
cd /root/maternal-app/maternal-web
if npm run build; then
echo "✅ Frontend build successful"
else
echo "❌ Frontend build failed"
ERRORS=$((ERRORS + 1))
fi
# Check 2: Backend build
echo "Checking backend build..."
cd /root/maternal-app/maternal-app/maternal-app-backend
if npm run build; then
echo "✅ Backend build successful"
else
echo "❌ Backend build failed"
ERRORS=$((ERRORS + 1))
fi
# Check 3: Uncommitted changes
echo "Checking for uncommitted changes..."
cd /root/maternal-app
if [ -z "$(git status --porcelain)" ]; then
echo "✅ No uncommitted changes"
else
echo "⚠️ Uncommitted changes detected:"
git status --short
fi
# Check 4: Pending migrations
echo "Checking for pending migrations..."
cd /root/maternal-app/maternal-app/maternal-app-backend
PENDING=$(npm run migration:show 2>&1 | grep "pending" | wc -l)
if [ "$PENDING" -gt 0 ]; then
echo "⚠️ $PENDING pending migrations found"
else
echo "✅ No pending migrations"
fi
# Summary
echo "======================================"
if [ $ERRORS -eq 0 ]; then
echo "✅ All checks passed! Ready to deploy."
echo "Next steps:"
echo " 1. git add ."
echo " 2. git commit -m 'your message'"
echo " 3. git push origin main"
echo " 4. Run deploy.sh on production server"
else
echo "❌ $ERRORS check(s) failed. Fix issues before deploying."
exit 1
fi
echo "======================================"
Make executable:
chmod +x /root/maternal-app/pre-deploy-check.sh
Usage:
cd /root/maternal-app
./pre-deploy-check.sh
Rollback Procedure
Quick Rollback (if deployment fails)
# 1. Restore previous code
cd /var/www/maternal-app
git log -5 --oneline # Find previous commit
git reset --hard <previous-commit-hash>
# 2. Restore database (if migrations ran)
pg_restore -U postgres -d parentflowprod -c /backup/parentflowprod_YYYYMMDD_HHMMSS.dump
# 3. Rebuild
cd /var/www/maternal-app/maternal-web && npm run build
cd /var/www/maternal-app/maternal-app/maternal-app-backend && npm run build
# 4. Restart services
pm2 restart all
Migration Rollback
cd /var/www/maternal-app/maternal-app/maternal-app-backend
# Rollback last migration
npm run migration:revert
# Rollback multiple migrations
npm run migration:revert # Repeat N times
Post-Deployment Verification
Checklist
- Application accessible at production URL
- Login functionality works
- API endpoints responding
- Database queries working
- File uploads working
- Email sending working
- WebSocket connections working
- No JavaScript errors in console
- PM2 processes healthy (
pm2 status) - Database connections stable
- SSL certificate valid
- Logs clean (no critical errors)
Health Check Commands
# Backend health
curl https://api.maternal.noru1.ro/api/v1/health
# Frontend accessibility
curl https://maternal.noru1.ro
# Check PM2 status
pm2 status
pm2 logs --lines 100
# Check database connections
psql -U postgres -d parentflowprod -c "SELECT COUNT(*) FROM users;"
# Monitor logs
tail -f /var/log/maternal-app/*.log
pm2 logs --lines 100 --raw
Monitoring
# CPU/Memory usage
pm2 monit
# Database size
psql -U postgres -c "SELECT pg_size_pretty(pg_database_size('parentflowprod'));"
# Active connections
psql -U postgres -d parentflowprod -c "SELECT count(*) FROM pg_stat_activity;"
Deployment Frequency
Recommended Schedule:
- Hotfixes: As needed (critical bugs)
- Minor Updates: Weekly (Friday afternoons)
- Major Releases: Bi-weekly or monthly
- Database Migrations: Bundle with releases
Best Practices:
- Deploy during low-traffic hours
- Have team member available for 1 hour post-deployment
- Test in staging environment first (if available)
- Communicate deployment to users (if user-facing changes)
Environment Variables
Development (.env.local)
DATABASE_HOST=10.0.0.207
DATABASE_NAME=parentflowdev
NODE_ENV=development
API_URL=http://localhost:3020
Production (.env.production)
DATABASE_HOST=production-db-host
DATABASE_NAME=parentflowprod
NODE_ENV=production
API_URL=https://api.maternal.noru1.ro
Security Note: Never commit .env files to git!
Emergency Contacts
- Developer: [Your contact]
- DevOps: [DevOps contact]
- Database Admin: [DBA contact]
- Server Access: [Server details]
Changelog Template
# Release v1.x.x - YYYY-MM-DD
## New Features
- Feature 1
- Feature 2
## Improvements
- Improvement 1
- Improvement 2
## Bug Fixes
- Fix 1
- Fix 2
## Database Changes
- Migration 1: Description
- Migration 2: Description
## Breaking Changes
- None / List breaking changes
## Deployment Notes
- Special instructions if any
Last Updated: October 9, 2025 Version: 1.0 Maintained By: Development Team