- Create /api/audio endpoint for upload/get/delete operations - Add AudioPlayer component with custom controls - Add AudioUpload component for admin interface - Update admin page with audio upload UI and indicators - Update main blog page to use new AudioPlayer component - Add database migration for audio_url and audio_duration columns - Add comprehensive documentation in docs/MP3_AUDIO_FEATURE.md - Update README with audio feature overview
1.7 KiB
1.7 KiB
Daily Digest Blog
Next.js App Router blog with Supabase-backed posts, authenticated admin panel, and MP3 audio hosting.
Run locally
npm install
npm run dev
Dev server runs on http://localhost:3002.
Environment variables
Set these in .env.local:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY(used by external scripts/tools if needed)CRON_API_KEY
Public vs admin access
- Public blog (
/) is open to everyone. - Reading messages (
GET /api/messages) is public. - Admin UI (
/admin) requires a signed-in Supabase user. - If not signed in,
/adminredirects to/login. - Write APIs (
POST/DELETE /api/messages) require either:- a valid Supabase user bearer token, or
x-api-key: <CRON_API_KEY>(for automation/cron).
Login flow
- Open
/login - Sign in with a Supabase Auth email/password user
- You are redirected to
/admin
Digest automation endpoint
POST /api/digestrequiresx-api-key: <CRON_API_KEY>- Used for cron-based digest publishing
MP3 Audio Hosting
Upload and host MP3 files for individual blog posts.
Features
- Upload audio files up to 50MB
- Custom audio player with play/pause, seek, and volume controls
- Audio indicator in admin post list
- Automatic duration estimation
- Stored in Supabase Storage (
podcast-audiobucket)
Usage
- Go to
/adminand log in - Click "Edit" on any post
- Scroll to "Audio Attachment" section
- Upload an MP3 file
- Save changes
API Endpoints
GET /api/audio?postId={id}- Get audio info for a postPOST /api/audio- Upload audio file (requires auth)DELETE /api/audio- Remove audio from post (requires auth)
See docs/MP3_AUDIO_FEATURE.md for full documentation.