Commit Graph

28 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
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
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
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
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
a0d9f1f9d9 Add live logs to admin dashboard with level filtering and error middleware 2026-03-31 15:54:21 -05:00
root
cc8bb0dd09 Add admin stats endpoint for usage tracking 2026-03-31 13:49:18 -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
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
44eab20614 Make Bandcamp mode opt-in toggle on Discover page 2026-03-30 23:44:04 -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
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
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