The scheduled publisher

A daily job publishes what's due, tells the search engines, promotes the target keyword into rank tracking and emails you — and everything it does downstream is identical to publishing by hand.

What it is

A cron that finds drafts whose scheduled date has arrived, lands any hero images still in flight, runs the publish gate, and for anything that passes flips the status, announces the change to the engines, updates the universe row to published with its live URL, upserts the target keyword into daily rank tracking and sends the published-post email. Held posts get the reason written to the row and recorded in the ledger.

Also called: publish on schedule · auto publish · post goes live on its date

See it
The scheduled publisher
Apr
May
Jun
Jul
Marlin Hoover — Equipment Storage
Framing
Delia Yoder — Equipment Storage
Concrete
Gideon Alt — Hobby Shop
Trim
Gideon Alt — Equipment Storage
Framing
Marlin Hoover — Equipment Storage
Concrete
Framing crewConcrete crewTrim crew
A publish run result: published slugs, held slugs with their blockers, and the heroes collected on that pass. Sample data — no customer information appears here.
How it works
  1. 1In-flight heroes are collected first, because a post held last time for a missing image is often publishable the moment the picture lands.
  2. 2Up to five due drafts are processed per pass, oldest scheduled date first.
  3. 3A missing hero is the one blocker the route acts on — it starts the image and moves on rather than waiting.
  4. 4Passing posts are published, and blogUrlsFor() announces both the post URL and the blog index, since both changed.
  5. 5The universe row flips to published with target_url set, and the keyword is upserted into seo_keywords so rank checks start next morning.
  6. 6The ledger row stores { status: draft, published_at: null } as the rollback source.
Why we built it

The header names the dead code path it revived: "scheduled_for has existed since the seasonal planner shipped: the planner writes it, the calendar renders it, and nothing ever read it back. A finished post with a hero, scheduled for a Tuesday, sat as a draft forever, because publishing only ever happened when a human clicked the button." The downstream equivalence is deliberate: "a post published by the machine is indistinguishable downstream from one Keith published himself."

The problem
  • Scheduled dates were written and never read, so nothing published itself.
  • A finished post could sit as a draft indefinitely.
  • Publishing by hand and by machine did different downstream work.
Sound familiar?
What you get
Finished work goes live on its date without anyone clicking
Publishing also pings the engines and starts rank tracking, every time
A held post says why and retries once the blocker clears
What's inside

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →