Media & Broadcasting

FM Android & iOS App

Community Radio Streaming Platform
A community radio station reaching only as far as its transmitter, now reaching listeners anywhere with an internet connection.
Four screens from the FM Android and iOS app: the live player with today's line-up, the weekly programme schedule, the phone-number login screen, and the live chat awaiting the next broadcast.
Live player, weekly schedule, account access and live chat.
PlatformAndroid & iOS (Flutter)
BroadcastLive FM Radio
StreamMP3 128 kbps
Reach17 countries
StatusLive on Google Play & App Store

The Challenge

The station serves its community over the air, but an FM signal stops at the edge of its transmission radius — leaving listeners who had moved away, and a diaspora spread across the Gulf and beyond, cut off from their station. The station needed to reach them without a broadcast engineer on staff, without a recurring SMS gateway bill for account verification, and without asking presenters to learn anything more complicated than the studio equipment already in front of them.

The Solution

We delivered an Android and iOS application and the backend platform behind it as a single system. Listeners stream the live broadcast in real time, browse the weekly programme schedule, and talk to each other in live chat while a show is on air. The audio path runs independently of the application API, so a fault in one never silences the other — the app plays directly from a self-hosted streaming server while the API supplies only the surrounding metadata, such as the current show title and presenter. Station staff manage live programmes, schedules and accounts from an admin panel that requires no technical knowledge, with limited-permission logins for day-to-day operators.

Technology

FlutterDartAndroidiOSPythonDjangoDjango REST FrameworkPostgreSQLIcecast2Firebase FirestoreNginxGunicornUbuntu LTSLet's Encrypt SSL

Result

The app is live on the Google Play Store and the Apple App Store, carrying the station's broadcast beyond its FM radius to listeners across 17 supported countries. Live programme information stays accurate to the minute, chat runs in real time during shows, and station staff manage the entire weekly schedule themselves through the admin panel. The platform was delivered with full documentation and handed over to the client, with every service configured to restart automatically and SSL certificates renewing without intervention.

Approach

How it was built.

The decisions that shaped the system, and the reasoning behind each one.
01

Streaming that survives the studio

The live audio path runs from the studio mixer through encoder software to a self-hosted Icecast2 server, entirely separate from the application API. Listeners keep hearing the broadcast even if the metadata service is interrupted.

02

Schedule-aware live status

A scheduler compares the current time against the weekly programme grid every minute, and the live-status service also performs its own real-time check on each request. The station is never reported as on air when it isn't, and never shows a stale programme between scheduler runs.

03

Account recovery without an SMS bill

Registration and sign-in use a phone number, but password recovery runs on a three-step security-question flow instead of OTP delivery. That removed an ongoing per-message cost and a common point of failure for listeners on overseas numbers.

04

Real-time chat, offloaded

Live chat runs on a managed real-time database accessed directly by the app rather than being built in-house, keeping conversation instant during broadcasts without adding load or maintenance burden to the station's own server.

05

Built for a listener base that left

Phone-number validation covers 17 countries with per-country rules, so listeners in the Gulf, Europe, North America and across Asia can register with the number they actually use.

Engineering log

Problems solved on the way.

Real issues found during development and testing, and how each was resolved before handover.

Presenter's microphone was inaudible online — listeners heard only the music.

Traced to studio wiring rather than software: corrected the mixer's combined output routing so the encoder captured microphone and music together.

Five to fifteen seconds of lag between live speech and what listeners heard.

Tuned the streaming server's buffering strategy and added seek-to-live behaviour on resume, so rejoining a stream returns to the present moment rather than replaying the buffer.

Play and pause took around five seconds to respond.

The player now preloads on screen open, shows a buffering state, and stays initialised across pause and resume instead of tearing down and rebuilding the connection.

Programme status lagged behind the actual clock.

Replaced the in-process scheduler with a system-level scheduled task plus a real-time check performed on every live-status request.

Thursday to Sunday were missing from the published schedule.

Default result pagination was silently truncating the weekly grid. Removed it so the full seven days are always returned.

Server clock defaulted to a European timezone.

Set the server explicitly to Indian Standard Time, aligning every schedule comparison with the station's actual broadcast day.

Reach Your Digital Crest.

Let's turn your next idea into a digital product built for growth.