Each integration card now has a Test button that re-runs its
connectivity check on demand and updates the badge in place.
- Refactors checkIntegrationStatus into checkIntegration(name) so a
single integration can be tested without firing the others.
- Adds POST /api/settings/test for the on-demand check.
- Replaces the "key exists ⇒ connected" placeholder for Tavily,
Gemini, and Nextdoor with real API calls (Tavily search, Gemini
models list, Nextdoor advertiser fetch). 401/403 surface as
"Invalid API key" / "Token expired or invalid" so a stale
credential is obvious instead of pretending to be healthy.
- Fixes Postiz auth header (was Bearer, the rest of the codebase
passes the API key bare — matches lib/postiz.ts now).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The OAuth token that authenticates the spawned `claude` CLI was only
readable from the container env, so an expired token meant editing
.env on the Unraid host and rebuilding. Now it can be rotated from
the Settings page like every other key.
- Adds CLAUDE_CODE_OAUTH_TOKEN to the settings registry and a "Claude"
card at the top of the settings UI.
- loadPipelineEnv() injects the DB value into every spawned subprocess
env (overrides the container env), covering both campaign launches
and chat sessions.
- checkIntegrationStatus() validates the token by hitting the Anthropic
messages API with a 1-token call, surfacing 401s as "Token expired
or invalid" instead of a generic "Not connected".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Dashboard with campaign management, asset gallery, and publishing queue
- 7-agent pipeline: trend scout, research, scripts, ad creative, video, copy, distribution
- Campaign form with screenshot upload, goal picker, platform selection
- Campaign detail view with Details/Pipeline/Assets/Chat tabs
- Two-set image generation: Gemini AI (NanoBanana MCP) + Canvas Design posters
- Remotion video rendering with phone.png frame and real screenshot alignment
- honeyDue branding: blue #0079FF, orange #FF9400, Inter font, warm off-white
- Asset cards with source badges (Gemini/Canvas/Remotion/Playwright)
- Markdown/JSON render endpoint for viewing pipeline outputs as HTML
- Settings page with Tavily, Gemini, Postiz, Nextdoor integration management
- Claude Chat for campaign feedback loop with streaming SSE
- Postiz publishing modal with scheduling
- Auth with NextAuth credentials + JWT sessions
- SQLite via Prisma with better-sqlite3 adapter
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>