Mobile Our product · live FlutterFirebasePlay Console

A one-tap call-forwarding utility, shipped in two flavors

A Flutter app that turns obscure carrier call-forwarding codes into a single tap — designed, built, flavored free and pro, and shipped to Google Play.

RoleDesign + Build
Timeline2023 – present
PlatformAndroid
TypeOur product

Context

Call forwarding on an Indian SIM is controlled by GSM MMI codes — strings like *21*<number># to forward everything, ##002# to cancel all of it, and a different code for "when busy", "when unanswered", and "when unreachable". They work, but nobody remembers them, and the built-in phone settings bury the option behind several screens.

We built Call Forwarding to scratch our own itch, and to have a small, real, shippable product that proves the studio takes things all the way to a store listing — not just to a demo.

The problem

  • The MMI codes are unmemorable and carrier-dependent — and India's largest carrier, Jio, uses a different set of codes for call waiting than the rest do.
  • The stock dialer UI for this is slow and inconsistent across Android skins.
  • Dialing a code is easy; knowing whether forwarding is actually on right now is not — most apps in this category just fire the code and hope.
  • A utility like this only earns its place if it's genuinely one tap, in two languages, for a market where a meaningful share of users are more comfortable in Hindi than English.

What we built

  • A Flutter app on a BLoC architecture (feature/domain/data layering, use-cases, DI), with free and pro build flavors wired through flavorizr and separate application IDs (com.buddy.callforwarding / com.buddy.callforwardingpro) from one codebase.
  • A one-screen home: pick a forwarding mode, enter a number once, toggle it on or off. The app composes and dials the correct MMI code for that mode, with Jio-specific code handling and national/international number formatting built in.
  • Conditional forwarding (busy / unanswered / unreachable) as separate toggles, plus live carrier-status reading on Android — a native Pigeon bridge queries the carrier's own forwarding indicator (CFI) and USSD response, instead of just trusting local app state.
  • Local history via Floor (SQLite), with quick-select chips pulled from it.
  • Localization in English and Hindi, shipped and live — not just scaffolded.
  • Firebase Auth, Crashlytics, Analytics and Messaging for release health and account features; Google Mobile Ads on the free flavor, funding a fully ad-free pro flavor with an in-app upgrade path.
  • A Fastlane-driven release pipeline to Google Play, so cutting a new build for either flavor is one command.
  • A standing practice of structured internal product audits before each redesign cycle — the app is treated as a live product with a roadmap, not a one-time build.

Result

Call Forwarding is live on Google Play in both free and pro flavors, currently at v1.3.3. It's the build we point clients to when they ask what a small, finished, shipped Web2Droid mobile product looks like — from first commit, through store review, through a maintained release line and an active redesign cycle focused on cutting friction out of the core flow.

2
store flavors (free + pro) from one codebase
actual
1 tap
to forward calls or restore them
actual
v1.3.3
current release on Google Play
actual
2
languages shipped — English and Hindi
actual

Built with

FlutterFirebasePlay ConsoleFastlane
Next A cross-border remittance app, built as a working sample arrow_forward

Ready to build

Have something to build?

Send a few lines about your project. We reply within one business day with an honest read.

Start a project

Not ready to commit? Book a 15-minute build-readiness call instead — leave with a rough scope, the likely risks, and the next sensible step, even if we're not the right studio.

Best for founders with a product idea, rough spec, or existing app that needs senior builders.