'use client' import { UploadForm, UploadFormData } from '@/components/UploadForm' import { WaveformDisplay } from '@/components/WaveformDisplay' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' export default function UploadPage() { const router = useRouter() const [audioFile, setAudioFile] = useState(null) const [genres, setGenres] = useState>([]) const [isLoading, setIsLoading] = useState(false) useEffect(() => { fetchGenres() }, []) const fetchGenres = async () => { try { const res = await fetch('/api/discover/genres') if (res.ok) { const data = await res.json() setGenres(data.genres || []) } } catch (error) { console.error('Failed to fetch genres:', error) } } const handleSubmit = async (data: UploadFormData) => { if (!data.audioFile) return setAudioFile(data.audioFile) setIsLoading(true) try { const formData = new FormData() formData.append('audio', data.audioFile) formData.append('title', data.title) if (data.coverFile) formData.append('cover', data.coverFile) if (data.albumId) formData.append('albumId', data.albumId) if (data.genreIds.length > 0) formData.append('genreIds', JSON.stringify(data.genreIds)) if (data.releaseDate) formData.append('releaseDate', data.releaseDate) const res = await fetch('/api/songs/upload', { method: 'POST', body: formData, }) if (res.ok) { const result = await res.json() router.push(`/artist/${result.song?.artistId || ''}`) } } catch (error) { console.error('Upload failed:', error) } finally { setIsLoading(false) } } return (
{/* Header */}

Upload Music

Share your music with the world

{/* Waveform Preview */} {audioFile && (

Audio Preview

)} {/* Upload Form */}
{/* Guidelines */}

Upload Guidelines

  • Audio files must be in MP3, WAV, or FLAC format
  • Maximum file size: 100MB
  • Make sure you own the rights to the music you upload
  • Add accurate metadata for better discoverability
) }