Skip to content
Go back

How we run Roamcalm on a single Linux machine and pull off a $14.99/yr subscription price.

Roamcalm

We built Roamcalm to handle everything you need while traveling. It turns forwarded emails into an itinerary, handles expense splitting, tracks flights, and works completely offline. But apart from all these, what’s interesting is the price tag we put on the app - a mere $14.99 per year. Here is the story behind that number.


A Single Linux Box

From day one, we made a choice: keep the infrastructure dead simple until we’re forced to upgrade. That meant saying ‘no’ to a lot of fluff. The entirety of Roamcalm runs on a single finely tuned Linux machine on Hetzner Cloud. Sounds 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:

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.


The Joy of Self-Hosting

We were incredibly careful about avoiding the ‘SaaS trap.’ It’s easy to sign up for a dozen services when they have free tiers, 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 trip thumbnails, Cloudflare R2 for storage and Gemini for the email - 2 - itineray, all of which are pretty reputed.


Tech Stack Based on Efficiency

On the backend, we stuck with Node.js and MongoDB. They are perfect for exactly what Roamcalm is: a highly available network app that doesn’t need heavy computation.

(Fun fact: ‘Mongo’ actually comes from ‘Humongous’—it’s built for handling massive amounts of data without the headache of complex relationships.)

For performance, we take caching seriously. Redis is our speed demon here, ensuring common data is served instantly.

On the frontend, we slapped React + Vite together. And no, we don’t use Server-Side Rendering (SSR). We just want to be happy—let us client-side render in peace.

The whole app weighs about 1.8MB (or roughly 550KB gzipped). In 2025, phones are powerful and data is cheap, so why burn our server CPU when your phone can handle it? Plus, sticking to Client-Side Rendering (CSR) keeps the app feeling snappy and lets us run smooth animations with Framer. It’s a win-win.


You Can’t Kill the Open Web

Then there is the ‘App Store tax.’ Apple charges $99/year just to be there, plus a 30% commission on subscriptions. They also block you from using your own payment processors. Google takes a 15% cut, too.

With costs like that, writing separate native apps just didn’t make sense for us.

That’s why we bet on Progressive Web Apps (PWAs). One codebase, every platform. We don’t have to wait a week for Apple to approve a bug fix. Plus, no one can just decide to pull our app down overnight. Unlike a walled garden, you can’t destroy the open web.

We’ve optimized Roamcalm so well that once installed, you can’t even tell it’s running on a browser engine. Try it yourself!


The Result?

In the end, we built an app that gives you way more than what you pay for. Instead of burning cash on over-engineered tech, we focused on building a lean, efficient travel machine.

Saying ‘no’ to the shiny stuff didn’t just save us money—it kept the app simple. And we pass those savings straight to you. You aren’t paying for corporate bloat. You’re paying for the servers, the storage, and just enough extra to keep us going.

With ❤️, Roamcalm


Share this post on:

Previous Post
Minimalist Packing for Real People (Not Instagram Models)