Case Study

TxtFlow

Turning any Android phone into a self-hosted SMS marketing gateway — no server, no API fees, no middleman.

Role Product Engineer / Founder
Stack Flutter, Android SMS APIs
Status Live

The Problem

Small businesses in the Philippines — sari-sari stores, local clinics, small restaurants — need SMS marketing to reach customers. But the existing options are terrible for them:

  • SMS API providers (Twilio, Semaphore, etc.) charge per message and require a backend server to integrate — way too expensive and complex for a small business sending 200 texts a month.
  • Bulk SMS platforms come with monthly subscriptions, minimum volumes, and clunky dashboards built for enterprises, not a shop owner with a phone.
  • Manual texting works but doesn't scale. Copy-pasting messages to 100 contacts is painful and error-prone.

The core insight: these businesses already have an Android phone with an active SIM and unlimited text promos. They just need software that lets them use it as a gateway.

The Solution

TxtFlow turns any Android phone into a self-hosted SMS marketing platform. No server needed. No per-message fees. No third-party API. Just install the app, import your contacts, write your campaign, and hit send — the phone does the rest using its native SMS capability.

Campaign Manager

Create, schedule, and send SMS campaigns to segmented contact lists. Supports personalization tokens and message templates.

Contact Management

Import contacts via CSV or manual entry. Tag and segment audiences for targeted messaging.

SMS Provider Pooling

Rotate across multiple SIM slots or devices to distribute sending load and avoid carrier throttling.

Delivery Tracking

Real-time status tracking for each message — sent, delivered, or failed — with campaign-level analytics.

Simple Marketing Dashboard

At-a-glance view of campaign performance, contact growth, and sending activity.

Zero Infrastructure

Everything runs on-device. No cloud server, no database hosting, no recurring costs beyond the phone plan.

Why Flutter?

This wasn't a typical "cross-platform for iOS and Android" decision. TxtFlow is Android-only by design — it relies on native SMS APIs that iOS simply doesn't expose. So why Flutter instead of native Kotlin?

Rapid Prototyping

Flutter's hot reload and widget system let me iterate on the UI extremely fast. For a solo project, speed to first usable version matters more than anything.

Platform Channel Access

Flutter's platform channels give full access to Android's native SMS Manager API. I get the best of both worlds — fast UI development with Dart, and native Android capabilities where needed.

Single Codebase Simplicity

Even though it's Android-only, Flutter keeps the codebase clean and maintainable. The declarative UI model is easier to reason about than XML layouts, especially for complex state like campaign progress tracking.

Future Flexibility

If TxtFlow ever expands to a companion web dashboard or desktop app, Flutter's multi-platform support makes that transition straightforward without rewriting the core logic.

Challenges

Carrier Throttling

Philippine carriers aggressively throttle bulk SMS from a single SIM. Sending 100+ messages in quick succession triggers rate limits or temporary blocks. I solved this with configurable send delays, SIM rotation across dual-SIM devices, and a queuing system that spaces messages intelligently.

Android Background Restrictions

Modern Android (10+) kills background processes aggressively to save battery. Keeping the SMS sending service alive during long campaigns required foreground service notifications, wake locks, and careful handling of Doze mode — all through Flutter platform channels.

Delivery Confirmation

Android's SMS delivery reports are unreliable — some carriers don't send them, others delay them significantly. I built a best-effort tracking system using broadcast receivers for sent/delivered intents, with timeout-based fallback status updates.

Data Privacy on Device

Since everything is on-device, data security is the user's responsibility. I implemented local encryption for contact lists and campaign data, with an optional PIN lock for the app. No data ever leaves the phone unless the user explicitly exports it.

Outcome

TxtFlow is live and being used by small businesses for local SMS marketing. The key wins:

  • Zero recurring cost — businesses only pay for their existing phone plan
  • No technical setup — install, import contacts, send
  • Full data ownership — no third party ever sees the contact list or message content
  • Privacy-first — everything stays on the device

What I Learned

  • Constraints breed creativity. Not having a server forced a simpler, more resilient architecture.
  • Platform channels in Flutter are powerful but require deep understanding of the native side. You can't abstract away Android's SMS permission model.
  • For products targeting emerging markets, "works on a cheap phone with spotty internet" is a feature, not a limitation.
  • Building for small businesses means the UX has to be dead simple. If it takes more than 3 taps to send a campaign, it's too complex.

Interested in this kind of work?

I build products that solve real problems with practical technology choices.