Building Flow solo: my stack and what it costs per month · Flow blog cover
build-in-publicengineeringindie

Building Flow solo: my stack and what it costs per month

One question I keep getting from people following Flow’s development is some version of: “What does it actually cost to run a side project like this?” It’s a fair question, and the honest answer is more interesting than either “almost nothing” or a scary number. So here is the full breakdown: the stack, the real monthly bill, and why I’ve made the choices I have.

The stack at a glance

Flow has three distinct surfaces, each with its own set of tools.

The mobile app is React Native with Expo. This gives me a single TypeScript codebase that targets both iOS and Android. Expo’s managed workflow means I’m not touching native build configs for most features, which matters a lot when you’re one person. The tradeoff is some ceiling on native customisation, but I haven’t hit it yet.

The backend is where it gets slightly unusual. I run a hybrid: two AI callable endpoints live on Cloudflare Workers at api.flowdeep.app, and everything else (auth, user data, and the other backend logic) runs on Firebase Spark, the permanent free tier. The AI Workers call the Anthropic API to generate the personalised energy coaching that powers Flow’s core loop.

I wrote about why I ended up with this split in the Firebase-to-Cloudflare migration post. The short version: Firebase’s free tier is generous for auth and Firestore reads/writes at early scale, but its Cloud Functions require the Blaze pay-as-you-go plan even for minimal AI workloads. Cloudflare Workers has a free tier that handles 100,000 requests per day, which is more than enough for pre-launch. So AI logic moved to Workers, and the rest stayed on Firebase Spark.

The landing site is Astro deployed to Cloudflare Pages at flowdeep.app. Astro’s static output and Cloudflare’s global CDN means the site is fast without any server-side infrastructure to maintain. Email signups go through Beehiiv.

What it actually costs per month

Line by line.

Cloudflare Workers: 0. The free tier covers 100,000 requests per day and up to 10ms CPU time per request. My two AI Worker endpoints are well under that ceiling right now. If Flow reaches a scale where this becomes a cost, that will be a good problem to have.

Cloudflare Pages: 0. Unlimited sites, 500 builds per month, no bandwidth cap on the free plan. The landing site costs nothing to host.

Firebase Spark: 0. Authentication, Firestore, and the other backend pieces all sit within the Spark plan’s limits. At pre-launch scale with a small beta group, I’m not close to the edges. When I get there, I’ll reassess.

Beehiiv: 0. The launch plan is free up to 2,500 subscribers, which gives me a lot of runway before email costs anything.

Anthropic API is the only real line item. This is what actually hits my personal card. The AI coaching feature calls Claude on each relevant session event. At current beta usage I’m spending somewhere in the range of 5 to 20 euros per month, depending on how active testers are. That number will grow with user count. I track it carefully.

Domain: about 12 euros per year. flowdeep.app registered through Cloudflare Registrar at cost. Spread across 12 months that’s roughly 1 euro per month.

Expo / EAS: 0 for now. Expo Application Services has a free tier that covers my current build and OTA update volume. I’ll move to a paid plan when build frequency or team size requires it.

Total comes to somewhere between 6 and 21 euros per month, almost entirely the Anthropic API, with the domain rounding things out. Everything else is genuinely free-tier.

The free-tier-first strategy

This isn’t accidental. I’ve deliberately built Flow so that the only non-negotiable cost is the AI API that powers the core feature. If the AI coaching goes away, Flow is just a timer, so paying for that compute makes sense. Everything else is infrastructure that should scale with revenue, not precede it.

Running costs on a personal card before any revenue exists concentrates the mind. It keeps the service list short and forces real prioritisation: does this tool provide something I cannot get for free at this stage? If not, it doesn’t get added.

There’s also no company entity active yet. I have an Estonia e-Residency, which makes setting up an Ou (a lightweight EU limited company) straightforward when the time comes. My current trigger for that is around 50 paying subscribers. At that point, the recurring revenue justifies the administrative overhead and the cost of activating the business structure. Until then, operating as an individual keeps things simple and avoids running a dormant company with annual compliance costs for no practical benefit.

This is a deliberate decision, not an oversight. The free-tier-first approach buys time to validate the product before adding the operational weight of a formal entity.

What I’m watching as usage grows

A few things will shift as the beta expands.

The Anthropic API bill is the most direct function of user engagement. More active sessions means more API calls. I have some control here through prompt optimisation and caching, but fundamentally this cost grows with usage. That’s fine; it’s the cost of the product working. I’ll want to understand the per-user economics clearly before setting a price, so I’ve been logging token counts per session to build that picture.

Firebase Spark has generous limits but they are hard limits. Firestore reads (50,000/day), writes (20,000/day), and storage (1 GB) are the ones I watch. I’m nowhere near them with a small beta group, but I need a plan for when I am. Moving to Blaze with budget alerts is the most likely next step, not a full migration.

Expo EAS build minutes could become a line item if I start doing more frequent releases across both platforms simultaneously. Right now I build iOS and Android sequentially and stay within the free tier.

The Cloudflare Workers CPU time limit is worth monitoring once session volume picks up. Each AI call involves some processing before and after the Anthropic request. If that starts approaching the 10ms CPU limit per invocation, I’d need to move to the Workers Paid plan (~$5/month).

Where things stand

Flow is pre-launch and in early beta. The current monthly cost is low enough that it’s not a constraint; it’s just a number I track. The stack was chosen to keep that number low while not cutting corners on the parts that matter: the AI feature is real, the hosting is production-grade, and the mobile app is a proper cross-platform build, not a web wrapper.

If you want to follow the build as it moves toward launch (including what happens to these numbers when real users arrive), the best place to do that is the early access list. I write about what’s actually happening, not a polished version of it.

Join the conversation