← Work

Case Study — 02

Dhun.

A streaming app for Indian music — built, designed, and shipped alone.

Role
Solo builder
Type
Personal
Stack
Next.js 16 · React 19 · App Router · CSS Modules

01

The product

Dhun (Hindi for melody) is a music streaming app for Indian music: search across songs, albums, artists, and playlists, with a persistent player, a queue, and keyboard shortcuts. No ads, no upsell screens — just the catalog and a player. It lives at play.rajkar.dev and I use it daily.

02

My role

Everything. Design, frontend, data layer, 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, the queue, and the audio element live in a context above the route tree, so navigating through search, albums, and artists never interrupts the current track.

The other constraint was speed on a catalog I don't own. Browse, album, and artist pages are server components fetching from a JioSaavn catalog API, with tiered cache revalidation — short-lived for search, an hour for albums and artists — so most navigation lands on cached HTML instead of waiting on a third-party API.

04

How it was built

Next.js 16 App Router with React 19. Server components handle catalog fetching and caching; the client side is deliberately thin — one player context, a queue panel, hotkeys, and CSS Modules for styling. No state library, no CSS framework. A solo project survives on how little of it you have to maintain.

05

Outcome

It does what it was built to do: my music, no ads, instant navigation. It's also been a sandbox for patterns — persistent players above the route tree, server-component caching against third-party APIs — that I've since used in client work.

Visit live site ↗