Independent build · Android + Android Auto

Lyrics that follow whatever is playing.

Auto Lyrics detects the active media session on your phone, finds time-synced lyrics, and follows the song on both Android and Android Auto—without a Spotify login.

Private prototype · automated tests pass · device validation pending

Auto Lyrics SYNCED

Night Drive

Demo session

City lights in the rear-view

Every mile becomes a memory

We keep moving with the music

Lyrics 2:14

Night Drive · Demo session

Every mile becomes a memory We keep moving with the music
39 unit tests
74.8 MB current debug APK
0 accounts or API keys
2 lyrics providers

The problem

The car has a screen. The lyrics stay on the phone.

Spotify can show lyrics on a phone, but its Android Auto experience does not. I wanted a passenger to be able to follow a song on the car display without signing into another service or changing music players.

The constraint shaped the product: detect what is already playing, fetch the best available timestamped lyrics, and stay in sync through track changes, pauses, and seeks.

Interface demo

Follow one session across both screens.

Browser simulation · original placeholder text

NOW PLAYING Night Drive Demo session
SYNCED

Lyrics Night Drive
0:18

Release status

The code is ready for the device test.

Honest status · July 2026

Passed

Automated checks

  • 39 unit tests cover parsing, synchronization, caching, metadata cleanup, and track identity.
  • Android lint passes.
  • The debug APK builds successfully.
Next

Phone test

  • Grant notification access and confirm active playback detection.
  • Check track changes, pause, seek, cached lyrics, and no-lyrics states.
  • Measure the sync offset on a physical device.
Next

Android Auto test

  • Confirm launcher visibility after enabling developer mode and unknown sources.
  • Test line updates, reconnects, and playback controls on the head unit.
  • Keep the app private until lyrics licensing and distribution are resolved.

The build

A small pipeline with difficult edges.

Detect · fetch · synchronize · render

  1. 01

    Detect the active track

    A notification-listener service discovers the active media session and reads track metadata, playback position, pause state, and seeks.

  2. 02

    Find and cache lyrics

    SyncLRC is the primary source and LRCLIB is the fallback. Exact matching degrades to cleaned metadata and search; misses are cached so the app does not repeat dead-end requests.

  3. 03

    Keep both surfaces in sync

    A testable timing engine maps playback position to the current line and word. The phone renders a full lyrics view while Android Auto uses its constrained media interface.

My contribution

I forked a working idea and hardened the product around it.

The foundation is the MIT-licensed Auto Lyrics project. I treated the fork as a product exercise: understand the system, preserve what worked, and invest where reliability and usability were weakest.

  • Extracted timing, interpolation, and track identity into testable components.
  • Added 39 unit tests across parsing, sync, metadata cleaning, and caching.
  • Added negative-result caching and standard LRC offset support.
  • Built a guided three-step setup flow for the sideloaded Android Auto path.

Product judgment

A useful prototype is not automatically a distributable product.

The app is built for passenger use and must stay within Android Auto's safety constraints. Sideloading also requires developer mode and unknown sources, so setup quality matters as much as lyric sync.

I am not offering a public APK: the current community lyrics sources are appropriate for private prototyping, not for a public commercial service. A wider release would require a licensed lyrics provider and a distribution path that passes Android Auto review.

Build with me

Have a constrained product idea worth prototyping?

I help teams turn ambiguous product questions into something concrete enough to test, evaluate, and decide.

Discuss an engagement