Crossposter has a scheduling calendar at /scheduled, and I want to show how little machinery sits behind it.
What you get in the UI:
- A month calendar view by default.
- Click a date to review every post scheduled for that day.
- Edit a queued post's timing.
- Discard queued or failed posts.
- Review each post's target channels, media, and last publish error.
What's behind it: that calendar is a rendering of scheduled entries stored in poster.config.local.json. There's no jobs table, no scheduler service, no cron daemon. Editing a time rewrites the entry. Discarding deletes it. The runtime side is the ~30-second tick that checks for due posts while the server runs.
Failed posts are first-class, which I added deliberately: if a publish errors (a platform challenge, a rate limit, a broken unofficial integration), the post doesn't vanish. It stays visible with its last error so you can fix and retry, rather than wondering whether it ever went out. When a scheduled post does publish, it moves to local publish history and leaves the queue.
It's a good reminder that a useful scheduler UI doesn't require a heavyweight backend when the product is single-user and local.
Open source, MIT.
Top comments (0)