Add config system and POSSE syndication
Created by: jedmund
Summary
- Adds centralized config system with DB settings + env var fallback, replacing all
process.envusage across services - Adds POSSE syndication engine for Bluesky and Mastodon with auto-syndicate on publish
- Adds syndication status UI, social replies component, and syndication API routes
- Adds Syndication and Setting models with migrations
Details
Config system (src/lib/server/config.ts): All services (Last.fm, Cloudinary, Apple Music, Bluesky, Mastodon) now use getConfig() instead of process.env. Settings are read from DB first, falling back to env vars.
Syndication engine: Posts, projects, and albums can be automatically syndicated to Bluesky and Mastodon on publish. Includes .well-known/atproto-did endpoint for Bluesky domain verification.
UI: Syndication status component shows syndication state on edit forms. Social replies component displays replies from syndicated platforms.
Test plan
-
Verify dev server starts without errors -
Verify existing API routes still work (Last.fm, Cloudinary, Apple Music) -
Test publishing a post and verify syndication triggers -
Check syndication status displays correctly on edit forms -
Verify .well-known/atproto-didendpoint returns correct DID