-- Global social post scheduler (project-agnostic posts, per-target project refs) CREATE TABLE IF NOT EXISTS social_posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, image_path TEXT, scheduled_at TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending', -- pending | processing | done | partial | failed created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE TABLE IF NOT EXISTS social_targets ( id INTEGER PRIMARY KEY AUTOINCREMENT, post_id INTEGER NOT NULL REFERENCES social_posts(id) ON DELETE CASCADE, project_id INTEGER NOT NULL, platform TEXT NOT NULL, -- discord | mastodon | linkedin target_key TEXT NOT NULL, include_image INTEGER NOT NULL DEFAULT 0, status TEXT NOT NULL DEFAULT 'pending', -- pending | sent | failed error TEXT, sent_at TEXT ); CREATE INDEX IF NOT EXISTS idx_social_posts_status ON social_posts(status, scheduled_at); CREATE INDEX IF NOT EXISTS idx_social_targets_post ON social_targets(post_id);