Skip to content

Armonia

Armonia is a privacy-focused music streaming app for Android, built on Flutter with Supabase as the backend and Google Sign-In for authentication. Guests get a fully local experience with no account required, and signed-in users have their data synchronized through Supabase instead of trusting it to local storage alone. The whole app is built around one idea: music should be accessible to everyone, without the essential features held back behind a subscription.

Type
Mobile App
Role
Mobile Developer
Built
2026
Updated
2026
Source
Tech Stack
FlutterDartSupabaseGoogle Sign-In
01

Why I Built This

Every music app I used locked essential features behind a subscription, and I wanted to build something that felt premium without charging for the basics. Music should be accessible to everyone, that's the whole premise Armonia is built around.

The idea came out of my own frustration with those restrictions, and from watching friends and family who just wanted to enjoy music without running into a paywall for something that should be basic.

02

Local Storage Contamination

Early on, user information was stored locally on the device for every user, signed in or not. During testing, I found cases where local user state could persist incorrectly across sessions, data from one user context bleeding into another simply because everything lived in the same local store regardless of who was using the app.

The fix was an architectural split, not a patch: guest users stay fully local, with nothing to synchronize and nothing to leak between sessions, while authenticated users have their data synchronized through Supabase instead. That distinction is now a core part of how the app is structured, not an exception handled after the fact.

03

Google Sign-In and SHA Certificates

Google Sign-In sounds like a solved problem until it has to work against a real Google Play release, not just a local debug build. Getting the correct SHA certificate configuration in place for Play consumed close to a full week on its own.

That process, matching the right signing certificate to the right configuration across the Google Cloud and Play Console setup, ended up being one of the most frustrating parts of getting Armonia to release, more so than any of the actual application code.

04

Audio Playback Reliability

Playback reliability took several iterations before it held up. Keeping media state consistent everywhere in the app, across the mini player, the full player, and background playback, took significantly longer to get right than I originally expected.

A lot of that time went into making sure the app's idea of what was currently playing stayed correct no matter where in the app someone navigated, rather than assuming a single screen would always own that state.

05

Navigation Architecture

Designing navigation that felt simple while still being able to scale with future features took several redesigns before landing on the current structure. An approach that works cleanly for the features that exist today can fall apart the moment a new feature needs to fit into it.

Settling on a structure that could absorb future additions without a redesign each time was worth the extra iterations, even though it meant navigation went through more revisions than any other single part of the app.

06

Development Journey

I started Armonia with an optimistic timeline: I believed that with AI-assisted development and my own programming background, I could get the whole app built in a matter of weeks. That estimate didn't survive contact with the real problems. Local storage contamination, Google Sign-In's certificate requirements, audio playback reliability, and navigation design each took far longer than planned, often in ways that weren't obvious until testing surfaced them.

What actually got Armonia to a production-ready release on Google Play was months of debugging, redesigning, testing, and polishing, not a single breakthrough. Each of the engineering challenges above got solved on its own timeline, and the app didn't feel ready until all of them did.

07

Design Philosophy

Armonia is built around privacy, a clean interface, simplicity, a premium feel, performance, and accessibility, in that rough order of priority. Privacy shows up structurally, guest mode stays fully local by design, not as a limited trial, rather than as a policy statement.

The premium feel comes from the app not gatekeeping basic functionality behind a subscription, not from added visual polish alone. Making the core experience feel complete without asking for payment first was a deliberate design choice, not a limitation of what got built.

08

Future Vision

With Armonia live, the focus going forward is on refining what's already there: playback reliability, navigation, and the overall feel of the app, based on how it actually gets used, rather than adding features for their own sake.

The underlying philosophy stays the same as the app grows: music should stay accessible, and premium shouldn't mean paywalled.

09

Key Decisions

Guest accounts stay fully local by design. Authenticated users sync through Supabase instead, which keeps the app usable with zero account setup while still giving people who do sign in a real, persistent experience across devices.

Google Sign-In was chosen as the authentication method for its familiarity and low friction, even though getting the SHA certificate configuration right for Google Play took far longer than the integration itself.

Navigation was treated as its own design problem rather than an afterthought bolted on once features existed, since a structure that only works for today's feature set turns into a rewrite the moment new features get added.

10

What I Learned

The real lesson from building Armonia wasn't a specific technical one, it was about how badly I misjudged the timeline. I genuinely believed that with AI assistance and my own programming knowledge, I could finish the whole app in a few weeks.

It took months of debugging, redesigning, testing, and polishing to get from that first estimate to something I'd actually put in front of users on Google Play. That gap between my original estimate and the real timeline changed how I scope and estimate every project since.