Commit Graph

40 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
root
cef7d576d4 Add production deployment config, Alembic migration, switch to Haiku
- Production Docker Compose with Caddy reverse proxy, Gunicorn, Nginx
- Multi-stage frontend build for production
- Deploy script and automated database backup script
- Initial Alembic migration with all tables
- Switch recommendation model from Sonnet to Haiku for cost efficiency
2026-03-30 21:40:16 -05:00
root
b97955d004 Add Stripe subscription billing integration
- Add stripe_customer_id and stripe_subscription_id fields to User model
- Add Stripe config settings (secret key, publishable key, price ID, webhook secret)
- Create billing API endpoints: checkout session, webhook handler, portal, status
- Add frontend Billing page with upgrade/manage subscription UI
- Add billing route and Pro nav link
- Add stripe dependency to requirements
2026-03-30 21:38:40 -05:00
root
58c17498be Add YouTube Music playlist import support
- Add ytmusicapi dependency for fetching public YouTube Music playlists
- Create youtube_music service with playlist fetching and track search
- Add /api/youtube-music/import and /api/youtube-music/search endpoints
- Add importYouTubePlaylist and searchYouTubeMusic API client functions
- Update Playlists page with YouTube Music import button and URL input modal
2026-03-30 21:33:27 -05:00
root
155cbd1bbf Initial MVP: full-stack music discovery app
Backend (FastAPI):
- User auth with email/password and Spotify OAuth
- Spotify playlist import with audio feature extraction
- AI recommendation engine using Claude API with taste profiling
- Save/bookmark recommendations
- Rate limiting for free tier (10 recs/day, 1 playlist)
- PostgreSQL models with Alembic migrations
- Redis-ready configuration

Frontend (React 19 + TypeScript + Vite + Tailwind):
- Landing page, auth flows (email + Spotify OAuth)
- Dashboard with stats and quick discover
- Playlist management and import from Spotify
- Discover page with custom query support
- Recommendation cards with explanations and save toggle
- Taste profile visualization
- Responsive layout with mobile navigation
- PWA-ready configuration

Infrastructure:
- Docker Compose with PostgreSQL, Redis, backend, frontend
- Environment-based configuration
2026-03-30 15:53:39 -05:00