songsense/BACKEND_COMPLETE.md

4.0 KiB

SongSense Backend - COMPLETE

All 11 Backend Files Built Successfully

Core Infrastructure

  1. src/lib/store.ts - In-memory job store with Map-based CRUD operations
  2. src/lib/processing/pipeline.ts - Main orchestration pipeline for single songs and albums

Processing Modules

  1. src/lib/processing/download.ts - Audio download (yt-dlp, curl, local files)
  2. src/lib/processing/convert.ts - Audio conversion to 192kbps MP3 (ffmpeg)
  3. src/lib/processing/transcribe.ts - Lyrics transcription (OpenAI Whisper API)
  4. src/lib/processing/analyze.ts - Audio analysis & spectrogram generation (songsee CLI)
  5. src/lib/processing/review.ts - AI review generation (Claude Sonnet 4 API with vision)

API Routes (Next.js 15 App Router)

  1. src/app/api/analyze/route.ts - POST: Start analysis job
  2. src/app/api/status/[jobId]/route.ts - GET: Check job status & progress
  3. src/app/api/review/[jobId]/route.ts - GET: Retrieve completed review
  4. src/app/api/upload/route.ts - POST: Upload audio files

Features Implemented

Download Support

  • YouTube URLs (yt-dlp)
  • SoundCloud URLs (yt-dlp)
  • Direct file URLs (curl)
  • Local file paths
  • File uploads via multipart/form-data

Processing Pipeline

  • Download → Convert → Transcribe → Analyze → Review
  • Progress tracking (0-100%)
  • Status updates at each step
  • Error handling with graceful failures
  • Album support (sequential track processing)

Audio Analysis

  • Spectrogram generation
  • Mel spectrogram
  • Chroma visualization
  • Loudness analysis
  • Tempogram
  • Metadata extraction (duration, sample rate, channels)

AI Review Generation

  • Claude Sonnet 4 API integration
  • Vision API for spectrogram analysis
  • Structured JSON output
  • Production analysis
  • Lyric analysis
  • Vibe & emotional impact
  • 1-10 rating scale
  • Standout lines extraction
  • Instrumental track detection

API Endpoints

POST   /api/analyze        → Start analysis (URL or file upload)
GET    /api/status/:jobId  → Get job status & progress
GET    /api/review/:jobId  → Get completed review
POST   /api/upload         → Upload file (returns path)

Environment Variables Required

OPENAI_API_KEY=sk-...      # For Whisper transcription
ANTHROPIC_API_KEY=sk-...   # For Claude review generation

External Dependencies

  • ffmpeg - Audio conversion
  • yt-dlp - YouTube/SoundCloud downloads
  • songsee - Audio analysis (installed at /opt/homebrew/bin/songsee)
  • curl - Direct file downloads

Type Safety

  • All files import from shared src/lib/types.ts
  • TypeScript compilation passes with no errors
  • Proper type annotations throughout

Error Handling

  • Try/catch blocks in all async functions
  • Console logging for debugging
  • Error status updates in job store
  • Graceful degradation (e.g., instrumental detection on transcription failure)

Storage Strategy

  • In-memory Map for job storage (MVP - no database)
  • Temporary files in /tmp/songsense/{jobId}/
  • Uploads in /tmp/songsense/uploads/
  • Analysis images in /tmp/songsense/{jobId}/analysis/

Next Steps (for Frontend Builder)

  1. Build UI to submit URLs/files to /api/analyze
  2. Poll /api/status/:jobId for progress updates
  3. Display review from /api/review/:jobId when complete
  4. Show spectrograms and visualizations
  5. Implement SSE for real-time progress (optional enhancement)

Testing Commands

# Test TypeScript compilation
npx tsc --noEmit

# Start Next.js dev server
npm run dev

# Test API endpoints
curl -X POST http://localhost:3000/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.youtube.com/watch?v=..."}'

curl http://localhost:3000/api/status/{jobId}
curl http://localhost:3000/api/review/{jobId}

Backend Status: READY FOR INTEGRATION 🚀

All backend files are built, tested, and ready for the frontend builder to create the UI layer.