amr.essam

~ / work / egygrooves

EgyGrooves app icon

Audio · Android · iOS · Android Auto

EgyGrooves

Live internet radio for Android and iOS, built around Egypt and the Arab world. Pick a station by genre or country, drag a tuner dial like an old radio, or start one from the car or a home-screen widget.

Role
Design, code, data, release
Platforms
Android · iOS · Android Auto
Core stack
Kotlin Multiplatform + Supabase
Status
v2.4 · Android on Google Play

Screens

What it does

Egypt first

Then Saudi Arabia, Lebanon, Morocco and more of the Arab world, plus the US and Europe. Browse by genre or country, or search as you type.

Tuner dial

Every station has a channel number. Drag the dial in Now Playing to scrub, release to snap.

Background playback

Notification, lock-screen and headset controls. Live track titles when the stream sends them.

Sleep timer

Pick 15 to 90 minutes. The music fades out, then stops.

Android Auto

Favorites, recent or all stations on the car screen, or ask for one by voice.

Home-screen widget

The last played station and favorites. Tap one to start it.

Share a station

From Now Playing or a station's menu. A shared egygrooves:// link opens the station in the player.

Arabic + English

Full RTL. Per-app language on Android 13+.

No account, no ads

Favorites, recents, themes and an offline-cached catalog.

How it's built

LayerTechNotes
SharedKotlin 2.4 Multiplatform, Room KMP:shared module holds models, data layer, ViewModels, the sleep timer and egygrooves:// links; Room KMP cache.
AndroidJetpack Compose, Material 3, Navigation Compose, Media3 ExoPlayer, CoilShared-element transitions; ExoPlayer with HLS inside a Media3 MediaLibraryService.
iOSSwiftUI, AVPlayer, SKIEURLSession image loader; SKIE for Kotlin interop.
CarMedia3 MediaLibrarySession, CarPlayAndroid Auto browse tree (Favorites, Recent, All) and voice play. CarPlay station browser built; simulator-only until Apple grants the entitlement.
WidgetsJetpack Glance, WidgetKitAndroid widget on Glance; iOS widget extension reads a snapshot the app writes to a shared App Group.
BackendSupabase Postgres, supabase-kt Postgrest, KtorStation catalog with SQL migrations; OkHttp / Darwin engines.
TestsXCUITestUI test suites on iOS.