E2E encrypted chat (X3DH + Double Ratchet, Signal Protocol). Server: asyncio TCP + TLS, MySQL. Clients: PyQt6 GUI + CLI. Secrets (.env, TLS keys, Cloudflare token), runtime data and mobile clients (separate repos) are gitignored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
11 KiB
KEC-18 Operational Cost Analysis
Date: 2026-03-27
Executive Summary
- The absolute cheapest workable production setup for roughly 100 concurrent users is one Contabo
Cloud VPS 10atEUR4.50/mo, plus a domain, free Let's Encrypt TLS, free-tier SMTP, and low-cost object backup. That lands aroundEUR5.8-6.5/mo(USD6.7-7.5/mo) if email volume stays inside a free tier. - The more realistic "do not hate yourself later" floor is about
EUR11-16/mo(USD12.7-18.5/mo) once you include a paid SMTP plan or more backup headroom. - For 500 to 1,000 total users, Contabo remains extremely cheap. The main constraint is not raw VPS price; it is operational headroom, backup discipline, and the app's current default connection cap.
- For 5,000 total users, I would stop using a single-node layout. Split app and MySQL onto separate VPSes and keep uploads/backups external or on a storage-optimized node.
What I Sized From The Codebase
Relevant defaults in the current code:
protocol.pydefaults toMAX_MESSAGE_BYTES=1 MiB,MAX_IMAGE_BYTES=5 MiB,MAX_FILE_BYTES=50 MiB.server.pydefaults toMAX_CONNECTIONS_GLOBAL=200,MAX_CONNECTIONS_PER_IP=10,MAX_UPLOADS_GLOBAL=200,MAX_UPLOADS_PER_USER=5.db.pydefaults toDB_POOL_SIZE=10.server.pydefaults toTHREAD_POOL_SIZE=40.README.mdandscaling.mdindicate the server is an asyncio TCP relay with synchronous MySQL calls pushed behindasyncio.to_thread(), which is lightweight for small deployments but still means DB latency and connection pooling matter.
Implication:
100 concurrent usersis feasible on a very small VPS.More than 200 simultaneously connected devicesis not feasible with the current default connection limit unless configuration is raised and load-tested.- File storage, not CPU, becomes the first recurring cost question if usage shifts from chat-heavy to attachment-heavy.
Assumptions
To make the tiers comparable, I used these planning assumptions:
- The
500,1,000, and5,000tiers are treated as total users, not fully concurrent users. - Peak concurrent devices:
- 100-user tier: about 100
- 500-user tier: about 75 to 125
- 1,000-user tier: about 125 to 175
- 5,000-user tier: about 300 to 500
- Average retained encrypted upload footprint:
- 100 users: 100 GB
- 500 users: 250 GB
- 1,000 users: 500 GB
- 5,000 users: 1 TB
- SMTP use is limited to registration codes and lightweight transactional mail, not marketing mail.
- EUR to USD conversion uses the ECB reference
1 EUR = 1.1539 USDvisible on 2026-03-27 in the ECB currency converter.
Current Vendor Pricing Used
Contabo
Official Contabo pricing page shows:
Cloud VPS 10:3 vCPU,8 GB RAM,75 GB NVMe,32 TB traffic,EUR4.50/moCloud VPS 20:6 vCPU,12 GB RAM,100 GB NVMe,32 TB traffic,EUR7.00/moCloud VPS 30:8 vCPU,24 GB RAM,200 GB NVMe,32 TB traffic,EUR14.00/moCloud VPS 40:12 vCPU,48 GB RAM,250 GB NVMe,32 TB traffic,EUR25.00/moStorage VPS 10:2 vCPU,4 GB RAM,300 GB SSD,EUR4.50/moStorage VPS 20:3 vCPU,8 GB RAM,400 GB SSD,EUR7.00/mo
Note: Contabo also publishes separate location-fee pricing. For example, the location-fee page shows Cloud VPS 10 in United States (Central) at EUR0.95/mo extra, for EUR5.45/mo total. Base prices above are the standard pricing page numbers.
Domain, TLS, SMTP, Backup, Monitoring, Agent Costs
- Domain: Porkbun shows
.comatUSD11.08/yr, which is aboutEUR9.60/yrorEUR0.80/mo. - TLS: Let's Encrypt certificates are free.
- SMTP:
- MailerSend free plan:
500 emails/month - MailerSend Hobby:
EUR5.15/mofor5,000 emails/month - MailerSend Starter: pricing page shows
EUR25/moand50,000 emails/month
- MailerSend free plan:
- Backup/object storage:
- Backblaze B2 pricing page shows
USD6/TB/mopay-as-you-go. - First
10 GBis free.
- Backblaze B2 pricing page shows
- Monitoring:
- Self-hosted Uptime Kuma can be run on your own server at zero direct license cost.
- Managed alternative: UptimeRobot free plan exists; paid plans start at about
USD8/mo.
- OpenAI / Codex API:
- OpenAI pricing page currently shows
gpt-5.4standard atUSD2.50 / 1M input tokensandUSD15.00 / 1M output tokens. gpt-5.4-ministandard isUSD0.75 / 1M inputandUSD4.50 / 1M output.
- OpenAI pricing page currently shows
Recommended Infrastructure By Tier
Tier A: Minimum Viable, about 100 concurrent users
Recommended stack:
- 1 x
Cloud VPS 10 - Let's Encrypt
- 1
.comdomain - Backblaze B2 for backups
- MailerSend free or Hobby depending email volume
Why this is enough:
- 8 GB RAM is adequate for Python app + MySQL on one box at this size.
- 75 GB NVMe is enough if uploads are modest and older media is backed up externally.
- 32 TB traffic is far above what this workload should consume.
Estimated monthly cost:
- VPS:
EUR4.50/USD5.19 - Domain amortized monthly:
EUR0.80/USD0.92 - Backup at about 100 GB retained: about
EUR0.47/USD0.54 - TLS:
EUR0 - SMTP:
- Free-tier case:
EUR0 - Safer paid case:
EUR5.15/USD5.94
- Free-tier case:
Total:
- Absolute floor: about
EUR5.77/mo/USD6.65/mo - Safer operating floor: about
EUR10.92/mo/USD12.60/mo
Tier B: About 500 total users
Recommended stack:
- 1 x
Cloud VPS 20 - Backblaze B2 backups
- MailerSend Hobby
Why:
- More CPU and RAM headroom for MySQL buffering, background cleanup, and multi-device behavior.
- 100 GB NVMe is enough for DB + hot uploads if colder data is backed up externally.
Estimated monthly cost:
- VPS:
EUR7.00/USD8.08 - Domain:
EUR0.80/USD0.92 - Backup at about 250 GB retained: about
EUR1.25/USD1.44 - TLS:
EUR0 - SMTP Hobby:
EUR5.15/USD5.94
Total:
- About
EUR14.20/mo/USD16.38/mo
Tier C: About 1,000 total users
Recommended stack:
- 1 x
Cloud VPS 30 - Backblaze B2 backups
- MailerSend Hobby or Starter
Why:
24 GB RAMgives useful cache headroom for MySQL and smoother bursts.- This is the point where a single node is still cheap, but monitoring and restore discipline matter more than raw VPS price.
Estimated monthly cost:
- VPS:
EUR14.00/USD16.15 - Domain:
EUR0.80/USD0.92 - Backup at about 500 GB retained: about
EUR2.55/USD2.94 - TLS:
EUR0 - SMTP Hobby:
EUR5.15/USD5.94
Total:
- Lean setup: about
EUR22.50/mo/USD25.95/mo
If you want higher mail headroom:
- Swap SMTP to Starter at
EUR25/mo - New total: about
EUR42.35/mo/USD48.87/mo
Tier D: About 5,000 total users
Recommended stack:
- 1 x
Cloud VPS 20for app server - 1 x
Cloud VPS 20for MySQL - Backblaze B2 backups for media + DB dumps
- MailerSend Starter
Why I would split here:
- The current codebase is still operationally simple. A two-node layout buys more reliability than buying one oversized single VPS.
- Separate failure domains help during DB spikes, backup jobs, and incident response.
- This tier likely exceeds the current default
MAX_CONNECTIONS_GLOBAL=200if user concurrency climbs, so configuration and load testing become mandatory.
Estimated monthly cost:
- App VPS:
EUR7.00/USD8.08 - DB VPS:
EUR7.00/USD8.08 - Domain:
EUR0.80/USD0.92 - Backup at about 1 TB retained: about
EUR5.15/USD5.94 - TLS:
EUR0 - SMTP Starter:
EUR25.00/USD28.85
Total:
- About
EUR44.95/mo/USD51.87/mo
Alternative:
- If you strongly prefer a single-node layout,
Cloud VPS 40plus backups is still cheap, but I would consider it worse operationally than two smaller nodes.
Minimum Viable Budget Answer
If the question is "what is the absolute minimum monthly spend to run this for about 100 concurrent users," the answer is:
- Roughly
EUR5.8-6.5/mo(USD6.7-7.5/mo) with:Cloud VPS 10- one cheap domain
- free TLS
- free SMTP tier
- minimal external backup
If the question is "what is the minimum I would actually recommend for production without pretending backups and mail do not exist," the answer is:
- Roughly
EUR11-16/mo(USD12.7-18.5/mo)
Additional Infrastructure Recommendations
TLS certificates
- Use Let's Encrypt.
- Direct recurring certificate cost:
EUR0.
Domain
- Budget about
EUR10/yrtoEUR15/yr. - Using current Porkbun
.compricing, a normal.comis aboutEUR9.60/yr.
Backups
- Do not rely only on local VPS storage.
- Cheapest clean option: nightly MySQL dumps + uploaded file backup to Backblaze B2.
- Ballpark backup cost at current B2 pricing:
- 100 GB: about
EUR0.47/mo - 250 GB: about
EUR1.25/mo - 500 GB: about
EUR2.55/mo - 1 TB: about
EUR5.15/mo
- 100 GB: about
SMTP relay
- Free tier is enough for early registration-code traffic.
- Move to Hobby quickly once real users arrive; it is still cheap and removes needless friction.
Monitoring
- Cheapest option: self-host Uptime Kuma.
- Managed option: UptimeRobot free or paid.
- I would treat managed monitoring as optional until there is paying traffic.
Agent Operational Cost Estimate
These costs depend entirely on token volume, not server size.
Using current OpenAI standard pricing:
gpt-5.4:USD2.50 / 1M input,USD15.00 / 1M outputgpt-5.4-mini:USD0.75 / 1M input,USD4.50 / 1M output
Illustrative monthly spend per active engineering agent:
- Light usage,
gpt-5.4-mini:- 10M input + 2M output
- about
USD16.50/mo/EUR14.30/mo
- Moderate usage,
gpt-5.4:- 10M input + 2M output
- about
USD55.00/mo/EUR47.66/mo
- Heavy usage,
gpt-5.4:- 40M input + 8M output
- about
USD220.00/mo/EUR190.66/mo
For a small team of 3 active agents, a realistic monthly AI tooling band is:
- Lean: about
EUR43-50/mo - Moderate: about
EUR143/mo - Heavy: about
EUR570+/mo
Risks And Constraints
- The code currently defaults to
MAX_CONNECTIONS_GLOBAL=200. If "500 users" or "1,000 users" means concurrent devices, current defaults are not enough. - The cheapest single-node layout mixes app, MySQL, and hot uploads on one VPS. That is acceptable early, but it increases recovery risk during disk or instance failure.
- Attachment-heavy usage can outgrow cheap NVMe faster than message traffic will outgrow CPU.
- SMTP, domain, and monitoring are trivial costs compared with the cost of not having backups.
Final Recommendation
If I had to choose one path now:
- Launch on
Cloud VPS 10if the immediate target is only about100 concurrent usersand budget is extremely tight. - Launch on
Cloud VPS 20if you want a safer early-production baseline without materially changing cost. - Move to a split app/DB layout by the time you are targeting
5,000 total usersor any scenario above200 concurrently connected devices.
In short: Contabo pricing is not the bottleneck here. Operational discipline, connection-limit tuning, and backup/storage policy are the real budget drivers once the app starts seeing real usage.