Overdue, scheduled, draft — the five states of a post

A post with a date on the calendar and a post nobody has scheduled are not the same thing, so the list separates published, overdue, scheduled, draft and archived — with the ones needing a decision first.

What it is

A derived lifecycle over the three stored statuses. Archived and published are read straight from status; anything else with a valid future or today's date is scheduled, and a date already past makes it overdue. Each state has a one-line hint explaining what it means, and the filter row is ordered so the states that need a decision come first.

Also called: post status · upcoming posts · which posts are late · content filters

See it
Overdue, scheduled, draft — the five states of a post
Apr
May
Jun
Jul
Marlin Hoover — 30×40 Garage
Framing
Ivy Brubaker — Equipment Storage
Concrete
Ronan Petsch — 30×40 Garage
Trim
Marlin Hoover — Equipment Storage
Framing
Gideon Alt — Barndominium
Concrete
Framing crewConcrete crewTrim crew
The filter chip row — Overdue, Scheduled, Draft, Published, Archived — with counts and the hint line under the selected one. Sample data — no customer information appears here.
How it works
  1. 1postLifecycle() compares scheduled_for against today by DAY, not by instant — a post due today is due, not overdue since midnight.
  2. 2LIFECYCLE_ORDER puts overdue, scheduled and draft ahead of published and archived in the filter row.
  3. 3Each chip carries its hint: 'Its publish date has passed and it hasn't gone out — usually because it isn't finished.'
  4. 4The filter defaults to everything, and one click narrows to a single state.
Why we built it

Keith's request is quoted in the file: "we need the ability to filter, previously posted and upcoming … I also want to be able to distinguish the difference between a draft and something that has been scheduled. Because something that is scheduled needs to be reviewed sooner than something that's in draft mode." The code then argues it is a data-model gap, not a UI one: "status only knows three words… so a post with a date on the calendar and a post nobody has scheduled are the same word. They are not the same thing at all." And OVERDUE earned its own name from a real case: "a stub scheduled for 21 August, three days past, held back six times by the publish gate for being 96 words. Nothing anywhere said 'this is late'."

The problem
  • Scheduled and unscheduled drafts were indistinguishable.
  • A post past its date had no name and no visibility.
  • Published posts, the least actionable set, dominated the list.
Sound familiar?
What you get
Late posts are named as late and sorted first
Scheduled work is separated from work with no date
Each state explains itself rather than needing a legend

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 →