Social Media Poster
Research
Pack · dark-motivational
self discipline motivation protocol
2 cuts a day at 09:00 & 18:00 UTC.
Pillars: discipline, mindset, habits.
Latest cuts
Loading…
Live experiment
No experiment running.
Seeds
self disciplinehow to stay disciplineddopamine detoxstoic morning routine
Research a niche — find what's performing
Reddit, LinkedIn and most Pinterest results carry no view count, so they rank on their own reaction count (upvotes / reactions / saves) and each card shows which. Engagement rate is the one figure that compares fairly across every platform.
SEO keywords — Keywords Everywhere
Expands your seed into related keywords ranked by monthly searches · CPC · competition (0–1). Click one to add it to the post caption. Needs
keywordsEverywhereApiKey in scraper/config.json.Topic queue — Layer 1
Seeds from the niche config (+ the best-performing recent topics) → Keywords Everywhere → treg → Jev → this queue. The auto-loop takes the highest-scored queued topic first. Without keys it runs on the free YouTube path with a heuristic score.
Queue — approve what goes out
Drafts are created on each platform's publisher (Postiz for Instagram / YouTube / TikTok, Zernio for Pinterest) by
pipeline/publish.mjs after the Jev gate. Approve flips them to scheduled at their slot; Reject deletes them there. The digest (Discord / email) carries the same actions as signed links. Failed rows show why (usually: channel not connected yet) — fix the cause and run publish.mjs --retry.Compose
Preview renders the video only (no posting). Publish renders, uploads to each platform's publisher (Postiz for Instagram / YouTube / TikTok, Zernio for Pinterest — routing in Settings), and creates the post(s).
Preview & publish
Render a preview to see your 1080×1920 video here.
Connect channels & get API keys in the Zernio dashboard → and the Postiz dashboard →
Style presets — feed it the look you want
The Auto-loop batch rotates through these presets, and once real engagement data comes in, it reinforces whichever preset performs best. Add as many as you want.
Auto-loop — self-improving
Runs the same batch as the 07:00 cron:
loop.mjs --config=niches/<pack>/niche.json. Seeds, templates, styles, research sources, platforms and the gate live in the pack's niche.json.Run a batch to see the last rendered video.
Each render takes the top queued topic, a template and a hook style (the live A/B arm when one is active, else weighted by what Layer 4 has measured), rotates 3 categories (value / outreach / cta) and your style presets, and avoids repeating recent hooks. Hover a pill for its critique. Renders go to the Queue via
publish.mjs; nothing publishes without approval unless the pack's autoPublish is on AND the Jev gate says allow AND the score clears the gate.Metrics — monitor it
Attribution: every measured number joins back to the template / hook style / topic that produced it (
attribution view in pipeline/data/state.db). Bars show mean views once posts are measured, render counts until then.Analytics come from each publisher (Postiz post analytics, Zernio analytics) plus the free YouTube Data API when
youtubeApiKey is set; pipeline/metrics.mjs snapshots them nightly and this button runs it now.Appearance
Saved in this browser only.
Environment — variables in force on the server
Read from the web server's environment (
/etc/environment, loaded by cron via pam_env and by Apache via its systemd drop-in). A variable here always wins over the same key stored in the cards below — those are fallbacks. Secrets are masked to their last 4 characters. To change one, edit /etc/environment on the server, then systemctl restart apache2 (cron picks it up on its next run).Publishers — who posts where
Postiz (self-hosted, :4007): dashboard → Settings → Public API. Zernio (hosted): sign up at zernio.com (no card; first 2 accounts free), connect Pinterest, then Dashboard → API keys. A platform's backend needs its key before that platform can post.
Research & approvals (Layers 1 + 3)
Jev scores topics (0-10), assigns pillars and gates drafts. treg is optional and fans out to Semrush, DataForSEO, SerpApi, … through one token; pick endpoint ids and their exact param names with
treg catalog search "keyword research" / treg catalog get <id> (each provider bills per call; tregMaxCalls in the niche config caps calls per run). Placeholders {seed} / {keyword} are filled per call.The approval digest lists new drafts with approve-all / reject links. Links are signed with the secret and point at the public base URL.
Research keys
YouTube search needs no key (the key only adds engagement stats). Apify covers Instagram / TikTok / Pinterest / LinkedIn research.
LLM
checking environment…
The server environment wins:
OPENROUTER_API_KEY in /etc/environment (or LLM_API_KEY + LLM_BASE_URL for another API) is used first by cron and UI runs alike; the key/URL stored here only apply when the environment has none. Model takes any slug on that API — anthropic/claude-opus-4.8, z-ai/glm-5.2, … Used for copy generation and autoresearch hypothesis proposals; the HyperFrames critic judge reads the same environment with JUDGE_MODEL.Keys are stored server-side in
pipeline/config.json / scraper/config.json and never sent back to the browser — a blank key field keeps its stored value.