ANDROIDANDROID APP

SingWithMe

"Sing along safely, your phone does the navigation, not the driver."

AndroidKotlinJetpack ComposeHilt
SingWithMe

Android · Kotlin · Jetpack Compose · Hilt

0
Primary input
0
Speed lock
0
Lyric display
0
Mode optimised

OVERVIEW

|

Drivers who enjoy singing along to music are constantly distracted by searching for songs and reading lyrics on their phone, a genuinely dangerous behaviour that no music app addresses specifically. The existing category of "car mode" apps focuses on navigation, not music companion use.

|

A purpose-built drive dashboard that puts lyrics in a large, glanceable format and accepts song searches by voice. The DriveViewModel manages all playback state and enforces a safety lock: complex interactions (song library browsing, settings) are disabled while the app detects movement above 10 km/h.

|

A music companion designed for the driving context, minimal touch interaction, maximum voice control, and a safety model that prevents the most dangerous interactions.

KEY FEATURES

Drive Dashboard

A full-screen dashboard with the current song title, artist, and lyrics displayed in a large, high-contrast format. Controls are limited to play/pause and skip, all accessible with one thumb.

Voice Song Search

The driver speaks the song or artist name. The voice recognition layer processes the query and returns results as a list navigable with voice commands.

Speed-Based Safety Lock

The DriveViewModel monitors device speed via the location API. Above 10 km/h, the complex UI interactions are disabled and the interface simplifies to the minimal safe subset.

DriveUiState

All drive mode state, current song, lyrics position, voice search results, safety lock status, is modelled as a sealed class hierarchy. Each state maps to a specific UI configuration.

TECH STACK

Tap to see the reasoning

BUILD TIMELINE

Phase 01

ViewModel & State Model

Designed the DriveUiState sealed class hierarchy and built the DriveViewModel with speed monitoring and safety lock logic.

CHALLENGES & SOLUTIONS

Continuous GPS polling is battery-intensive. I used a passive location listener that piggybacks on other apps' GPS requests for the speed check, only switching to active GPS when the speed check is ambiguous.

LET'S BUILD SOMETHING TOGETHER

I'm always open to discussing new projects, partnerships, or just a good idea.