1.8 KiB
1.8 KiB
Daily Digest Blog (blog-backup)
Next.js app for an article-level daily digest. The core model is:
- One database row per article (
blog_articles) - Multiple articles can share the same
digest_date - RSS emits one
<item>per article
Local run
npm install
npm run dev
Dev server: http://localhost:3002
Required env vars
Set in .env.local:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYCRON_API_KEY
Database setup
Run migrations in supabase/migrations (or apply schema.sql for a fresh setup).
Main table migration:
supabase/migrations/20260303_create_blog_articles.sql
API surface
Primary article API
GET /api/articles(public)POST /api/articles(auth required)GET /api/articles/:id(public)PATCH /api/articles/:id(auth required)DELETE /api/articles/:id(auth required)
Auth for write routes:
- Supabase bearer token, or
x-api-key: <CRON_API_KEY>
Digest ingestion API
POST /api/digest(requiresx-api-key)- Accepts
date+articles[], inserts oneblog_articlesrow per article
RSS
GET /api/rss- article feed (one item per article)GET /api/podcast/rss- podcast feed for rows withaudio_url
Legacy compatibility
GET/POST/DELETE /api/messagesis kept as a compatibility shim overblog_articles.
UI pages
/public article feed/podcastaudio episode list from article rows with audio/adminauthenticated article CRUD + audio upload/loginSupabase auth
CLI
Use project CLI:
./scripts/blog.sh --help
Recommended commands:
article-addarticle-listarticle-deleterss
Audio
Audio files are stored in Supabase Storage bucket podcast-audio and linked via:
blog_articles.audio_urlblog_articles.audio_duration