Quickstart

This takes about five minutes from clone to your first sandboxed post. Full docs are in the wiki.

1. Install

Docker

git clone https://github.com/CodesbyFebin/Open-Post.git
cd Open-Post
cp .env.example .env          # set SANDBOX_MODE=true for a first run
docker compose up -d --build

Node.js 20.12+

git clone https://github.com/CodesbyFebin/Open-Post.git
cd Open-Post
npm install
cp .env.example .env
npm start                     # http://localhost:3000

2. Add a channel

Open the dashboard and go to Channels. Pick a type and name it. The channel card lists the env vars it still needs. Set them in .env and restart:

TypeEnv vars (default prefix)
xX_API_KEY X_API_SECRET X_ACCESS_TOKEN X_ACCESS_SECRET or X_OAUTH2_USER_TOKEN
linkedinLINKEDIN_ACCESS_TOKEN LINKEDIN_AUTHOR_URN
redditREDDIT_CLIENT_ID REDDIT_CLIENT_SECRET REDDIT_USERNAME REDDIT_PASSWORD (+ subreddit on the channel)
blueskyBLUESKY_IDENTIFIER BLUESKY_APP_PASSWORD
webhookURL on the channel or WEBHOOK_URL; optional WEBHOOK_SECRET
sandboxnone

3. Schedule via the API

curl -X POST localhost:3000/api/channels -H 'Content-Type: application/json' \
  -d '{"type":"sandbox","name":"Try it"}'

curl -X POST localhost:3000/api/posts -H 'Content-Type: application/json' \
  -d '{"content":"Hello from Open Post","channelIds":["<id>"],"scheduledFor":"2026-11-01T09:00:00Z"}'

The scheduler checks every 30 seconds and publishes posts that are due. See the OpenAPI spec for every endpoint.

4. Turn on autopilot

Under Autopilot, add topics, pick a persona and target channels, set cadence slots, and enable it. To use an LLM, set AI_PROVIDER to openai, anthropic, gemini or ollama, plus that provider's key.

Next steps