LaunchReelForge · 7 min read
A free tier that doesn’t bankrupt you: pricing ReelForge for India and the world
Geo-priced plans in rupees and dollars, payments confirmed twice and activated once, and the quiet cost controls that let a video product offer a free plan at all.
Video is the most expensive thing you can offer for free. Every upload is storage, every transcript is an API call, every export is minutes of CPU. If a free tier is how creators find you, it had better not be the thing that sinks you.
Two prices for one product#
A plan that feels cheap in San Francisco is out of reach in Surat. So ReelForge shows prices in rupees to visitors in India and in dollars to everyone else. The landing page looks up the visitor’s country, asks the API for plans in that currency, and falls back to rupees if the lookup fails. Plans are documents in the database with their own currency, not hard-coded numbers, so we can change pricing without a deploy.
Under the hood, every amount sent to the payment gateway is an integer in the smallest unit — paise, or cents. No floating-point money, anywhere.
Confirm twice, activate once#
Payments go through Razorpay. The failure we designed for is boring and common: the user pays, then closes the tab before the app hears back. So there are two paths to “paid”:
- 1
The checkout result
The browser sends the order and payment IDs with Razorpay’s signature; the server verifies it. - 2
The webhook
Razorpay calls us directly on payment.captured, whether or not the browser ever came back. - 3
One function
Both paths call the same idempotent activation. Whichever arrives first upgrades the plan; the second is a no-op.
The cost controls nobody sees#
The free plan exists because of a handful of decisions that keep its cost bounded:
- Free footage expires. Source videos and thumbnails for free projects are deleted after seven days by a scheduled job behind a shared secret, and the project is marked expired.
- Free B-roll stays in your browser. Assets you add on the free plan live in IndexedDB on your machine and are only sent with an export. Paid plans store them in the cloud so they follow you between devices.
- Paid features are enforced on the server. Audio layers and watermark removal are checked in the backend, even if the browser sends them. The client is never trusted with the price list.
- Failures are refunded. An upload that fails or has no speech gives its slot back.
Measuring the funnel without fooling ourselves#
We use PostHog for product analytics, routed through our own /ingest path so it isn’t silently dropped by ad blockers. The two funnels we watch are the ones that matter for a small paid product: the video workflow — upload, transcript, editor, export — and payment conversion, from opening the upgrade dialog to a verified payment.
The long-term fix for cost#
All of this manages a basic fact: server-side rendering makes every free export cost us money. The real fix is to stop rendering on our servers at all — which is why we spent a month running 39 experiments on an editor that runs entirely in your browser.
Keep reading
- 39 experiments toward a video editor with no serversWebCodecs, WebGPU, OPFS and on-device AI: how we’re de-risking an editor that runs entirely in the browser — and where the agentic part of ReelForge will come from.Building · ReelForge
- One filter graph: how ReelForge renders captions, B-roll and audio in a single FFmpeg passFrom a canvas preview in the browser to an .ass subtitle file and one filter_complex on the server — the render pipeline behind every ReelForge export.Building · ReelForge
- Bands, not percentages: a spatial join you can’t afford to get wrongHow TraceSarkar matches a photo of a pothole to the ward that owns the road and the contract that paid for it — and why every gate is built to ask rather than guess.Building · TraceSarkar