This. Immutable assets are the only sane way. I do the same with my photography presets. Hash in filename, cache forever. S3-compatible with Wasabi, $7/TB, no egress. But I need VPS for the API that generates signed links. Can't do that on shared.
My first $1M year, still on shared hosting
Yes, I know. I have some BR customer, they complain download slow. I think to add BunnyCDN Brazil edge but price is €0.045/GB, expensive for me. Maybe I try Vultr São Paulo for origin mirror, but then I need sync. Complicated lah.
For now, BR customer is small %, I tell them download at night. Not perfect but revenue still come.
When did YOU last test a restore? Exactly.
Kidding. Mostly. But seriously: where's your source? Git? Zip on laptop? If Hetzner suspends tomorrow, how fast to new host? I keep client sites with 3-2-1, but my own projects get lazy treatment until disaster. Don't be me.
I was wrong about missing zero, but I'm still stuck on this. $1M at what price point? If course is $500, that's 2000 sales. If $50, that's 20,000. Conversion rate matters for hosting load. 20k sales from how much traffic?
Shared host handles 2000 sales fine. 20k with 2GB downloads each, even with CDN, that's 40k purge requests, cache invalidations, support emails. Different operational shape.
$297 course. 3,367 sales this year. I have assistant for support email, not me. Landing page is simple, no login, customer pay Stripe, get email with BunnyCDN link. Link expire 72 hour, enough for download.
I test restore: I have GitHub repo with static site, deploy with GitHub Action to Hetzner FTP. If Hetzner die, I change DNS to Netlify free tier in 5 minute. Not perfect but I survive.
FTP in 2024? Yikes. SFTP at least? Hetzner shared supports SSH, use rsync. Faster, resume on fail, checksum verify.
Also Netlify free tier has 100GB bandwidth limit. Your CDN handles delivery but if DNS flip happens, origin traffic hits Netlify fast. Check their overage. Not free forever.
This thread went from "shared hosting impossible" to "actually here's the full architecture" and now it's just optimization tips. Classic.
I'm archiving this for my "build cheap" folder. BunnyCDN + static origin is valid if you're actually static. Most people say "static" then need a contact form, then auth, then... creep. Rangga's discipline is the real trick.
Agreed. The stack is boring by design. Boring is good. I spent years chasing Kubernetes for side projects, now I run a $5 Vultr with Caddy and call it peace.
One addition: Stripe webhook needs endpoint. Rangga says no PHP, but you need something to catch webhook, send email, create BunnyCDN signed URL. What runs that? Not static.
Zapier lah. Stripe webhook to Zapier, Zapier send email with BunnyCDN link. $20/month Zapier, I know, not pure static. But I count that as business tool, not hosting. Hosting is €4.
Maybe one day I move to n8n self-host, but Zapier works, I focus on course content.