59 Commits

Author SHA1 Message Date
root
dcff90289c Redesign landing page with all features: 6 discovery modes, 8 tools, taste match 2026-04-03 21:18:14 -05:00
root
f2b8dadbf8 Add API cost tracking to admin dashboard
Track estimated Anthropic API costs per request across all Claude API
call sites (recommender, analyze, artist-dive, generate-playlist, crate,
rabbit-hole, playlist-fix, timeline, compatibility). Log token usage and
estimated cost to the app logger. Aggregate costs in admin stats endpoint
and display total/today costs and token usage in the admin dashboard.
2026-03-31 20:51:51 -05:00
root
0ee8f9a144 Add public shareable taste profiles
Users can generate a share link for their taste profile via the
"Share My Taste" button. The link opens a public page showing
listening personality, genre breakdown, audio features, and top
artists with a CTA to register. Token-based URL prevents enumeration.
2026-03-31 20:51:12 -05:00
root
db2767bfda Add user settings page and PWA install support
- Add profile update, password change, and account deletion endpoints
- Create Settings page with profile editing, password change, and danger zone
- Add Settings link to user dropdown menu in Layout
- Add /settings route to App.tsx
- Add API functions for profile management
- Create PWA manifest.json and add meta tags to index.html
2026-03-31 20:49:57 -05:00
root
5215e8c792 Add playlist export and SEO meta tags
Add text/CSV export endpoints for playlists and saved recommendations.
Add export buttons to PlaylistDetail and Recommendations pages.
Add Open Graph and Twitter meta tags to index.html for better SEO.
2026-03-31 20:49:07 -05:00
root
957a66bbd0 Reset onboarding for all existing users (v2 key) 2026-03-31 20:43:46 -05:00
root
d1ee78fc27 Add first-time user onboarding walkthrough
Multi-step modal overlay that guides new users through key features:
Welcome, Import Music, Discover, Features, and Get Started. Shows
once on first login via localStorage flag, with animated step
transitions, progress dots, and navigation to import/discover pages.
2026-03-31 20:41:29 -05:00
root
cb6de2f43e Add pre-release checklist for things that need manual setup 2026-03-31 20:08:04 -05:00
root
4b4f383f48 Split models: Sonnet for discoveries (accuracy), Haiku for everything else (cost) 2026-03-31 19:43:14 -05:00
root
2cb6f4d6b2 Switch to Sonnet for better accuracy, stronger anti-hallucination prompt 2026-03-31 19:41:13 -05:00
root
5773870c91 Exclude all previously recommended songs from new discoveries - no more repeats 2026-03-31 19:29:52 -05:00
root
34eabf0fae Add touch swipe gestures + keyboard arrows to Crate Digger 2026-03-31 19:26:50 -05:00
root
2b56d0c06b Persist results to sessionStorage on all pages - prevents data loss on external link clicks 2026-03-31 19:13:26 -05:00
root
88e7bc9c30 Add inline YouTube player on recommendation cards, fetch real video IDs via ytmusicapi 2026-03-31 19:09:12 -05:00
root
086b9e4e71 Add Concert Finder and Rabbit Hole features
- Concert Finder: Bandsintown API integration to find upcoming shows for
  recommended artists, with expandable tour dates section on recommendation cards
- Rabbit Hole: Multi-step guided discovery journey where each song connects
  to the next through a shared musical quality (producer, influence, tone, etc.)
- New /rabbit-hole route with seed input, step count selector, and vertical
  chain visualization of connected songs
- Added concerts endpoint, rabbit hole endpoint, and corresponding frontend
  API functions and navigation
2026-03-31 19:01:22 -05:00
root
aeadf722cb Add Crate Digger feature for swipe-based music discovery
- POST /api/recommendations/crate endpoint generates diverse crate of discoveries
- POST /api/recommendations/crate-save endpoint saves individual picks
- CrateDigger.tsx page with card UI, pass/save buttons, slide animations
- Progress bar, save counter, and end-of-crate stats summary
- Added to nav, routing, and API client
2026-03-31 18:58:02 -05:00
root
5b603f4acc Add Taste Match compatibility feature for comparing music taste between users 2026-03-31 18:57:33 -05:00
root
53ab59f0fc Fix share button: add clipboard fallback for HTTP/mobile 2026-03-31 18:54:26 -05:00
root
7abec6de7c Add Tier 2 features: Playlist Generator, Artist Deep Dive, Music Timeline
- Playlist Generator: describe a vibe, get a 15-30 song playlist, save or copy as text
- Artist Deep Dive: click any artist name for influences, best album, hidden gems, similar artists
- Music Timeline: visual decade breakdown of your taste with AI insight
- Nav updates: Create Playlist, Timeline links
2026-03-31 18:50:23 -05:00
root
0b82149b97 Add mood scanner and surprise me features to discover page
Add mood_energy and mood_valence sliders that inject mood context into
AI recommendation prompts. Add "Surprise Me" button that generates
recommendations from a creative, unexpected angle without requiring
any user input. Includes backend endpoints, schema updates, and
full frontend UI integration.
2026-03-31 18:31:35 -05:00
root
da94df01da Add "More Like This" button and "Why Do I Like This?" analyze feature
- Add Repeat button to RecommendationCard that navigates to Discover
  with a pre-filled query for similar songs
- Read q param on Discover page to pre-fill the query field
- Add POST /api/recommendations/analyze endpoint that uses Claude to
  explain why a user likes a song and suggest similar music
- Create Analyze page with artist/title inputs, analysis card,
  quality tags, and recommendation cards
- Add Analyze nav item and /analyze route
2026-03-31 18:28:05 -05:00
root
2e26aa03c4 Add share discoveries feature with public share links
- Add single and batch share endpoints with signed URL tokens
- Add public view endpoints (no auth required) for shared recommendations
- Add share button with clipboard copy to RecommendationCard
- Create SharedView page with Vynl branding and registration CTA
- Add /shared/:recId/:token public route in App.tsx
- Add shareRecommendation and getSharedRecommendation API functions
2026-03-31 18:20:43 -05:00
root
3bab0b5911 Add feature roadmap prioritized by impact and effort 2026-03-31 18:15:10 -05:00
root
99ca2ff7cc Remove MusicBrainz/YT verification (async greenlet conflict), use direct YouTube Music search links 2026-03-31 16:14:42 -05:00
root
a0d9f1f9d9 Add live logs to admin dashboard with level filtering and error middleware 2026-03-31 15:54:21 -05:00
root
40322e8861 Add admin dashboard page with usage stats, user breakdown, admin-only nav 2026-03-31 15:43:58 -05:00
root
cc8bb0dd09 Add admin stats endpoint for usage tracking 2026-03-31 13:49:18 -05:00
root
fcca23e3ca Exclude queried artists from recommendations - only suggest new artists 2026-03-31 10:41:28 -05:00
root
51040e3723 Fix Discover: auto-scroll to results, improve mobile layout 2026-03-31 10:34:49 -05:00
root
75ca5fff64 Fix Discover page: stringify IDs for Set comparisons, show result count 2026-03-31 10:22:07 -05:00
root
85d4210a21 Switch to MusicBrainz for song verification, YouTube Music for playback links 2026-03-31 10:15:32 -05:00
root
9f9f9581d6 Verify all recommendations against YouTube Music - no more hallucinated songs, direct YT Music links 2026-03-31 10:12:37 -05:00
root
152f217675 Add Bandcamp discovery via public API (no scraping) - browse new releases by genre tag 2026-03-31 09:58:28 -05:00
root
be30a47bbb Remove Bandcamp scraping (TOS violation), use YouTube links for all recommendations 2026-03-31 09:51:20 -05:00
root
ccb49aa693 Fix login redirect: load user before navigating to dashboard 2026-03-31 09:47:32 -05:00
root
240032d972 Add Bandcamp/YouTube links on all recs, Fix My Playlist, configurable rec count
- Bandcamp: match artist+song, fall back to artist-only page
- YouTube fallback: if not on Bandcamp, link to YouTube music video search
- Fix My Playlist: AI analyzes playlist, finds outliers, suggests replacements
- User chooses recommendation count (5, 10, 15, 20)
2026-03-31 08:45:02 -05:00
root
47ab3dd847 Add Fix My Playlist feature
New endpoint POST /api/playlists/{id}/fix that analyzes a playlist
using Claude AI to identify outlier tracks that don't match the
overall vibe, and suggests better-fitting replacements.

Frontend shows results with warm amber cards for outliers and green
cards for replacements, with dismissible suggestions and visual
highlighting of flagged tracks in the track list.
2026-03-31 08:43:20 -05:00
root
cf2d8019bb Fix playlists API: disable redirect_slashes, fix route path for Vite proxy 2026-03-31 01:08:45 -05:00
root
018f5f23cb Fix YouTube Music import: isolate sync ytmusicapi from async DB session 2026-03-31 00:58:01 -05:00
root
50e9b492d5 Fix YouTube Music import (run sync ytmusicapi in thread), remove all Spotify UI 2026-03-31 00:30:55 -05:00
root
1eea237c08 Add discovery modes, personalization controls, taste profile page, updated pricing
- Discovery modes: Sonic Twin, Era Bridge, Deep Cuts, Rising Artists
- Discovery dial (Safe to Adventurous slider)
- Block genres/moods exclusion
- Thumbs down/dislike on recommendations
- My Taste page with Genre DNA breakdown, audio feature meters, listening personality
- Updated pricing: Free (5/week), Premium ($6.99/mo), Family ($12.99/mo coming soon)
- Weekly rate limiting instead of daily
- Alembic migration for new fields
2026-03-31 00:21:58 -05:00
root
789de25c1a Remove Listen page, tighten Bandcamp matching to 75%+ artist similarity 2026-03-31 00:10:15 -05:00
root
1efa5cd628 Verify Bandcamp results match the actual artist/track before including 2026-03-30 23:56:17 -05:00
root
c6a82cf9d9 Bandcamp mode: only return artists verified on Bandcamp, request 15 and filter to 5 2026-03-30 23:50:02 -05:00
root
44eab20614 Make Bandcamp mode opt-in toggle on Discover page 2026-03-30 23:44:04 -05:00
root
37fccc6eef Wire Bandcamp into AI recommendations - prioritize indie artists, attach Bandcamp links to results 2026-03-30 23:42:03 -05:00
root
dd4df6a070 Add Bandcamp search and Listening Room page
Implement Bandcamp search service with autocomplete API and HTML
scraping fallback. Add /api/bandcamp/search and /api/bandcamp/embed
endpoints. Create Listening Room page with search, embedded player,
and queue management. Add navigation entry and Bandcamp link on
recommendation cards.
2026-03-30 23:38:14 -05:00
root
3303cd1507 Fix Docker Compose: add PYTHONPATH for Alembic, use port 8100, fix Vite proxy for container networking 2026-03-30 23:06:52 -05:00
root
90945932ad Add Last.fm import support
Users can import their top tracks from Last.fm by entering their username.
No OAuth required - uses the public Last.fm API with user.getTopTracks and
user.getInfo endpoints. Includes a preview feature to verify the username
and see sample tracks before importing. Supports configurable time periods
(all time, 7 days, 1/3/6/12 months). Free tier playlist limit enforced.
2026-03-30 22:49:13 -05:00
root
d0ab1755bb Add paste-your-songs manual import feature
Users can now paste a list of songs as text to create a playlist without
needing any service integration. Supports multiple formats: "Artist - Title",
"Title by Artist", "Artist: Title", and numbered lists. Includes a live
song count preview in the modal and free tier playlist limit enforcement.
2026-03-30 22:48:35 -05:00