Building CogSend: A Self-Hosted Social Media Scheduler
I have been using Typefully for a long time and it is genuinely great, but it supports a fixed set of platforms and I wanted to decide that for myself. So I built my own. Say hello to CogSend, a self-hosted social media scheduler.
CogSend is open source under the MIT license and it runs on your own free Cloudflare account. There is no monthly fee and no account with me, and your platform credentials stay in your infrastructure. It currently supports Mastodon, Bluesky, LinkedIn, Threads and X with more platform support coming soon.
What it can do
The main idea is, you write a post once, then customize it per platform if you want. There is a Global tab plus a tab for each platform you override, so the X version can stay short while the LinkedIn version says the same thing at length. If you paste a long draft, it splits into a thread that fits the tightest platform you selected, counted the way that platform counts.
- Publish now or schedule: Every destination reports its own result, so one platform failing does not take the rest down with it.
- Retries take care of themselves: Retryable failures back off and try again a few times. If a platform keeps refusing (sometimes, happens with Threads), the post parks under Failed with the reason, and you can fix it and retry.
- Manage it all from Posts: Cancel or reschedule a queued post without opening it, or retry only the destinations that failed.
- Images and links: Supports up to four images per post with alt text for each one and preview cards for links.
- Insights: Published against failed over 7, 30 or 90 days, bucketed in your own timezone, with failures grouped by reason instead of a wall of API errors.
- Locked down: One admin account with an authenticator app, credentials encrypted at rest, and an API key for scripts, Shortcuts and cron jobs.
How to install
You need Node and a Cloudflare account with Workers access, D1 and R2 available. And the whole install process is just two commands:
git clone --depth 1 https://github.com/deepakness/cogsend.git cogsend
cd cogsend && npm install && npm run setup
The setup does everything – creates the database and the bucket, generates the secrets, applies the migrations, deploys the Worker, and then signs in once against the live site to prove it works. At the end just open the final URL it prints, scan the QR with an authenticator app, save the backup codes, and start connecting your social accounts.
The Cloudflare free plan is enough for a personal instance. By the way, R2 does ask for a payment method on file even on the free tier, but the first 10 GB each month are free.
I think, it's more than enough for a single user, no?
Why I built it
Every new post and note I published went out through a small script to the same two platforms. It worked, but I wanted per-post control over where things go, and room to add the platforms I actually use. That is the part CogSend fixes, and now the accounts and the scheduling are mine to change.
I already self-host a few other things, like this website running from a Raspberry Pi, so putting the scheduler on infrastructure I control felt natural, and the best thing is I loved the process of building it.
What's next
First, I will be fixing the documentation and I want the setup to be clear enough that nobody has to read the repo to understand it. And I will record a few short videos for the parts that are easier to show than to write.
After that, will focus on adding more platforms – Instagram, TikTok and YouTube are the ones I am thinking about. Along with these, I'm thinking about more integration options as well.
These are early thoughts though, not the final roadmap.
The code is on GitHub and the site is cogsend.com. It is MIT licensed, so fork it and change whatever you want, and send PR as well.
That's it.
Some links here are affiliate or referral links. Buying through them supports this site at no extra cost to you, and it doesn't affect my opinions.