The scheduler for one brand's social accounts.
Draft once, review every post, publish on schedule — TikTok, Instagram Reels, and YouTube Shorts, from one small process you run yourself. No search engine, no workflow orchestrator, nothing to babysit.
Built to stay small
The established self-host options are built for agencies running many clients at once. This is the missing middle: one brand, a few accounts, nothing extra.
Review before it ships
Every drafted post waits for a human to approve, edit, or reject it. Nothing reaches a real account unattended.
Three platforms, one queue
YouTubeInstagramTikTok
from a single place - the scheduler checks every minute and publishes what's due.
Your server, your data
Platform tokens are encrypted at rest. There's no third-party service in the middle of your accounts - just this process and the platforms' own APIs.
Genuinely tiny
One Node process, one SQLite file. No Elasticsearch, no Temporal, no Docker Compose stack to maintain beyond this single container.
How it works
Three steps, the same for every post regardless of source.
- 1
Draft or import
Write a post by hand, or point an importer at wherever your drafts already live - a folder of Markdown files, a spreadsheet, anything.
- 2
Review & approve
Every import lands as "pending review" - watch the attached clip right in the queue, edit the caption or schedule time, then approve it or reject it.
- 3
Publish on schedule
A once-a-minute loop checks for approved posts whose time has come and publishes them through each platform's own API. Failures are visible, with one-click retry.
Your server, your data
- Platform tokens encrypted at rest (AES-256-GCM) - losing the key just means reconnecting accounts, by design
- One shared dashboard password - no user accounts to manage for a single-operator tool
- TikTok publishes privately until TikTok has reviewed the app
- MIT licensed - read every line yourself, nothing hidden behind a paid tier
Run your own copy
Clone it, fill in a .env, and you're scheduling posts in minutes - or open the
dashboard if you already have one running.