Vibecode BulkPublish

track this build4 phases, 12 steps, beginner friendly
KINDA · weekend project
price $13.99/moyou'd save $167.88/yrbuild time multi-daycategory 🐦 social mediareplaced by 0 people

The part people picture is a weekend: a list of posts, a timer, one API call each. The part that eats the next six months is everything after the first successful post · staying authenticated to a dozen networks, learning each one's media rules the hard way, publishing that reports success and then quietly fails minutes later, retries that must never post twice, and a review process before some networks will accept a post at all. Build it for two accounts you control and it works. Build it for every network on the marketing page and you have taken a job.

the project pack5 files · written for this build, step by step
README.md
# BulkPublish · indie build

A spreadsheet-first scheduler for two open networks, whose hard problems are validating rows against limits the networks themselves publish, sending each row exactly once through crashes and retries, and noticing an expired credential before a week of posts fails one by one.

Estimated effort: **weekend**. Work `BUILD_PLAN.md` top to bottom · every phase ends in a check that has to pass before the next one starts.

## Stack

| Part | Choice | Why |
| --- | --- | --- |
| Runtime | One process on an always-on machine with a scheduler tick every minute | a scheduler that only runs when the laptop is open is a to-do list |
| Storage | SQLite with the send state machine enforced in the schema | the duplicate-post bug is a database bug, so the database prevents it |
| Networks | Mastodon and Bluesky only, one module each behind one publish function | open APIs with published limits and no review gate |
| Limits | Fetched from each network at connect time and rechecked daily, never hard-coded | the limit you typed in is the one that changed last month |
| Idempotency | The network's own key where it offers one, the state machine everywhere | belt and braces, because one of them has a one hour memory |
| Media | Copied beside the database, checked and resized at import, deleted after a stated retention | a twelve megabyte photograph is a rejected post |

## Before you start

Have every one of these ready. The plan assumes them from step one.

- [ ] **Python 3.12 or newer** · free
  - Why: Runs the scheduler and the web interface in one process.
  - Get it: python.org, or your package manager.
  - Verify: python3 --version prints 3.12 or higher
- [ ] **A machine that is always on** · a few pounds a month, or free if you own the box
  - Why: The scheduler tick has to fire at the slot, and a laptop that sleeps turns the queue into a list of things that did not happen.
  - Get it: A small VPS, a home server or a single-board computer with a static power supply.
  - Verify: A test row scheduled for three in the morning has sent by breakfast
- [ ] **A Mastodon account with an application token** · free
  - Why: One of the two networks, connected the documented way with a token you can revoke.
  - Get it: Create an application in your account's development settings with write scope for statuses and media, and copy the access token.
  - Verify: The instance endpoint returns that server's limits with your token
- [ ] **A Bluesky account with an app password** · free
  - Why: The other network, connected with an app password rather than your main one so it can be revoked alone.
  - Get it: Create an app password in your account settings and use it with your handle.
  - Verify: A session is created and your profile resolves
- [ ] **A throwaway account on each network** · free
  - Why: Exactly-once and reconciliation are only testable by actually sending, and a duplicate on your real account is a duplicate your followers see.
  - Get it: A second account on each network that nobody follows, connected the same way.
  - Verify: Both test accounts are connected and a row sends to each
- [ ] **Your slots, retention and clock change rule** · free
  - Why: Each is asserted by a test, and deciding them after seeing failures means choosing whatever passes.
  - Get it: Write down the posting slots per account, how long media is kept after sending, and what happens to a slot that falls in the daylight saving gap.
  - Verify: All three are in the configuration and named in the tests

## Quick start

Follow Phase 1 in `BUILD_PLAN.md`; it creates the project.

Then copy `.env.example` to `.env` and fill in the values it documents.

## Honest limits

This build deliberately does not replace:

- X, Instagram, LinkedIn and TikTok.
- Analytics pulled back per post.
- Approvals, teams and client workspaces.
- Browser automation of any kind.
- staying connected · networks expire your auth and someone has to notice
- knowing a post is malformed before the network rejects it, not after
- an honest publish status when a network accepts the upload and fails minutes later
- analytics pulled back per post
- approvals, teams and multiple client workspaces
- the platform review process that gates posting on some networks entirely

If one of those is essential to you, that is the reason to keep paying for BulkPublish, and the README should say so rather than pretend.

$ choose a build depth, inspect the files, then open the complete pack in your agent

why people still pay

Because a scheduler is only worth anything when it is boring, and a self-built one stops being boring the first time a token expires overnight or a network changes its video rules without telling anyone. People pay so that maintenance is somebody else's Tuesday.

what you lose

xstaying connected · networks expire your auth and someone has to notice

xknowing a post is malformed before the network rejects it, not after

xan honest publish status when a network accepts the upload and fails minutes later

xanalytics pulled back per post

xapprovals, teams and multiple client workspaces

xthe platform review process that gates posting on some networks entirely

share on X ↗"I just replaced BulkPublish ($13.99/mo) with one prompt"
the escape hatch

Don't feel like building it? These folks already made it free.

PostizThe broadest open scheduler here; free means running PostgreSQL, Redis, Temporal and your own platform credentials.34kaug 2026open source↗Mixpost LiteA polished single-user scheduler with queues and basic analytics; the team features live in the paid edition.3.5kmar 2026open source↗Publer FreeThree non-X accounts and ten queued posts each, with a bulk CSV importer that is the closest free match for the actual job.$0free↗

all 6 free alternatives to BulkPublish →· no votes, no pay-to-list · just what's real

the numbers

BulkPublish pricing

planmonthlyannual (per mo)what you get
free$0/workspace$0/workspace3 channels (1/platform); 3 posts/day and 30/month; 10 scheduled posts; 100 MB media; 30 API requests/day; 1 organization; 50 AI captions/month plus credits; 1 RSS draft feed; no repeat posts.
pro$13.99/workspace$11.89/workspace2 channels/platform; 30 posts/day (900/month); 30 scheduled/day; 2 GB media; 5 API keys; 5,000 API requests/day; 3 organizations; 10 repeat posts; 300 AI captions/month; 10 RSS auto-publish feeds.
business$39.99/workspace$33.99/workspace5 channels/platform; unlimited posts; 100 scheduled/day; 10 GB media; 10 API keys; 50,000 API requests/day; 10 organizations; unlimited repeats; 1,000 AI captions/month; 50 RSS auto-publish feeds.

free tier3 channels (1/platform); 3 posts/day and 30/month; 10 scheduled posts; 100 MB media; 30 API requests/day; 1 organization; 50 AI captions/month plus credits; 1 RSS draft feed; no repeat posts

billingmonthly + annual (15% lower on annual billing)

hidden costsPublishing to X uses separate pay-as-you-go credits, and additional AI credits can add cost; current public unit prices were not exposed.

verified 2026-08-14 · source ↗

questions
Is BulkPublish free?

The free plan covers three channels, thirty posts a month, ten scheduled at a time and 100 MB of media, with repeat posts and RSS auto-publishing held back for paid plans. Paid is Pro at $13.99/mo (checked 2026-08-08).

Vibecode BulkPublish

Kinda. The core of BulkPublish is buildable in a weekend with the prompt on this page, but there are real gaps: staying connected · networks expire your auth and someone has to notice, knowing a post is malformed before the network rejects it, not after. Read the honest list above before committing.

How much does BulkPublish cost?

BulkPublish costs about $13.99/month (Pro, checked 2026-08-08), which is $167.88 per year.

What do I lose by replacing BulkPublish?

Honestly: staying connected · networks expire your auth and someone has to notice; knowing a post is malformed before the network rejects it, not after; an honest publish status when a network accepts the upload and fails minutes later; analytics pulled back per post; approvals, teams and multiple client workspaces; the platform review process that gates posting on some networks entirely. If any of those are load-bearing for you, keep paying.

Is there an open-source alternative to BulkPublish?

Yes: Postiz (The broadest open scheduler here; free means running PostgreSQL, Redis, Temporal and your own platform credentials.) Mixpost Lite (A polished single-user scheduler with queues and basic analytics; the team features live in the paid edition.) Publer Free (Three non-X accounts and ten queued posts each, with a bulk CSV importer that is the closest free match for the actual job.) All 6 curated free alternatives are at vibecodeit.com/bulkpublish/alternatives. The prompt is for when you want it exactly your way.