Stack
Next.js · Groq · Vitest
Role
Solo — everything
Timeline
Weekend sprint, March 2026
Live
gilkopel-vibes.vercel.app
I’ve been DJing since 2021. Over time I ended up with 21 Spotify playlists — house, techno, melodic, acid, Arabic electronic fusion, funk. Each with its own energy curve, BPM range, decade distribution, even dominant musical keys.
When someone asks “what should I listen to?”, the answer depends on everything. Their mood, the time of day, whether they want texture or impact. No playlist title captures that. I needed a way to translate a vibe into a match.
So I built two paths in. Eight preset vibe tiles (“Late Night Drive”, “2AM Dancefloor”, “Desert Rave”) that run through a local scoring engine. And a free-text search powered by Llama 3.1 8B via Groq that understands things like “something for cooking at midnight.”
The scoring engine reads 47 audio attributes per playlist and scores across 14 dimensions — mood, energy, genre hierarchy, BPM, decade, harmonic key, artist DNA. It doesn’t just pick the top result. It takes the top 3 and selects one using weighted random, so the same query doesn’t always return the same playlist.
Each vibe tile also carries a visual theme — gradient colors, particle speed, accent hue. Picking a vibe doesn’t just search. It shifts the atmosphere of the entire page.
I didn’t want to deal with a database for something this simple, so everything runs from a CSV in memory. Groq free tier handles the AI calls. Vercel free tier hosts it. Total cost: nothing.

Search bar, mood pills, and 8 vibe tiles