User Manual · 01 · How It Works
WholeReach — Automated Marketing System

How It Works — Architecture & Flow

The two-server design, the nightly pipeline, and every moving part — from raw network data to a published post.

Two servers, on purpose

The system runs on two separate cloud servers ("droplets"), and the split is deliberate.

ServerRoleWhy separate
main dropletHolds the website network and all the source data (site descriptions, quality scores, the marketing-skills library). Builds the nightly content feed.It is memory-constrained and already busy serving ~190 sites.
hub dropletRuns the publishing brain: Postiz + its database, the scheduler, the approval portal, and the publisher that posts to social networks.Publishing needs several always-on services (~5.6 GB); it gets its own 4 GB box so it never competes with the websites.
Plain EnglishOne server grows and feeds the content; the other server publishes it. They talk over a secure connection once a night.

The nightly pipeline

Four scheduled jobs form a chain. Each hands off to the next. Times are UTC.

05:00 · main droplet
gen-social-feed.py reads the network data and writes a feed of publishable items, then copies it to the hub.
↓
05:10 · hub
generate.py turns feed items into scheduled posts using templates, rotating content so nothing repeats too soon.
↓
every 10 min · hub
publish_due.py takes any post whose time has arrived and sends it to the right networks — respecting the cost cap and the kill switch.
↓
05:20 · hub
report.py writes a digest of what published and pulls back basic performance numbers.

Every moving part

ComponentWhat it isWhere
PostizOpen-source social publishing app — one place that can post to 30+ networks.hub · port 5000
TemporalThe scheduler Postiz relies on to time posts. Runs as a lightweight dev server.hub · port 7233
PostgreSQLPostiz's database — stores connected accounts and their access tokens.hub
RedisFast in-memory cache/queue Postiz uses internally.hub
Portal (/opt/portal)Our layer on top: the content queue, templates, generator, publisher, approval API, and reports.hub
Feed generatorgen-social-feed.py — turns network data into publishable items.main droplet
nginx + certbotWeb server + free SSL certificates, so everything is served securely over HTTPS.both
ntfyPush notifications — the system pings a phone channel when something fails.external

The GitHub Repositories page links the open-source project behind each of these.

From raw data to a live post

Follow one post end to end:

  1. A site in the network has the description "Complete guide to home water filtration…" in the network data file.
  2. The feed generator packages it as a site-feature item with a verified description and URL.
  3. The generator picks a matching template and produces the finished text, scheduled for an open time slot.
  4. When that time arrives, the publisher signs the request and posts it to X and Bluesky, recording the live URLs.
  5. The report job logs the post and its early engagement.
The guaranteeIf a fact needed by a template is missing from the source data, the post is held, not guessed. Honesty is enforced by the machine, not by hoping the writer got it right.