Operations Runbook
Routine Operations
Start / Stop / Restart
pm2 start whatidotoday
pm2 stop whatidotoday
pm2 restart whatidotoday
pm2 status
pm2 logs whatidotoday --lines 200
Health Verification
- HTTPS app reachable
- Login works
- Dashboard, analytics, team pages load
- CSV/PDF export works
- Team settings and automation pages load for owner/admin
Scheduled Export Jobs
Manual run:
npm run cron:exports
Cron example (every hour):
0 * * * * cd /var/www/whatidotoday && npm run cron:exports >> /var/log/widt-cron.log 2>&1
Backups
Daily DB backup:
PGPASSWORD='<db_pass>' pg_dump -h localhost -U widt_user -d what_i_do_today > /var/backups/widt_$(date +%F).sql
Restore:
PGPASSWORD='<db_pass>' psql -h localhost -U widt_user -d what_i_do_today < /var/backups/widt_YYYY-MM-DD.sql
Incident Playbook
App Down
- Check PM2 status/logs
- Check Nginx logs (
journalctl) - Confirm DB connectivity
- Restart services
Rate Limit Complaints
- Confirm request pattern and source IP
- Validate that traffic is expected
- If needed, tune limits in
src/lib/security.ts
Export Failures
- Check
/api/export/*responses - Inspect app logs for scope/range/permission errors
- Verify write permissions for
exports/directory - Run
npm run cron:exportsmanually to reproduce
AI Summary Failures
- Verify
OPENAI_API_KEY - Check outbound network access
- Confirm fallback narrative still generates
Maintenance Checklist
git pull
npm install
npm run prisma:generate
# apply schema change to DB
npm run prisma:migrate
npm run lint
npm test
npm run build
pm2 restart whatidotoday