Dashboard now supports all existing mutation APIs: feedback
(thumbs up/down, retract), profile CRUD, speaker mapping,
playlist generation, track discovery, taste rebuild, and
requeue failed embeddings. All controls use vanilla JS fetch
with toast notifications.
New endpoint: POST /api/admin/requeue-failed resets failed
embedding tracks back to pending.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Profile pill selector at top of page filters Recent Listens,
Feedback Activity, and Vibe Influence by selected profile.
Feedback items show profile badge when viewing all profiles.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New POST /api/profiles/{name}/feedback accepts explicit vibe text and
records feedback against a named profile. GET history endpoint added too.
Scoring now filters feedback by profile_name for profile-aware playlists.
Migration 005 adds profile_name column and makes playlist_id nullable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Background poller monitors HA media_player state during playlist sessions.
When a track transition occurs and the previous track was played < 40% of
its duration, automatically records "skip" feedback. Also includes the
previously uncommitted delete_feedback endpoint.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The vibe is the core concept of vibe-aware playlists but wasn't
visible anywhere on the dashboard. Now each recent playlist shows
its vibe text alongside track count and age.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds feedback API endpoints that record up/down/skip signals tied to
vibe context (CLAP embeddings + text). Dashboard now shows Feedback
Activity (recent events with signal counts) and Vibe Influence (how
the same track gets rated differently across vibes).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add recent listens, profiles, taste profiles, and recent playlists
to the status page. Two-column responsive grid layout with progress
bar for embeddings and relative timestamps throughout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Named profiles allow each household member to get personalized
recommendations without polluting each other's taste. Includes
profile CRUD API, speaker→profile auto-attribution, recent listen
history endpoint, and profile param on all existing endpoints.
All endpoints backward compatible (no profile param = "default").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Blend taste profile with text-embedded mood descriptions (e.g. "chill
ambient lo-fi") using pre-blended vector search against the existing
HNSW index. New optional `vibe` and `alpha` params on playlist generate
and recommendations endpoints. Backward compatible — no vibe = pure
taste profile (alpha=1.0).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The taste profile is just a weighted average of 512-dim vectors — trivially
cheap even with thousands of tracks. Rebuilding on every listen event keeps
recommendations always up to date.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a track plays, multiple HA entities (Cast, WiFi, MA) all fire
the automation simultaneously, creating 3x duplicate listen events.
Now skips logging if the same track was recorded within the last 60s.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Full music recommendation pipeline: listening history capture via webhook,
Last.fm candidate discovery, iTunes preview download, CLAP audio embeddings
(512-dim), pgvector cosine similarity recommendations, playlist generation
with known/new track interleaving, and Music Assistant playback via HA.
Includes: FastAPI app, SQLAlchemy models, Alembic migrations, Docker Compose
with pgvector/pg17, status dashboard, and all API endpoints.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>