Operations Manual

Standard operating procedures
Page ← Back

CostPlusDB Standard Operating Procedures

Version: 1.0 | Last Updated: October 19, 2025

This is a summary of our operations manual. For the complete detailed SOPs, see the full document on GitHub.


SOP Index

Pre-Launch (Setup Phase)

Daily Operations

Incident Response

Weekly/Monthly Maintenance

Emergency Procedures

Change Management


Key Infrastructure Details

VPS Setup & Security

PostgreSQL Configuration

Backup System

Monitoring Stack


Sample SOP: Morning Health Check (SOP-101)

Purpose: Verify all customer databases are healthy before the business day starts

Time Required: 10-15 minutes

Frequency: Daily (M-F, 8am ET)

Checklist

  1. Check Betterstack dashboard for any downtime alerts
  2. SSH into each VPS and run health check script
  3. Verify last night's backups completed successfully
  4. Check disk space on all servers (alert if < 30%)
  5. Review PostgreSQL logs for errors
  6. Check support inbox for any overnight tickets
  7. Document any issues in operations log

Expected Output

All 3 VPS servers responding
15/15 customer databases online
Backups completed: 15/15 successful
Disk space: 45-80% used (healthy range)
No errors in PostgreSQL logs
0 open support tickets

If any check fails, escalate to appropriate incident SOP.


Sample SOP: Database Down (SOP-201)

Priority: P0 (Critical - Drop everything)

Response Time: Immediate

Triage Steps

  1. Confirm the database is actually down (not network issue)
  2. Check if it's just one database or entire VPS
  3. Email customer immediately: "Investigating database outage, will update in 15 minutes"
  4. Check PostgreSQL logs for crash reason
  5. Attempt to restart PostgreSQL service
  6. If restart fails, check disk space / memory
  7. If VPS is unresponsive, contact provider support
  8. If database is corrupted, restore from latest backup

Communication Template

Subject: [INCIDENT] Database outage - investigating

Hi [Customer],

We detected that your database is currently down.

Status: Investigating
Started: [Time]
ETA: Restoring within 30 minutes

We're working on it right now and will update you
every 15 minutes until resolved.

- Jeremy

Resolution Steps

  1. Once database is back online, verify connections work
  2. Check data integrity (run sample queries)
  3. Email customer with root cause analysis
  4. Document incident in operations log
  5. If downtime > 1 hour, apply SLA credit (pro-rated refund)

Sample SOP: Customer Onboarding (SOP-102)

Purpose: Seamlessly onboard new paying customers

Time Required: 30-45 minutes

Pre-Provisioning

  1. Receive payment confirmation from Stripe
  2. Review customer's requirements (RAM, storage, provider)
  3. Verify VPS capacity exists (or provision new VPS if needed)
  4. Add customer to operations spreadsheet

Database Provisioning (SOP-103)

  1. SSH into appropriate VPS
  2. Run provisioning script: SUDO_PASS='pass' ./provision-customer-database.sh customer_name
  3. Script automatically:
  4. Add to backup schedule (if not auto-included)
  5. Add to monitoring alerts
  6. Test connection via pgBouncer: psql -h server_ip -p 6432 -U customer_user -d customer_db
  7. Send welcome email with connection details

Customer Welcome Email

Subject: Welcome to CostPlusDB - Your database is ready!

Hi [Customer],

Your PostgreSQL database is provisioned and ready to use.

Connection Details:
Host: [hostname].costplusdb.dev
Port: 5432
Database: [dbname]
User: [username]
Password: [secure_password]

SSL: Required (enforce in connection string)

Example connection string:
postgresql://[user]:[pass]@[host]:5432/[db]?sslmode=require

Support: jeremy@intentsolutions.io (4-hour SLA, M-F 9-6 ET)
Monitoring: You'll be added to uptime notifications

Questions? Reply to this email.

Thanks for choosing transparent pricing!
- Jeremy

Transparency Commitment

These SOPs are the actual procedures I follow to run CostPlusDB. They're not marketing fluff - they're living documents I update as I learn.

Why publish these?

For the full detailed SOPs (2000+ lines), see the complete operations manual on GitHub.


Questions about our operations? Email jeremy@intentsolutions.io