FM Android & iOS App

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
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.
How it was built.
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.
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.
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.
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.
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.
Problems solved on the way.
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.