For whoever keeps the studio running
Get Grok talking, keep data durable, then plug Postiz in for semi and full publishing. Users never need this page.
Run
npm run dev :3050
Grok
Hermes or API key
Data
File or MySQL
Postiz
Docker + social apps
Map
Channel IDs
Cron
Weekly job
Check
/api/health
Port 3050 so it doesn’t collide with Brandroom (3000) or BrandOS (3040).
cd C:\ai\brandstudio copy .env.example .env.local npm install npm run dev
Then open http://localhost:3050
Set BRANSTUDIO_SESSION_SECRET in .env.local before any real users.
Leave Brandroom and BrandOS folders alone — this repo is the one we run.
✓Done when — http://localhost:3050 loads the landing page and you can register.
Desk uses Hermes OAuth. Vercel needs an API key.
Green chip = models are reachable. Gray “offline” = start the proxy.
On this machine
hermes proxy start --provider xai --host 127.0.0.1 --port 8645
On Vercel
Set XAI_API_KEY. Hermes is not on the server.
✓Done when — the header chip is green (hermes-proxy+xai-oauth or xai-api-key), not “offline”.
File JSON is fine on the desk. Use MySQL when more than one person or a host that forgets /tmp.
data/brandstudio.db.json + uploads. No extra services.
Import sql/schema.sql, then set DATABASE_URL or MYSQL_HOST / user / password / database.
✓Done when — desk = data/brandstudio.db.json exists after first login; hosted = health reports storage.mode: mysql.
Only needed for semi or full auto. We call its API — we do not fork the repo (AGPL).
cd C:\ai\brandstudio docker compose up -d
UI: http://localhost:5000
Create developer apps at Meta, LinkedIn, and X. Paste those keys into Postiz.
Instagram needs a Facebook Page + Business account.
In Brandstudio .env.local:
POSTIZ_BASE_URL=http://localhost:5000/api/public/v1 POSTIZ_API_KEY=... CRON_SECRET=long-random
✓Done when — Postiz UI opens on :5000 and you can log in. Skip this whole step if every brand stays manual.
Users pick the pipeline. You give them working integration IDs.
Connect accounts inside Postiz first. Switching a brand to semi/full without channels snaps it back to manual and lists what’s missing.
✓Done when — each platform the brand uses has an integration id saved, and the mode stays on semi or full after save.
Full mode only. First week stays supervised unless “Training week done” is checked.
npm run weekly # or curl -X POST http://127.0.0.1:3050/api/cron/weekly -H "Authorization: Bearer $CRON_SECRET"
Hook that URL to Windows Task Scheduler / cron every Sunday night.
Per brand: Kill switch pauses the job. Failed slots skip — they don’t block the rest of the week.
✓Done when — a test npm run weekly returns without auth errors. Full brands with training unchecked are skipped on purpose.
If Grok or storage is down, users will see it in the header. Confirm here first.
{
"ok": true,
"storage": { "mode": "file" },
"grok": { "ok": true, "source": "hermes-proxy+xai-oauth" }
}ok: false — fix Grok or disk/MySQL before blaming the UI.
Social APIs will still break sometimes. Fall back to ZIP for that network. The studio already did its job.
Open /api/health✓Done when — ok: true for both storage and Grok. Then hand users the other guide.
Users should only need the other guide. This page is for you.
Show me the user path