← Work

Case Study — 02

Geetly.

An ad-free music streaming app I designed, built, and shipped alone.

Role
Solo builder
Type
Personal
Stack
Next.js · TypeScript · Supabase · React Query

01

The product

Geetly is a music streaming app with the parts I actually want — search, personal playlists, uninterrupted playback — and none of the parts I don't: no ads, no upsell screens, no algorithm shouting over my library. It's a personal project, built primarily for my own listening.

02

My role

Everything. Design, frontend, data model, deployment. There's no team behind this one, which is part of the point — it's where I get to make every call myself and live with the consequences.

03

The hard part

Music apps have one non-negotiable: the audio must never stop when the UI moves. In a route-based framework like Next.js that means the player can't belong to any page — playback state and the audio element live above the route tree, so navigating through search, albums, and playlists never interrupts the current track.

The rest is keeping the app feeling instant. Library and playlist data is cached and synchronized with React Query, so most navigation hits warm cache instead of the network, and mutations (add to playlist, like a track) update the UI optimistically.

04

How it was built

Next.js with TypeScript on the frontend; Supabase handles auth and the Postgres database behind playlists and the library. React Query sits between the two as the caching and synchronization layer. The stack is deliberately small — a solo project survives on how little of it you have to maintain.

05

Outcome

It does what it was built to do: I get my music without ads, and I got a sandbox for patterns — persistent players, optimistic updates, query caching — that I've since used in client work.