Living brief · Session 7 · 2026-05-03
Vibe
Mesh
For the listener
Search from the heart.
Move the sliders to describe how you want music to feel. Vibe Mesh finds what lives there.
The design philosophy
Vibes is just science felt.
Every axis has a scientific basis. The feeling is the interface. The math is underneath.
PhaseBackend complete · wiring UI (T20)
StackGo · Kaggle · Spotify
ScopeEnglish MVP
Authorrupajsoni
01The gap

Every time you look for music, you start with a feeling. And then you spend the next few minutes trying to translate that feeling into something the app understands — a title, a genre, a playlist someone else made for a moment that isn't quite yours. The translation is always lossy. Most of the time you settle.

The way music discovery works today is built around what you can search for, not what you actually feel. That's not a criticism — it's just a gap nobody has filled yet. The feeling itself has never been the input.

Vibe Mesh fills that gap. You describe how you want music to feel. The system finds the music that lives there.

What this is

A pure backend REST API. Not a player. Not a playlist manager. A middleware layer that any frontend can sit on top of. The API is the product.

02The six axes

Users input a position on six axes, normalized 0.0–1.0. The backend maps those values to a 6-dim feature vector and ranks results by cosine similarity against a pre-mapped library (~600K songs from Kaggle). No ML at query time — pure vector math, sub-millisecond. An optional era control can softly nudge results toward a time period; if untouched, the search stays open to all time. Click any mood preset below to load it into the radar.

AxisWhat it capturesRangeScienceStatus
Energy
Raw physical and emotional intensity. How hard is the music pushing.
WeightlessDriveHypeFull rage
Arousal — most replicated dimension in all music psychology research locked
Groove
Rhythmic body pull. Not speed — danceability. Slayer does not groove. Confirmed orthogonal to Energy by the Slayer test.
StaticSwayNodCan't sit still
Contemporary/rhythmic factor (MUSIC model, Rentfrow et al.) locked
Fidelity
Grain and texture of sound. How raw vs produced. Elliott Smith vs Daft Punk. Formula: weighted blend of inverted acousticness and loudness normalisation — not just acousticness alone.
Lo-fi / rawWarmPolishedHi-fi / pristine
Justified divergence from science — science uses genre as proxy, we isolate the sonic dimension concept locked
Vocals
Presence AND character merged. Absent → textural (Fred Again) → treated melodic → raw exposed front and center. Science flagged this confound, never resolved it.
InstrumentalTextureMelodicRaw exposed
Justified divergence — we resolve a confound science identified in the Sophisticated factor locked
Emotion
Emotional color / valence. Independent of energy. Phoebe Bridgers and death metal are both low energy. They are not the same here. Nearly dropped mid-session. Never drop it.
Dark / anguishedBittersweetHopefulEuphoric
Valence — Russell circumplex model, 40+ years, cross-culturally consistent (PNAS 13-dim study) locked
Social
novel · our IP
What the music is built for — not the listener preference. Artists encode social context intentionally. Aphex Twin ambient and Karol G Tusa both do exactly what they were designed to do.
3am headphonesBackgroundSharedRoom full of people
Science studies listener context, never encodes it as a property of the music itself — we do locked
03UI concept · Skin A — radar + sliders

Click a mood preset to load it. Move sliders to tune. The radar updates live. This is how a user interacts with the vector.

Vibe Mesh · Query builder
Energy Groove Emotion Social Vocals Prod.
Time Travelcoming soon
Optional soft era input. Slide toward a year and let it lightly bias results without hard filtering.
Music for your vibe demo · illustrative only
04Genre presets

Pre-filled vectors. Genre names are a bridge from where users already operate to the vibe model. Vectors are centroids computed from ~1,000 songs per genre in the dataset. Click any card to load it into the radar above.

05Science cross-examination

Every axis was run against established music psychology research — Rentfrow's MUSIC model (replicated across three independent studies), Russell's circumplex model, and the PNAS cross-cultural 13-dimension study. Divergences are justified, not apologized for.

AxisResearchOur positionVerdict
EnergyArousal — most replicated dimension in all music psychologyIdentical to scienceparallel
GrooveContemporary/rhythmic factor (MUSIC model) — orthogonal to energy confirmedCleaner label, same construct. Slayer test validates independence.parallel
FidelityScience uses genre as proxy — metal=aggressive, country=rootsy — never isolated as sonic textureWe decompose it. Lo-fi hip hop and lo-fi indie share production character across genres.justified divergence
VocalsSophisticated factor had an instrumental confound — researchers flagged it, never resolvedWe resolve it. Presence + character as one clean axis.justified divergence
EmotionValence component of affect science (Russell + later replications). Arousal is carried by Energy in our model.Aligned with science via decomposition: Emotion = valence, Energy = arousal. Load-bearing. Never drop.parallel
SocialScience studies listener social context — never encoded as a property of the music itselfWe encode it. Artist intention is a sonic property. This is our IP.novel
06Architecture

MVP — feature mapping path

Seed library
Kaggle dataset
~114K songs. Pre-computed Spotify audio features (energy, valence, danceability, acousticness, loudness, instrumentalness, liveness, etc.). No audio files needed. One-time offline download.
Our layer · IP
Feature mapping
Energy=energy · Groove=danceability · Fidelity=(1−acousticness)·0.6+loudness_norm·0.4 · Vocals=1−instrumentalness · Emotion=valence · Social=sqrt(danceability·energy)·0.85+liveness·0.15. Output: data/seeds.json.
Retrieval
6-dim cosine sim
In-memory vector store. Pure Go math. No ML at query time. Sub-millisecond. <200ms end-to-end target.
Metadata
Spotify API
Enrich results with album art, Spotify URL, canonical metadata. Not used for search — used for display only.
Anchor + discovery blending

Results are not ranked purely by vibe match. They are blended across popularity tiers. 51% familiar / 49% discovery.

Positions 1–2: anchor tier — popularity ≥ 65, highest vibe match within tier. Positions 3–5: discovery tier — popularity 35–65, highest vibe match within tier. Both tiers enforce a minimum vibe match floor — popularity never overrides feeling.

The familiar majority confirms the system understood the feeling. The discovery tier targets real artists who never had promotional machinery — quality floor at 35 excludes zero-play uploads. When a discovery result lands, the artist gets heard. That is the product working.

Phase 2 — CLAP hybrid path (deferred)

Audio source
FMA / long-tail
Free Music Archive (CC-licensed). Songs without Kaggle feature coverage. Offline indexing only — no audio at query time.
Dense embedding
CLAP
laion/larger_clap_music. 512-dim joint audio+text space. Python FastAPI sidecar. Runs once at index time per new song.
Our layer · IP
Hybrid re-ranker
α · clap_similarity + (1−α) · axis_match. α = 0.5–0.7, empirically tuned after PoC. CLAP handles long-tail; axis match enforces feeling fidelity.
Metadata
Spotify API
Same as MVP path.
07Session log
2026-04-27Session 1: Project created. Scaffold only. Uber Fx installed. No logic.
2026-04-27Session 2: Full design session. 6 axes + science cross-examination done. CLAP architecture. 10 mood presets with vectors. Discover concept scoped. Two UI skins. FOUNDATION.md. All docs rebuilt.
2026-04-27Session 3: Era chosen as optional soft MVP control. Off = all time. Discover moved to post-MVP for focus.
2026-04-28Session 4: Major architecture pivot. Kaggle Spotify dataset replaces CLAP as primary path. CLAP deferred to Phase 2 for long-tail. Anchor + discovery blending locked: 51% familiar / 49% discovery, floor at popularity ≥ 35. TASKS.md written.
2026-05-02Session 5: Dataset confirmed (114K songs, data/dataset.csv). 10-song scorecard. Vocals=1−instrumentalness locked. Fidelity formula upgraded to weighted blend: (1−acousticness)·0.6 + loudness_norm·0.4. Formula registry + v1-config.json created.
2026-05-03Session 6: Go types (T06). 10 genre presets (T07) — Pop→Ambient, vectors from dataset centroids. Social formula validated against known songs. In-memory vector store (T11), vibe service + anchor/discovery blending (T15, T23), HTTP handlers POST /query + GET /presets + GET /health (T17). Full backend stack complete.
2026-05-03Session 7: Server + config (T18), Fx wiring (T19). Backend runnable — go run ./cmd/api starts on :8080. Architecture and presets updated in both HTML files. Session log brought up to date.