Inspiration

Six hundred million people share your star sign. Not one of them shares your hand.

We already run a Bengali almanack site with a large daily readership, so we had years of evidence about what people actually open a horoscope for. It was never the astronomy. They wanted someone to tell them how the day was going to go, in words that sounded like home.

Every horoscope app we tried did the opposite. They read like a chart — planets, houses, retrogrades — and where they supported other languages, it was almost always one English feed pushed through machine translation. A reading written for Dhaka and a reading written for Madrid were the same reading with the words swapped. For most of the world, a horoscope app is a translated English app.

Then there was the thing our readers kept asking about that no app handled properly: their hands. Across Bangladesh, India and Pakistan, palmistry isn't esoteric — it's what an aunt does at a wedding. Our readers asked about it constantly, and nothing in the category served them.

So we set out to build the app our own readers were describing: a horoscope that reads like a person, in a language written for that culture rather than translated into it, with the whole daily ritual around it — and a reading from the lines of your actual palm.

What it does

A daily horoscope that reads like a story

Daily, weekly, monthly and yearly readings for all twelve signs. This is a real line from the app, not a description of one:

"If last night ran late, give yourself permission to sleep a little longer."

No planets. No houses. No retrogrades. Just the tone of someone who knows you.

Eight languages, each written natively

English · हिन्दी · বাংলা · اردو · العربية · Português · Español · Bahasa Indonesia

Not one app translated eight ways. Each language is written in that language, for the culture that speaks it — with genuine bidirectional layout for Arabic and Urdu (real RTL, not a mirrored English screen) and script-appropriate typography throughout, because the Latin serif our design is built on has no Bengali, Devanagari or Arabic glyphs at all.

All eight shipped on day one. None was added in a later update.

Palm reading from your own hand (Pro)

Photograph your palm; the app reads your real lines — heart, head, life, fate, and the minor lines — and writes a reading from them. The image is held only in process memory for the life of the job. Palm photographs are biometric-adjacent, so they are never written to disk, database or object storage; a server restart mid-job fails the job rather than persisting anything.

The whole daily ritual, free

Tarot draw a card and its meaning for today
Love compatibility any two signs, scored across love, trust and talk
Lucky wheel spin for today's number
Scratch card a lucky message to reveal
Astro Mission one small ritual a day, with a streak
Ask the stars pick a topic, get a straight answer
Daily affirmation one line to carry
Cosmic coin flip it when you already know

Lucky numbers that are computed, not invented

Numerology plus planetary hours, derived from real sunrise and sunset times for the user's location — a deterministic function, the same inputs always giving the same answer.

No account, ever

No email, no password, no sign-up screen. Identity is an anonymous device UUID issued by our own server, which doubles as the RevenueCat App User ID. You are reading seconds after install, and a morning notification brings the next one to you in your language.

How we built it

  • Client: Flutter, live on Google Play.
  • Server: NestJS + Prisma + MySQL, with a Next.js admin dashboard for content review, monitoring and live configuration — limits, toggles and schedules change from the dashboard without shipping a build.
  • Notifications and analytics: Firebase Cloud Messaging, Analytics and Crashlytics.
  • Both of our videos are built with Remotion — the film is code, timed automatically to the recorded voiceover, so re-recording a line re-cuts the edit.

Monetization, on RevenueCat

Almost everything in the app is free and ad-supported. Palm reading is the one paid feature, and it's paid for a specific reason: it is the only thing in the product with a real cost per use. Everything else costs us the same whether one person opens it or a million do.

That shaped the whole integration:

  • One entitlement, horocast_premium, unlocks palm reading and removes ads. There is no separate "remove ads" product — any Pro purchase grants both, which keeps the user's decision down to a single question.
  • Three products: monthly, yearly and lifetime. Lifetime exists because subscription resistance is high in our first markets; a one-time purchase converts where a recurring one doesn't.
  • RevenueCat Paywalls (component paywalls), plus Targeting with a platform rule, so the free-trial button renders only where it behaves — a dashboard change, no app release.
  • The entitlement is server truth. Our API re-queries RevenueCat on every sync and webhooks reconcile against it. The client never decides premium on its own, which matters when the thing behind the entitlement costs money.
  • Server-side quotas per plan. Each plan carries a readings-per-period limit enforced on our API and editable from admin. The object that earns the revenue is the same object that caps the spend.

Challenges we ran into

Cultural safety was the hardest problem, not the easiest

On a sibling product, our content pipeline once produced a food reference involving beef for a Hindu audience. Nobody had written that rule down, because nobody thought it needed writing down.

Publishing across eight languages and several faiths will produce religiously offensive output if it is unguarded. At volume that isn't a risk, it's a certainty. So every content path now has three layers: per-language cultural guardrails at the writing stage, a deterministic per-language forbidden-term filter that blocks content before publish rather than flagging it afterwards, and a default avoidance of religiously divisive foods and alcohol.

The important word is before. Anything that trips the filter never reaches a user. It fails closed.

Free-trial abuse — and something worth knowing about the SDK

Palm has a real cost per scan, and the trial was being farmed on Android. RevenueCat Targeting fixed it: a platform rule showing the trial only where it behaves, with no app release.

Getting there, we found something we'd pass on to anyone else. Marking a paywall component invisible is not the same as removing it. The Android SDK kept rendering a component we had set to hidden, so the trial button went on appearing on real devices after the dashboard said it was off. They have to be deleted. We lost a day to trusting the dashboard over the device.

One feature that costs money, in a product where nothing else does

A client-side limit on a feature that costs money per use isn't a limit at all. The ceiling had to live on the server, attached to the entitlement, and be adjustable from admin without shipping a build — so that the thing earning the revenue is the same thing capping the spend.

Eight scripts, one design system

Letter-spacing and uppercase — unremarkable in English — actively break conjunct forms in Indic scripts, and had to be disabled per language. Right-to-left had to be real bidirectional layout rather than a mirrored English screen. Each script needed its own display and UI faces. None of this is visible when it's done right, which is rather the point.

Accomplishments that we're proud of

Four weeks after launch, with nothing spent on advertising.

First public release 24 August 2026
Downloads 2,580
Weekly active users ~1,000
Daily active users 296
Play rating 4.6★ from 44 ratings
Languages at launch 8, with true RTL
Spent on user acquisition $0

Every install is organic. Revenue is early and we'd rather state it plainly than round it up: our first paying subscribers, with ad revenue running alongside them.

Beyond the numbers:

  • Eight languages, real right-to-left, palm reading and the full tool set on day one — not staged across later updates.
  • Palm reading that works on an ordinary phone, from an ordinary hand — no special lighting rig, no guidance beyond a frame on screen. Making it work on a good photo was the easy half.
  • A 4.6★ rating in a category people are quick to be cynical about, fromusers who found us on their own.

What we learned

  • Hidden is not absent. Trust what the device renders, not what the dashboard says is invisible.
  • Cost governance belongs on the server, attached to the entitlement. - Whatever earns the money should be the same object that caps the spend.
  • "Localized" and "written for" are different products. Translating one feed eight ways is cheap, and it shows. Writing for each language is expensive, and that shows too.
  • Fail closed on culture. A filter that flags after publishing has already failed.
  • Shipping into a category with thousands of competitors only works if there's one thing you do that nobody else does. For us that's the palm. Every other decision got easier once we admitted it.

What's next for HoroCast: Horoscope & Palm Reading

Almost all of our effort is going into the palm, because it is the feature with the most headroom left and the one nothing else in the category does.

  • More accurate. We ship improvements to the reading every week, measured against hands we already have readings for, so a change has to demonstrably beat what it replaces before it goes out.
  • Reliable in worse conditions. Dim rooms and harsh light, hands held at an angle, fingers not quite flat, every skin tone, older phone cameras. Good light and a flat hand already work well — the kitchen-at-night case is the one we're chasing.
  • Better capture, not just better reading. Guiding the shot while it's being taken, so fewer people get a poor result and have to try again.
  • More of the hand. Beyond heart, head, life and fate — the minor lines and the mounts, so the reading gets deeper rather than just longer.
  • Faster. Cutting the wait between the shutter and the reading, because that pause is where people lose the thread.

Alongside that:

  • iOS, bringing the same eight languages and the same palm reading.
  • More languages, prioritised by where organic installs are already coming from rather than by market size.
  • Smarter notifications — the morning push is the strongest retention lever we have, and we've barely tuned it.

Built With

Share this project:

Updates

Submission history