How we run an entire travel SaaS on a single EC2 instance and pull off a $6.99/yr subscription price.

Roamcalm
4 min readJul 27, 2024

--

For starters, Roamcalm aims to be one app for having everything you need when you are travelling. This includes creating detailed itineraries, securely storing documents, splitting expenses with friends, tracking flights and ensuring you can access your plans even without an internet connection.

But apart from all these, what’s interesting is the price tag we put on the app — a mere $6.99 per year. Let’s break down how exactly this was possible.

Less is More

When we started building Roamcalm, there was one thing we were sure of: The infra will remain absolutely minimal unless we get to a point where we are forced to upgrade. This means, saying no to a lot of things. The entirety of Roamcalm runs on a single finely tuned Linux machine on Hetzner Cloud. This might sound surprising in today’s cloud-centric world, but unless you are Google, most scaling problems exist only in your imagination.

Our suite does not have a lot of microservices running. Rather, we believe in a tri-service approach:

  1. An auth service.
  2. The main API backend.
  3. A real-time service.

We are technically not in need of a real-time service yet, so excluding that, we have exactly two services running that power the entire feature set of Roamcalm. Having an Auth service separate ensures that we can scale to a microservice pattern just in case we need it in the future. Simple architecture also means we need to do so much less DevOps work to do.

Saas ❌

We were insanely conscious about not choosing a SaaS for every problem. SaaS services are convenient, but they can quickly become extremely pricy before you know, primarily because most of them have a generous free tier and a Rubik’s cube pricing model.

The internet has made us believe that rolling our own auth is hard. It is true to some extent, but there are tons of open libraries you can use to build secure authentication logic for your app. It is honestly not too bad if you are okay to put *some* effort for auth. Even if auth isn’t your specialty, self-hosting an open source is also an option.

For Roamcalm, we used the Liquid Auth Service (This was actually a homegrown OAuth server, but we open sourced it so everyone can benefit).

Similarly, the city and country selectors in the trip creation screen use in-house datasets to bring back suggestions. We know this is not ideal for long term, but we are evaluating other place suggestion providers. This works for now.

The only external providers we rely on are Unsplash for images, and Cloudflare R2 for storage, both of which are pretty reputed.

Tech Stack Based on Efficiency

On the backend side, Node.js and MongoDB are already known for being a breeze at powering highly available networking and non-compute intensive applications. Roamcalm checks both of these boxes, so this was perfect.

Also, a fun fact: The word Mongo comes from the word Humongous. Great for writing and reading a truck load of data that don’t require complex relations.

Roamcalm also takes caching very seriously to improve performance. Redis is our speed demon in this process.

For the frontend, we slapped React + Vite on the browser. Yeah, no SSR. We just want to be happy, please let us client-side render in peace.

The entire application weighs close to 1.5 megabytes, that, when gzipped, is around 500KB. But hey! It’s 2024, phones have gotten powerful, the internet has gotten fast and cheap, so why put unnecessary load on the server?

With that being said, CSR also makes the application feel extremely snappy with smooth animations powered by Framer. It’s a win-win for everyone.

Skip the App Store

It costs $99 a year to keep your app on the Apple App Store, which does not involve the 30% fee that Apple charges for every sale you make on your subscription. Let alone the fact that you cannot use your own payment gateway in iOS apps and instruct your users to pay through that according to Apple’s policies.

Google takes a 15% cut on Android.

There is almost too less of an incentive to write native apps for each of these platforms separately.

God bless whoever came up with Progressive Web Apps. Single codebase, every platform. PWAs are apps that are embedded in the browser but run without the browser frame. We’ve optimized the experience so much that once Roamcalm is in PWA mode, it is virtually impossible to tell that you are running the app on a browser engine. Try it yourself!

The Result?

Roamcalm — Travel planner and expense manager

An app that provides more value than what you pay for. Instead of spending a fortune on fancy tech and complicated systems, we focused on creating a lean, mean, travel-planning machine. Saying no to fancy things had brought us a long way in saving cost and also keeping things simple to maintain.

And we pass on most of these savings to you.

What you pay for is what’s required to keep the server running and keep your files saved, and just a little more for us to keep going.

With ❤️,

Roamcalm.com

--

--

No responses yet