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
210 lines
6.7 KiB
Markdown
210 lines
6.7 KiB
Markdown
# Vynl - AI Music Discovery
|
|
|
|
## Tagline
|
|
"Dig deeper. Discover more."
|
|
|
|
## What It Does
|
|
Import your playlists from any streaming platform, drop in a song or artist, and Vynl's AI finds music you'll love - from underground gems to hidden tracks from artists you already know. It tells you **why** you'll like it, not just **what** to listen to.
|
|
|
|
## Target Audience
|
|
- Music lovers who feel stuck in algorithm bubbles
|
|
- People who use multiple streaming platforms
|
|
- Playlist curators
|
|
- Anyone who misses the feeling of discovering new music
|
|
|
|
## Core Features
|
|
|
|
### Free Tier
|
|
- Import 1 playlist (up to 50 songs)
|
|
- Search by artist or song
|
|
- 10 AI recommendations per day
|
|
- Basic "similar to" recommendations
|
|
- Export recommendations as text list
|
|
|
|
### Pro Tier ($4.99/month)
|
|
- Unlimited playlist imports from all platforms
|
|
- Unlimited AI recommendations
|
|
- Deep analysis: mood, tempo, era, production style, lyrical themes
|
|
- "Go deeper" mode - find underground/indie artists in the same space
|
|
- "Time machine" - find music from a specific era that matches your taste
|
|
- "Mood shift" - "I like this but want something darker/faster/mellower"
|
|
- Export playlists directly back to Spotify/Apple Music/YouTube Music/Tidal
|
|
- Recommendation history and saved discoveries
|
|
- "Why you'll like this" AI explanations
|
|
- Cross-platform playlist sync
|
|
|
|
## Platform Support
|
|
|
|
### Import From
|
|
- Spotify (API - OAuth)
|
|
- Apple Music (MusicKit API)
|
|
- YouTube Music (ytmusicapi)
|
|
- Tidal (API)
|
|
- Last.fm (scrobble history)
|
|
- Manual entry (paste song/artist name)
|
|
- CSV/text file upload
|
|
|
|
### Export To
|
|
- Spotify (create playlist via API)
|
|
- Apple Music (create playlist via MusicKit)
|
|
- YouTube Music (create playlist via API)
|
|
- Tidal (create playlist via API)
|
|
- CSV/shareable link
|
|
|
|
## Tech Stack
|
|
|
|
### Backend
|
|
- Python 3.12+ / FastAPI
|
|
- PostgreSQL (users, playlists, recommendations, history)
|
|
- Redis (caching, rate limiting, session)
|
|
- Celery (async playlist analysis, background jobs)
|
|
|
|
### Frontend
|
|
- React 19 + TypeScript + Vite
|
|
- Tailwind CSS
|
|
- Mobile: React Native or PWA (progressive web app)
|
|
|
|
### AI/ML
|
|
- Claude API for intelligent recommendations with explanations
|
|
- Spotify Audio Features API (tempo, energy, danceability, valence, acousticness)
|
|
- MusicBrainz API (artist relationships, genres, tags)
|
|
- Last.fm API (similar artists, tags, listener stats)
|
|
- Audio embeddings for sonic similarity (optional - Essentia/Librosa)
|
|
|
|
### Infrastructure
|
|
- Azure App Service or self-hosted (like BillWise)
|
|
- Stripe for payments
|
|
- OAuth 2.0 for all streaming platform connections
|
|
|
|
## AI Recommendation Engine
|
|
|
|
### How It Works
|
|
```
|
|
User imports playlist or enters song/artist
|
|
│
|
|
▼
|
|
Gather metadata from all sources:
|
|
- Spotify: audio features (tempo, key, energy, mood)
|
|
- MusicBrainz: genres, relationships, tags
|
|
- Last.fm: similar artists, listener overlap
|
|
- Lyrics analysis (optional)
|
|
│
|
|
▼
|
|
Build "taste profile":
|
|
- Genre distribution
|
|
- Mood/energy preferences
|
|
- Era preferences
|
|
- Production style (acoustic vs electronic, raw vs polished)
|
|
- Lyrical themes
|
|
│
|
|
▼
|
|
Claude AI analyzes profile + user request:
|
|
"Based on your love of [specific patterns], here are artists
|
|
you likely haven't heard that share [specific qualities]"
|
|
│
|
|
▼
|
|
Filter and rank recommendations:
|
|
- Exclude what user already has
|
|
- Prioritize lesser-known artists (discovery factor)
|
|
- Include preview links
|
|
- Generate "why you'll like this" for each
|
|
```
|
|
|
|
### Example Prompts to Claude
|
|
- "My playlist is 60% indie rock, 20% shoegaze, 20% post-punk. Find me 10 artists I probably haven't heard."
|
|
- "I love the production style of Tame Impala but want something with female vocals and darker lyrics."
|
|
- "Find songs from the 80s that match the energy of my playlist but aren't the obvious hits."
|
|
|
|
## Data Model
|
|
|
|
### Users
|
|
- id, email, name, plan (free/pro), created_at
|
|
- connected_platforms (spotify_token, apple_token, etc.)
|
|
|
|
### Playlists
|
|
- id, user_id, platform_source, name, track_count, imported_at
|
|
- taste_profile (JSON - computed analysis)
|
|
|
|
### Tracks
|
|
- id, title, artist, album, isrc
|
|
- spotify_id, apple_id, youtube_id, tidal_id
|
|
- audio_features (tempo, energy, key, etc.)
|
|
- genres, tags, mood
|
|
|
|
### Recommendations
|
|
- id, user_id, source_playlist_id, recommended_track_id
|
|
- reason (AI explanation), score, created_at
|
|
- user_feedback (liked/disliked/saved)
|
|
|
|
### Discovery Sessions
|
|
- id, user_id, query, mode (similar/deeper/mood/era)
|
|
- results, created_at
|
|
|
|
## Monetization
|
|
|
|
### Free
|
|
- Limited to 10 recommendations/day
|
|
- 1 playlist import
|
|
- No export to streaming platforms
|
|
- Ads (tasteful, music-related)
|
|
|
|
### Pro ($4.99/month or $39.99/year)
|
|
- Unlimited everything
|
|
- All export features
|
|
- Priority AI processing
|
|
- No ads
|
|
|
|
### Potential Revenue Streams
|
|
- Affiliate links to streaming platforms
|
|
- Artist promotion (paid placement in "sponsored discovery")
|
|
- API access for other apps
|
|
- Data insights for labels (anonymized trends)
|
|
|
|
## Competitive Landscape
|
|
|
|
| Product | What It Does | Vynl Advantage |
|
|
|---------|-------------|----------------|
|
|
| Spotify Discover Weekly | Algorithm-based weekly playlist | Only works within Spotify, no cross-platform |
|
|
| Last.fm | Scrobble tracking + similar artists | No AI explanations, stale recommendations |
|
|
| EveryNoise | Genre exploration map | Academic, not personalized |
|
|
| Maroofy | Song similarity search | Single song only, no playlist analysis |
|
|
| Chosic | Spotify playlist analyzer | Spotify only, basic recommendations |
|
|
| Discoverify | Spotify discovery tool | Spotify only |
|
|
|
|
**Vynl's edge**: Cross-platform + AI that explains WHY + deep/underground discovery + mood/era controls
|
|
|
|
## MVP (v1.0) Scope
|
|
|
|
### Must Have
|
|
- [ ] User auth (email + OAuth)
|
|
- [ ] Spotify playlist import
|
|
- [ ] Manual song/artist search
|
|
- [ ] AI recommendations (Claude API)
|
|
- [ ] "Why you'll like this" explanations
|
|
- [ ] Basic taste profile display
|
|
- [ ] Save/bookmark recommendations
|
|
- [ ] Responsive web app
|
|
|
|
### Nice to Have (v1.1)
|
|
- [ ] Apple Music import/export
|
|
- [ ] YouTube Music import/export
|
|
- [ ] Export playlist to Spotify
|
|
- [ ] "Go deeper" underground mode
|
|
- [ ] Mood shift controls
|
|
|
|
### Future (v2.0)
|
|
- [ ] Tidal, Last.fm, Deezer support
|
|
- [ ] Mobile app (React Native)
|
|
- [ ] Social features (share discoveries, follow curators)
|
|
- [ ] "Listening rooms" - real-time shared discovery sessions
|
|
- [ ] Artist dashboard (see who's discovering your music)
|
|
|
|
## Brand Identity
|
|
|
|
- **Name**: Vynl
|
|
- **Vibe**: Warm, analog nostalgia meets modern AI
|
|
- **Colors**: Deep purple/violet (#7C3AED) + warm cream (#FFF7ED) + charcoal (#1C1917)
|
|
- **Font**: Something with character - not sterile tech (Inter for body, custom display font)
|
|
- **Logo**: Stylized vinyl record with AI circuit pattern in the grooves
|
|
- **Voice**: Music-nerd friendly, never pretentious, excited about discovery
|