
The cross-posting engine was the reason ZyVOP existed. It was also the reason I had to leave Vercel.
Vercel charges for edge function execution time. Cross-posting to Dev.to, Hashnode, and Medium in a single job — authenticating with each API, handling retries, confirming canonical URLs — takes time. Unpredictable time. The kind that racks up charges silently and hits a hard timeout before the job finishes.
The risk wasn't just cost. It was a writer publishing a post, seeing a success message, and discovering hours later their article never appeared on Dev.to. That scenario was one slow API response away from happening.
That was enough. I moved to a VPS where background jobs run for as long as they need to, with no clock running.
What I Was Running On (And What It Was Costing)
ZyVOP is not a simple app. It runs a Next.js frontend, a NestJS backend, PostgreSQL, real-time notifications, an AI news feed, cross-posting to Dev.to, Hashnode, Medium, and Bluesky, 2FA, Groq AI integration, Brevo email, badges, a leaderboard, and a full API.
On Vercel, this was going to cost at minimum $20/month on the Pro plan. That's before the real costs kicked in.
Build minutes were the first problem. Every deployment consumes build time. Every pull request triggers a preview build. Since early 2026, Vercel defaults new Pro projects to Turbo machines, which cost significantly more per minute than Standard. A moderately active codebase doesn't need to do anything unusual to hit $40-60/month.
The edge function timeout was the fatal problem. Our cross-posting engine needs to authenticate with three or four external APIs per post, handle retries on failures, and confirm canonical URLs were accepted correctly. That takes time. Vercel's execution limits were cutting the job short before it finished — with no guarantee the user would see an error if the job failed mid-process.
I was building a platform whose core feature — cross-posting — was silently broken for any post that took longer than a few seconds to process. The writers I was trying to recruit were my most important early users. Losing their trust over a billing decision would have been unforgivable.
The New Stack
I moved everything to a VPS running Docker with Cloudflare Tunnel handling all inbound traffic. Here's what it costs now:
Service | Plan | Cost/month |
|---|---|---|
VPS (4 vCPU, 8GB RAM, 160GB SSD) | Paid | $8 |
Cloudflare Tunnel | Free | $0 |
Brevo (transactional + marketing email) | Free | $0 |
Groq AI (content intelligence) | Free tier | $0 |
X Premium (India, for DM outreach) | ₹427/mo | ~$5 |
Domain (zyvop.com) | Annual | ~$1 |
Total | ~$14/month |
The cross-posting engine that was at risk on Vercel has not failed once since the migration. The cross-posting job runs inside the NestJS backend with no execution time limit. When a writer publishes a post, it cross-posts reliably every time.
Why Each Line Item Is Worth Explaining
The VPS ($8/month)
Four vCPU, 8GB RAM, 160GB SSD. Everything runs here inside Docker: the Next.js frontend, the NestJS backend, and the Cloudflare Tunnel connector. Each container runs with restart: always, meaning everything comes back up automatically after any crash or server reboot.
The $8/month buys something Vercel cannot sell at any price: certainty. The cross-posting job runs inside the NestJS backend process for as long as it needs to. No execution time billing. No hard timeout ceiling. No clock running against you.
Cloudflare Tunnel (Free)
This is the most underrated piece of infrastructure in the stack and most developers who self-host don't use it.
Without Cloudflare Tunnel, self-hosting means opening ports, configuring Nginx, managing SSL certificates, and exposing your server's IP to the internet. It means your VPS is a target.
With Cloudflare Tunnel, none of that exists. A Docker container running cloudflared creates an outbound encrypted connection to Cloudflare's edge. All traffic enters through Cloudflare and travels through that tunnel to your server. No ports open. No SSL to manage. No IP exposed. Cloudflare's DDoS protection runs in front of everything automatically.
The entire setup is three things: a tunnel token from the Cloudflare dashboard, a Docker container that runs it, and a DNS record that Cloudflare creates for you automatically. The tunnel token goes in .env.production — not hardcoded in your Docker Compose file, which is a mistake that's easy to make and important to avoid.
One thing nobody warns you about: after you remove your site from Vercel and point DNS through Cloudflare, purge the Cloudflare cache immediately. Cloudflare will keep serving cached responses from the old Vercel origin for hours if you don't. The fix is one button in the dashboard or one API call.
Brevo (Free)
Brevo's free plan gives 300 emails per day and unlimited contacts. ZyVOP uses transactional emails for account events and marketing emails for the weekly digest and re-engagement flows. At 116 users in beta, the free tier has significant headroom.
When we outgrow it, the Starter plan is $9/month. The threshold for hitting it doesn't exist yet.
Groq (Free)
Groq powers ZyVOP's AI content intelligence — tag suggestions, related content recommendations, and the AI news feed curation. The free tier provides 30 requests per minute and 14,400 requests per day without requiring a credit card.
For our current usage that's more than enough. When it isn't, Groq's paid tier starts at $0.05 per million tokens for smaller models — one of the cheapest inference APIs available in 2026. Llama 3.3 70B, which is capable enough for almost everything we need, runs at $0.59 per million input tokens. The AI features will stay cheap for a long time.
X Premium India (₹427/month ≈ $5)
This is a distribution cost, not infrastructure. X Premium is required to send DMs to accounts you don't follow. Since cold outreach to developers is part of the growth strategy — and DMs outperform emails for reply rates — this is a necessary line item.
Honest assessment: the jury is still out on ROI. The DM deliverability is better. Whether that converts to writers is a separate question.
What This Costs at Scale
The $14/month number is a beta number. Here's how it changes as the platform grows:
Stage | Users | Brevo | Groq | VPS | X Premium | Total |
|---|---|---|---|---|---|---|
Now | ~100 | $0 | $0 | $8 | $5 | ~$14 |
Early growth | ~1,000 | $9 | ~$2 | $8 | $5 | ~$24 |
Real traction | ~10,000 | $25 | ~$15 | $20 | $5 | ~$65 |
Platform scale | ~100,000 | $65 | ~$80 | $60 | $5 | ~$210 |
These are estimates, not projections. The Groq number depends heavily on which models we use and how many AI requests we make per user. The VPS number depends on traffic patterns. The Brevo number is the most predictable.
The point is: a developer platform with real AI features, full email infrastructure, and auto cross-posting to four platforms costs about $210/month to run at 100,000 users. That's not a business problem. That's a solved problem.
The Number Nobody Talks About
Infrastructure cost is the wrong thing to optimise at this stage.
$14/month is $168/year. That's noise. The real cost of running ZyVOP is the hundreds of hours that went into building the cross-posting engine, the Markdown parser, the real-time notification system, the AI news feed, the leaderboard, the badge system, and the 2FA flow.
Time is the only resource that doesn't get cheaper at scale.
The infrastructure bill is something you can fix in an afternoon. The product decisions you get wrong in year one follow you for years. Spend your energy there.
ZyVOP is a developer publishing platform that auto cross-posts to Dev.to, Hashnode, Medium, and Bluesky in one click — with canonical URLs pointing back to your domain. Publish your first post here.
Comments (0)
Login to post a comment.