The Old Stack: $312/Month That Was Quietly Killing Me
I didn't realize how much I was spending until I did an honest audit. Here's the full list — every subscription, every charge, adding up to a number that made me actually feel sick:
| Tool | Purpose | Monthly Cost |
|---|---|---|
| Zapier | Automation workflows | $49.00 |
| ConvertKit | Email marketing | $79.00 |
| AWS EC2 + S3 | Hosting + storage | $87.00 |
| Vercel Pro | Frontend deployment | $20.00 |
| Airtable | Database / CRM | $24.00 |
| Notion Team | Docs + knowledge base | $16.00 |
| Loom Business | Screen recording | $12.50 |
| Calendly | Scheduling | $12.00 |
| Typeform | Forms | $12.50 |
| Total | $312.00/month | |
The painful part: most of these tools weren't doing anything I couldn't replicate with 50 lines of code and a free tier API. I was paying for UX convenience, not actual capability. Once I understood that, the migration became obvious.
The Replacements: Tool-by-Tool
Zapier is JavaScript hidden behind a GUI. Every "Zap" is just: trigger → transform data → call API. Cloudflare Workers does this natively, with more control and zero cost.
I moved 12 Zapier workflows to Workers Cron jobs. The most complex one — pulling new orders from Supabase, generating a PDF receipt, storing it in R2, and emailing it to the customer — took 3 hours to migrate and 87 lines of code. It runs more reliably, with better error handling, and I can read the actual code when something breaks.
ConvertKit is a database (subscribers), a scheduler (sequences), and an API sender (email delivery). I replaced each component with a cheaper equivalent:
- Subscribers: Supabase table — free
- Sequence logic: Cloudflare Worker with KV state — free
- Email delivery: AWS SES at $0.10/1,000 emails (vs ConvertKit's $79 flat rate)
My email volume is roughly 8,000 emails/month. On SES: $0.80/month. On ConvertKit: $79/month. The migration took a weekend and saved me $77.20 every month after that.
I was running a t3.small EC2 instance ($16.82/month) as an API server, paying for data transfer ($12/month), and using S3 for storage ($8/month for storage + $51 in egress). The entire thing was overengineered for my actual workload.
Workers replaced the EC2 API server entirely. R2 replaced S3 — with zero egress fees, the storage math alone saved me $51/month. Pages replaced my Vercel deployment. Total infra cost: $0.55/month for R2 storage on the non-free tier.
Cloudflare Pages free tier is strictly better than Vercel Pro for static sites and Jamstack deployments: unlimited builds, unlimited bandwidth, custom domains, edge caching across 300+ locations. The only thing Vercel does better is Next.js Server Components — if you're not using SvelteKit or Next SSR, Pages wins every time.
I deploy vanilla HTML/CSS/JS (no SvelteKit, by design). Pages deploys in 12 seconds via git push. Zero cost. Zero configuration drift.
Airtable is a pretty UI on top of a database. For a developer, the UI isn't the value — the data and the API are. Supabase gives you real PostgreSQL, a REST API, a decent UI, and 500MB storage for free. That's more than enough for a 5-product business.
The migration: exported Airtable data as CSV, imported into Supabase, updated my Workers to use the Supabase REST API instead of Airtable's API. Took 2 hours. Saved $288/year.
I was using Notion Team for two things: personal knowledge management and as a pseudo-CMS for my site's FAQ and product descriptions. I downgraded to Notion Personal (free, unlimited pages) and moved the programmatic data into Cloudflare KV. KV is a key-value store with a REST API — perfect for structured content that needs to be read fast from Workers.
The Loom free tier gives you 25 videos at 5 minutes each. For product demos, that's plenty. For long-form tutorials, I record locally with OBS (free) and store the video in R2 at $0.015/GB. No subscription, and my files don't disappear if I cancel.
Cal.com is open-source Calendly with a generous free tier. Same Google Calendar integration, same embeddable widget, same email confirmations. I switched in 20 minutes and have never noticed a difference.
A Typeform is just an HTML form that POSTs to a database. I built my own with ~30 lines of vanilla JS and a Worker that writes submissions to Supabase. Took 45 minutes. Eliminated $150/year.
The New Stack: $6.83/Month Total
| Tool | Replaces | Monthly Cost |
|---|---|---|
| Cloudflare Workers | Zapier + EC2 + Vercel | $0.00 |
| Cloudflare Pages | Vercel Pro | $0.00 |
| Cloudflare R2 | S3 + Loom storage | $0.55 |
| Cloudflare KV | Part of Airtable + Notion | $0.00 |
| Supabase Free | Airtable + part of ConvertKit | $0.00 |
| AWS SES | ConvertKit | $0.80 |
| Cal.com Free | Calendly | $0.00 |
| Claude Haiku API | Various AI workflows | $4.28 |
| Notion Personal | Notion Team | $0.00 |
| Total | $5.63 – $6.83 | |
The Migration Mindset: Why Most People Don't Do This
I talk to a lot of solopreneurs who know they're overpaying for SaaS. The reason they don't migrate isn't technical — it's cognitive. There are three mental blockers:
1. "Migration takes too long." The actual migration time for my entire $312/month stack was 3 weekends. That's maybe 24 hours of work. At $305.17 in monthly savings, the ROI was 100% in week 5 of the first month post-migration. Every subsequent month is pure savings — now approaching $4,200 saved over the past 14 months.
2. "Free tiers have hidden costs." The Cloudflare free tier is genuinely free, not "free until you need it to actually work." The limits are designed for developer workloads, not as a marketing trick. I've never hit a limit on Workers, KV, or Pages. R2 is the only one where I pay, and $0.55 is not a hidden cost.
3. "I'll lose features." In every case, I gained features. My custom Typeform can collect any data format. My Workers email system has custom retry logic and better deliverability than ConvertKit's shared IP pool. My R2 setup has no file size limits. Control beats convenience for technical founders.
What to Migrate First
If you're starting from scratch, here's the priority order based on ROI:
- Hosting (highest ROI) — Migrate from Vercel/Netlify paid to Cloudflare Pages. 20 minutes, saves $20+/month immediately.
- Storage — Replace S3 with R2. One config change. Saves egress fees immediately.
- Automation — Replace your top 3 Zapier workflows with Workers. Takes a weekend but eliminates $49+/month.
- Database — Move from Airtable to Supabase. CSV export → import is straightforward.
- Email — Most complex but highest dollar savings. Budget a full weekend.
Get the Migration Templates
The Zero-Cost AI Kit includes the Worker templates, Supabase schemas, email sequence logic, and migration checklists I used to replace my $312/month SaaS stack. Skip the trial and error — get the production code that's already running.
Get the Zero-Cost AI Kit — $47