We're building a job board on Node.js + PostgreSQL, hosted on Hetzner VPS in Central Europe. Text-only listings, no media uploads. Core features: job listing creation, search, filtering, messaging between employers and candidates.
We're trying to understand the full scaling journey:
5k – 50k monthly users
What VPS size makes sense? (Hetzner CX22 = 2 vCPU, 4GB RAM, ~4 EUR/month)
Is a single VPS enough or should DB be separate from the start?
What hits the ceiling first – CPU, RAM, database connections?
50k – 300k monthly users
When do you split DB to a separate server?
When does caching (Redis) become necessary?
What are the gotchas with long-running Node.js in production – memory leaks, connection pool exhaustion?
300k – 1M monthly users
When do you add a second app server and load balancer?
How do you handle traffic spikes on a fixed-resource VPS (viral job listing, press coverage)?
At what point does Hetzner VPS stop making sense and you move to dedicated or cloud?
Race conditions on concurrent writes – how serious is this at scale with PostgreSQL?
Rough cost expectations at each stage on Hetzner would be very helpful.
At 1M users we'd be competing with established players – at what scale do you become a DDoS target and how do you protect a Node.js app on a VPS?
One thing I've learned from scaling content-heavy apps is that monthly users can be a misleading metric. 1M monthly users who browse a few pages a day is very different from 1M users actively searching, filtering, messaging, and refreshing listings all day.
For a text-only job board, I'd worry less about "when do I need multiple servers?" and more about query efficiency, indexes, connection pooling, and caching hot searches. PostgreSQL can go surprisingly far if those basics are done well.
Also, race conditions usually aren't the thing that bites first. Slow queries, missing indexes, N+1 patterns, and exhausted DB connections tend to show up much earlier. I've seen apps with far fewer users struggle because of inefficient queries, while others handled huge traffic on modest infrastructure because the data layer was designed carefully from day one.
Curious to hear from people who've actually taken a Node + PostgreSQL app from a single VPS into the hundreds of thousands of users what became the first real bottleneck for you?