AURA
Music discovery guided by how you feel.
A mobile application that recommends songs based on your emotional state — pairing machine learning with music to create a listening experience that meets you where you are.
- Python
- TensorFlow
- Spotify Web API
- React Native
- TypeScript
AURA started with a simple observation: playlists built around a mood are full of good intentions and wrong guesses. Mood is personal, shifting, and hard to describe with a tag. The app’s bet was that a machine could read it better than a label — and translate it into music that actually lands.
The problem
Most recommendation engines optimize for similarity: people like you listen to this. It is powerful, but it misses the context that defines listening. The same person needs a different song at 9am on a commute than at midnight with headphones on. Existing systems rarely ask how are you right now — and when they do, the answer is a fixed tag like “sad” or “energetic”.
The approach
AURA models the emotional state of the user and maps it onto musical features the Spotify API already understands: energy, valence, danceability and acousticness. Instead of tagging songs with emotions, we project both the user and the catalogue into a shared, continuous space.
- Signal capture — the user tells AURA how they feel through a lightweight, thoughtfully designed interaction (no wall of sliders).
- Emotion encoding — the input maps onto a compact emotional vector using a model trained to align self-reported mood with song features.
- Matching — the vector is compared against a curated catalogue in that same feature space, using cosine similarity to rank tracks.
- Refinement — feedback on each recommendation tunes future suggestions, so the model learns the user’s personal “translation” from feeling to song.
Technical decisions
The catalog lives in feature space, not in tags. Instead of hand-labeling songs with moods, we compute acoustic features at ingestion time and match on the geometry of the space. This scales, and it keeps the model honest — it never relies on subjective labels a human wrote once and forgot.
React Native for reach. One TypeScript codebase ships to both platforms. The emotional input screen is deliberately minimal, because the product is about feeling, not forms.
Separation of the model from the app. The model runs as a small Python service; the mobile app consumes it through a thin API. That keeps the heavy lifting replaceable without touching the client — retraining or swapping a model becomes a deployment, not a rewrite.
Challenges
- Cold start. With no listening history, the first recommendation is a guess. The fix: seed from the user’s own input and be transparent about it — “AURA is tuning in” — while feedback converges quickly.
- Emotional vocabulary is ambiguous. “Calm” means something different at night than mid-concert. Anchoring the input in a small, concrete set of states and letting the model learn the mapping avoids over-promising a precision it doesn’t have.
- Latency on mobile. The matching runs against a precomputed feature index, keeping the request-response well under interactive thresholds.
Impact
AURA demonstrates the pattern I care about most: a model that improves a human experience instead of replacing it. It connects two things that rarely get to talk — machine learning and music — and it does it in a product shape, not a notebook.
What I’d do next
- Expand the catalogue pipeline to ingest fresh releases automatically.
- Add listening-context signals (time of day, activity) on top of self-reported mood.
- Run a small user study to measure whether recommendations land better than a fixed “mood playlist” baseline.