14
11 Comments

Huge Vercel Costs, and Rebrand to Feather

It’s been 7 months since I posted an update on Indie Hackers. I thought it was time to get back to it.

Before I talk about what happened and what’s happening, I want to update you with some stats. Right now, MDX.one has around 989 users(29 paying), and has around $211 MRR.

Here’s what happened.

I got a bill of around $1.8k from Vercel. There is no way I would be able to afford to pay that much every month... and the bill is only going to increase as more and more users start using the platform. So, I had to close off new signups and think hard about how to proceed.

So, I closed off signups and tried to talk with the Vercel team to see if there is something I can do with my code to reduce the costs. I tried many things and nothing seemed to make any significant difference. I never thought I would hope for customers to churn, but during this time, I was getting happy when customers cancel their subscriptions because that would mean that I pay less to Vercel. I realized that Vercel is super expensive once you reach a certain scale. So, I started looking for alternatives.

Unfortunately, there aren’t any alternatives that can deploy Next.js as well as Vercel. Some of the features like ISR won’t work unless you use Vercel, and that is the thing that is costing me so much. This isn’t some problem that only I face. There are many indie hackers who faced this from Vercel.

Anyways, I later started moving everything to Cloudflare-related tech. I spent the next few months, only trying to reduce the costs. I was finally able to reduce the usage so much that I had to only pay the base $20/month to Vercel.

You can see the progression below.

image

There was a time when I used to get around 15,000 HB-Hrs (which in Vercel terms is equivalent to $7.7k)

image

There was a time when my bandwidth was around 5.6 TB (which is equivalent to $2.5k in Vercel terms)

So, if Vercel would have charged me at that time, my monthly bill would have been more than $10k.

After I started migrating all the duration-heavy API calls to Cloudflare Workers, my Vercel usage has gone down quite a bit. In Feb of this year, my bandwidth was about 83 GB and Execution is about 360 GB-Hours.

I thought this is a really good thing and decided to productize this into a new product in the hopes that other people can make use of my solution if they ever want to use Notion as a CMS for their SaaS products. That’s how https://usenotioncms.com was born. Right now, this has only one customer and he has been paying $29/month.

After seeing all this, I wanted to rebrand MDX.one to a completely different brand. The code is a complete rewrite, and so much better than MDX.one in many ways. Also, I never really liked the name MDX.one, it’s confusing and there are a number of things with the same name MDX. So, I started working on the rebrand of MDX.one to Feather...

... and this is where I am at currently. I completed the basic version of Feather 🪶 and also started inviting some users to the private beta. I even put up a simple landing page at https://feather.is, and have around 200 users on the waiting list.

A week ago, I sent a newsletter to the waiting list users asking if anyone would want to try out the private beta, and got a couple of responses. This is the email I sent to them. You will see a couple of screenshots of Feather inside that.

https://feather.is/images/dashboard-mockup.png

https://feather.is/images/settings-mockup.png

Will try to be more active on IH and start posting updates as I work on this new (rebranded) product Feather 🪶

Edit

Small but important change. ISR does work self-hosted, but Vercel adds additional features on top, like instant rollbacks and persisting generated pages to static storage.

(Apparently, ISR does work self-hosted, got this information from Lee from Vercel)

Also, Vercel recently released a new feature called on-demand ISR which could have solved my problems. There is still the problem of knowing when to call this on-demand ISR (Notion doesn't have webhooks yet), but yeah, on-demand ISR can be very helpful in cases like this. When I was migrating everything to Cloudflare Workers, on-demand ISR was not released yet.

, Founder of Icon for MDX.one
MDX.one
on March 20, 2022
  1. 3

    This is one of the reasons I always prefer VPS or dedicated servers: predictable pricing. I know exactly how much I'm going to pay and how many resources I get. So far, on none of the projects I worked on the "scaling" was an issue, even on some products getting millions of users, you can still manually scale dedicated servers. The biggest drawback is that there is some technical knowledge required in running your own server.

  2. 1

    Did you completely move away from Vercel?

  3. 1

    <h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1><h1>gg</h1>****<h1>gg</h1>

  4. 1

    Ahh yup, I'm currently facing this issue as well. On certain days, the bandwidth usage takes away like 200GBs (that's 20% of free bandwidth).

    I'm still trying to figure out if there's something we can modify in the code that'll save some costs. We serve as PWA and the service worker fetches like 50MBs to cache everything (on first request, which also happens after every deployment for active users).

    And, we get lots of DDOS attempts, which also takes away bandwidth. Vercel does provide basic DDOS out of the box though. However, sometimes, it doesn't work.

    Thank you for sharing your story. Gives me some ideas to work on as well.

  5. 1

    Always thought vercel was dead cheap and takes away the annoying deployment / scaling stuff but your post really got me thinking.

  6. 1

    Hi Bhanu,

    Thanks for sharing the story!

    When I started looking at NextJS hosting options I did google "is vercel expensive" which took me straight to this HN comment: https://news.ycombinator.com/item?id=27505549 "exorbitant bandwidth and serverless" charges.

    For companies that make millions, maybe it's OK as it's a fully managed hosting solution so removes a lot of overhead running a whole platform. But for us Indie Hackers, definitely Vercel capped at $20 and topped up by Cloudflare could be the solution.

    I've found this article on how to achieve Vercel + Cloudflare: https://vercel.com/support/articles/using-cloudflare-with-vercel

    And this FAQ: https://vercel.com/docs/concepts/edge-network/frequently-asked-questions#how-do-i-use-cloudflare-over-your-cdn-(disable-it)

    I've set "cache-control": "s-maxage=0" in vercel.json

    The FAQ page also says to set Origin Control: Off but I'm still to make this happen - I think it's this Cloudflare Page rule Origin Cache Control that needs to be turned off, and then during build time at Vercel invoke the Cloudflare API to purge all cache - is that how you've gone about it Bhanu? :)

    1. 1

      No, I just migrated everything to Remix and deployed it to Cloudflare Workers.

  7. 1

    Wow - that's indeed expensive!

    The screenshots look slick - did you start with a starter project or did you do this from scratch?

    1. 1

      Feather is done from scratch. I took the help of a designer to come up with the designs.

      1. 1

        Great. Thanks for the response.

Trending on Indie Hackers
710% Growth on my tiny productivity tool hit differently, here is what worked in January User Avatar 64 comments Write COLD DM like this and get clients easily User Avatar 28 comments You roasted my MVP. I listened. Here is v1.3 (Crash-proof & 100% Local) User Avatar 26 comments I built a tool to search all my messages (Slack, LinkedIn, Gmail, etc.) in one place because I was losing my mind. User Avatar 25 comments Why I built a 'dumb' reading app in the era of AI and Social Feeds User Avatar 20 comments Our clients have raised over $ 2.5 M in funding. Here’s what we actually do User Avatar 14 comments