Write in Markdown.Post on time.
Your LinkedIn posts live as Markdown files in your own repo. Push, and a Cloudflare Worker on your own account publishes each one at its minute. Free, open source, and nobody else holds your token.
MIT licensed. Runs on Cloudflare's free plan.
---
date: 2026-11-12
time: 09:00
status: ready
visibility: PUBLIC
first_comment: The repo is in the comments.
---
**I stopped opening LinkedIn to post.**
Pushed Sunday, 21:40
Watch
From a file to your profile
The whole trip in one short film: the Markdown file, the push, the minute it goes out.
Try it
Edit the file, watch the post
A post is a Markdown file. Change its text, its date or its status: the post and its schedule follow, exactly as the Worker will send them.
Scheduled for Thu 12 Nov, 09:00
𝗜 𝘀𝘁𝗼𝗽𝗽𝗲𝗱 𝗼𝗽𝗲𝗻𝗶𝗻𝗴 𝗟𝗶𝗻𝗸𝗲𝗱𝗜𝗻 𝘁𝗼 𝗽𝗼𝘀𝘁.
I write my posts on Sunday, in Markdown, in my editor. A push, and a Worker on my own Cloudflare account publishes each one at its minute.
No subscription, and nobody else holds my token.
225 / 3,000 characters
How it works
Write, push, posted
Your push starts everything. After that nothing runs on your machine: Cloudflare does the rest, on your account.
Write
A post is a Markdown file with a small header: its date, its time, its status.
2026-11-12-launch.md date: 2026-11-12 time: 09:00 status: ready visibility: PUBLICPush
Each push deploys your Worker and syncs posts to D1 and media to KV. Only what changed is sent.
zsh · ~/inkslot $git add posts$git commit -m "launch post"$git pushTo github.com:you/inkslot.git$Posted
Every minute, the Worker publishes the earliest post whose time has come, then its first comment.
zsh · ~ $curl https://my-linkedin-scheduler.you.workers.dev/{"ok":true,...}$
Never twice
Once, or not at all
Posting twice on your profile is worse than posting late. Every rule here leans toward safety.
LinkedIn fails at 9:00 and 9:01. The 9:02 try goes through, and the post is posted.
- failed try
- posted
- failed
- The 10-minute window
Yours
Your account, your token, your files
There is no inkslot server. Everything runs on accounts you already own, and you can read every line that touches your token.
Your Cloudflare account
The Worker, its D1 database and its KV store run on your account, on the free plan. No server to keep on.
Your token
A secret on your own Worker. Nobody else holds it, and no third-party scheduler ever sees it.
Your files
Posts are plain files in your private repo. Read them, diff them, version them like code.
Images and videos
One image or one video per post, up to 25 MB in Workers KV. Bigger videos can go to R2.
A first comment
Links go in the first comment, added right after the post goes out.
A test mode
Run a first post end to end without reaching LinkedIn, then switch it off.
Install
Install it your way
Everything lands on your own Cloudflare account. Pick one.
One click
About 3 minutes
Cloudflare copies the project into your GitHub, creates the database and the media store, and deploys. The guide gets your four values ready first.
Open the deploy guideWith your agent
Paste the prompt into your coding agent, in a clone of your private copy. It sets everything up; you keep the LinkedIn clicks and your token.
Where the prompt goes, for example
- Claude Code
- Cursor
- Copilot
- Windsurf
- Cline
- OpenCode
- and any coding agent
By hand
Make a private copy with Use this template, clone it, then let the setup script create everything.
FAQ
Before you install
Is it really free?
Yes. Cloudflare's free plan for Workers, D1 and KV covers it, and so does GitHub's. You'd only pay past their free limits, which a few posts a week don't reach.
Do I need a credit card?
No. Only the optional R2 bucket, for videos over 25 MB, needs a card on your Cloudflare account.
How often do I renew the token?
Every 60 days: LinkedIn doesn't let it refresh automatically. Renewing takes about 2 minutes, and /status warns you 7 days before it expires.
Can it post as my company page?
No. It posts on your personal profile only.
How precise is the timing?
To the minute. A 9:00 post goes out during the 9:00 minute, and at most one post goes out per minute.
What if LinkedIn is down?
The Worker tries again every minute for 10 minutes, then marks the post failed with the reason. If LinkedIn's answer is unclear after sending, it marks the post unknown and stops, rather than risk posting twice.
Is it affiliated with LinkedIn?
No. It's an independent open-source project that uses LinkedIn's official API.
What was v1?
A Python script run by cron on your own machine. It still lives on the v1 branch if you'd rather keep everything local.
Is it really free?
Yes. Cloudflare's free plan for Workers, D1 and KV covers it, and so does GitHub's. You'd only pay past their free limits, which a few posts a week don't reach.
Do I need a credit card?
No. Only the optional R2 bucket, for videos over 25 MB, needs a card on your Cloudflare account.
How often do I renew the token?
Every 60 days: LinkedIn doesn't let it refresh automatically. Renewing takes about 2 minutes, and /status warns you 7 days before it expires.
Can it post as my company page?
No. It posts on your personal profile only.
How precise is the timing?
To the minute. A 9:00 post goes out during the 9:00 minute, and at most one post goes out per minute.
What if LinkedIn is down?
The Worker tries again every minute for 10 minutes, then marks the post failed with the reason. If LinkedIn's answer is unclear after sending, it marks the post unknown and stops, rather than risk posting twice.
Is it affiliated with LinkedIn?
No. It's an independent open-source project that uses LinkedIn's official API.
What was v1?
A Python script run by cron on your own machine. It still lives on the v1 branch if you'd rather keep everything local.
First commentThe repo is in the comments.