AstraRadinternal

Content Calendar - Design Picker

Three modules, three variants each. Pick one per module. They combine, so A2 + B1 + C3 is a valid answer.
Mockup - Select - Plan - Build

Seeing a year of publishing as days, not rows

What it is: a calendar view inside the existing admin Content panel. The queue table answers "what publishes next"; this answers "where is empty", "what did a machine write", and "which day can this delivery land on". It is a second view over the same schedule and the same endpoints, toggled from the same page.

The real morning this is for

It is Thursday 28 August. Teleradiology in Arkansas went live at this morning's publisher run, and the queue is solid every Monday, Wednesday and Friday into September 2027. This morning you opened Tuesdays and Thursdays as free slots for promoted BabyLoveGrowth deliveries and news-pegged pieces, which means the calendar suddenly has empty days worth seeing.

Five deliveries sit in the BLG inbox. To put RADPEER Scoring on a Tuesday today, you would count rows in a table to find one. And the table hides three facts a calendar shows at a glance: 25 December and 1 January are Fridays that hold nothing, and 8 March 2027 looks free in no view at all, because the draft Who bills the teleradiology read? is parked on it.

What is already true underneath these screens

The schedule is frontmatter (publish:, draft:) read at build time. The one-per-slot gate refuses a duplicated, weekend or holiday date; the calendar-ordering gate refuses a page that links to a page publishing after it. Reschedule and Promote already exist as queue actions, so the calendar invents no new write path, it only makes the existing ones spatial.

Every refusal rendered below is the build refusing, worded by the gate that fired. No design here can bypass one.

Module A

The month at a glance

The grid and the anatomy of a day. Every variant must carry the same six truths without a legend being necessary: published days are history, scheduled days are held, a hollow ring means a person wrote it, a solid tinted dot means BabyLoveGrowth did, dashed days are open Tue/Thu slots, and weekends and the two holidays are never days at all.

astrarad.com/admin/content?view=calendar
September 2026 - the primary month Late August - published days are history, never draggable
Two chips on Aug 24 are real: the day predates the one-per-slot gate. History renders as it happened. Empty Tue/Thu days in the past get no open-slot affordance; the slots only exist from today forward.
December - a holiday Friday is never a slot
Mon
Tue
Wed
Thu
Fri
Sat
Sun
22
Open Tue slot
24
Open Thu slot
25
Christmas Day · never a slot
26
27
March 2027 - the draft-held Monday is occupied, not free
The amber chip holds its day. Nothing can be dropped on Mar 8 until the draft flag is cleared or the draft is rescheduled away.
Variant A1

Ledger month

A dense classic month grid, one line per article.

Why this shape

Five weeks fit on one screen without scrolling, so the question this view exists for, "where is empty", is answered by the dashed cells alone. The BLG tint on Sep 8 is the only coloured chip in the month, which is exactly how rare machine content should read.

Chips truncate to one line; the full title is the tooltip and the click-through, same as the queue table.

Looks like

  • Seven equal columns, weekends kept but greyed
  • Compact chip: title line + dot + section
  • Dashed open-slot cells carry their own label

Trade-offs

  • Titles truncate hard at this density
  • Two dead weekend columns spend 28% of the width
astrarad.com/admin/content?view=calendar
September 2026 - workweek month, weekends collapsed to a rail
14 scheduled · 8 open slots
Mon
Tue
Wed
Thu
Fri
S/S
Aug 31
Dallas Fort Worth teleradiology: 53 trauma facilitieslocationsHuman
1
Open Tue slotpromote or move an article here
2
Denver teleradiology: coverage by Colorado trauma levellocationsHuman
3
Open Thu slotpromote or move an article here
4
Hidden fees in teleradiology contracts: 14 line itemsresourcesHuman
Sep 5 + 6
7
Teleradiology in Connecticut | CT-licensed final readslicensingHuman
8
RADPEER Scoring: Six Step QA Checklist for US Radiology TeamsresourcesBabyLoveGrowth
9
Teleradiology in Delaware: DE-licensed final readslicensingHuman
10
Open Thu slotpromote or move an article here
11
Site neutral imaging payment 2027: what to model nowresourcesHuman
Sep 12 + 13
14
Houston teleradiology coverage for trauma service area QlocationsHuman
15
Open Tue slotpromote or move an article here
16
Jacksonville teleradiology: trauma-grade night coveragelocationsHuman
17
Open Thu slotpromote or move an article here
18
Teleradiology contract terms: what to negotiateresourcesHuman
Sep 19 + 20
21
Teleradiology services in Georgia: GA-licensed readslicensingHuman
22
Open Tue slotpromote or move an article here
23
Teleradiology in Hawaii: HI-licensed final readslicensingHuman
24
Open Thu slotpromote or move an article here
25
The hidden cost of the prelim-plus-overread modelresourcesHuman
Sep 26 + 27
28
2027 Medicare fee schedule: the radiology numbers explainedresourcesHuman
29
Open Tue slotpromote or move an article here
30
Spine MRI teleradiology read level by levelservicesHuman
Oct 1
Oct 2
Audit teleradiology report quality: a 12-point scorecardresourcesHuman
Oct 3 + 4
Late August - history week, cards muted and inert
Mon
Tue
Wed
Thu
Fri
S/S
Aug 24
Per-report vs subscription teleradiology pricingLive
Radiologist shortage 2026: why 47% of postings are re-postsLive
25
26
Teleradiology in Arizona | full license or registryLive
27
28today
Teleradiology in Arkansas: full AR license requiredLive this morning
Aug 29 + 30
Holiday Friday and the draft-held Monday
Mon
Tue
Wed
Thu
Fri
S/S
Dec 21
Stop re-reading overnight studies every morningresourcesHuman
22
Open Tue slot
23
McAllen teleradiology coverage across trauma service area VlocationsHuman
24
Open Thu slot
25
Christmas Day
never a slot
Dec 26 + 27
Mar 8
Who bills the teleradiology read? Professional vs technicalresourcesHumanDraft holds this day
9
Open Tue slot
10
Teleradiology in Indiana: full IN license requiredlicensingHuman
11
Open Thu slot
12
Teleradiology in Iowa: Iowa-licensed final readslicensingHuman
Mar 13 + 14
1 January 2027 is the second holiday and renders identically. The amber draft card occupies Mar 8; it is not an open slot and accepts no drop.
Variant A2

Workweek month

Five wide columns; weekends spend 30px, not 28%.

Why this shape

Nothing ever publishes on a weekend, structurally, so the two dead columns of a classic grid are collapsed into a thin rail and every real day gets 180px. Full titles wrap instead of truncating, and the source pill keeps its word, exactly as the queue renders it.

Open slots are large enough to say what they are for, which makes the founder's new Tue/Thu decision legible in the layout itself.

Looks like

  • Mon to Fri columns, weekend rail with dates
  • Full-title cards with section + source pills
  • Draft day carries an explicit "holds this day" tag

Trade-offs

  • Tallest of the three; five weeks need a scroll
  • The compressed weekend hides Sat/Sun date numbers a beat longer
astrarad.com/admin/content?view=calendar
One continuous strip - late August flows into September
jump: Sep · Oct · Nov
WedAug 26
Teleradiology in Arizona | full license or registrylive
ThuAug 27
FriAug 28 · today
Teleradiology in Arkansas: full AR license requiredlive this morning
Aug 29 + 30
MonAug 31
Dallas Fort Worth teleradiology: 53 trauma facilitieslocations
TueSep 1
Open Tue slot
WedSep 2
Denver teleradiology: coverage by Colorado trauma levellocations
ThuSep 3
Open Thu slot
FriSep 4
Hidden fees in teleradiology contracts: 14 line itemsresources
Sep 5 + 6
MonSep 7
Teleradiology in Connecticut | CT-licensed final readslicensing
TueSep 8
RADPEER Scoring: Six Step QA Checklist for US Radiology TeamsBabyLoveGrowth
WedSep 9
Teleradiology in Delaware: DE-licensed final readslicensing
ThuSep 10
Open Thu slot
FriSep 11
Site neutral imaging payment 2027: what to model nowresources
Human BabyLoveGrowth Open Tue/Thu slot The strip scrolls sideways; today is pinned on load.
Scrolled to the holidays - both non-days in one glance
WedDec 23
McAllen teleradiology coverage across trauma service area Vlocations
ThuDec 24
Open Thu slot
FriDec 25
Christmas Day
never a slot
Dec 26 + 27
MonDec 28
Who is liable when an outsourced read is wrong?resources
TueDec 29
Open Tue slot
WedDec 30
Teleradiology alternatives for urgent care clinicsresources
ThuDec 31
Open Thu slot
FriJan 1
New Year's Day
never a slot
Jan 2 + 3
MonJan 4
The radiologist shortage in 2026: hire, wait, or outsourceresources
Scrolled to March 2027 - the draft-held Monday
FriMar 5
Orlando teleradiology: 5 counties, 3 trauma centerslocations
Mar 6 + 7
MonMar 8
Who bills the teleradiology read? Professional vs technicalDraft holds this day
TueMar 9
Open Tue slot
WedMar 10
Teleradiology in Indiana: full IN license requiredlicensing
ThuMar 11
Open Thu slot
FriMar 12
Teleradiology in Iowa: Iowa-licensed final readslicensing
Variant A3

Agenda strip

One continuous horizontal timeline; months are positions, not pages.

Why this shape

The queue is one unbroken cadence to September 2027, and this is the only shape that shows it as one thing. History, today and the future sit on the same line, so "Arkansas went live this morning, RADPEER lands Tuesday week" is a single eye movement.

Weekends compress to a hatched sliver instead of costing columns, and month boundaries stop mattering, which is honest: the publisher does not care what month it is.

Looks like

  • Horizontal scroll, day columns, today pinned
  • Hatched weekend gaps, labeled holiday non-days
  • Jump links instead of month paging

Trade-offs

  • No week-over-week vertical rhythm; "third Tuesday" is harder to find
  • Sideways scrolling for a year of content needs the jump links to be good
Module B

Moving a date without breaking the build

Dragging an article to another day is a reschedule, and a reschedule is a commit. So moves accumulate as pending changes, nothing touches disk until Apply, and the same gates that guard the build guard the tray. The scenario in every variant is real: pulling the front of September onto the new Tue/Thu slots, three days at a time. And one move the gate must refuse: licensing/delaware links to licensing/connecticut, which publishes 7 September, so delaware cannot move to the 3rd.

astrarad.com/admin/content?view=calendar
Mid-drag - Hidden fees leaves Friday the 4th, Tuesday the 1st is a valid target

Pending moves

None yet. Drag an article onto a dashed day; weekends and holidays refuse the drop before it lands.

Three moves in the tray - nothing on disk has changed yet

Pending moves

Applied together as one commit, one deploy-free push.

Hidden fees in teleradiology contracts: 14 line items
/resources/teleradiology-hidden-fees
Fri Sep 4Tue Sep 1
Site neutral imaging payment 2027: what to model now
/resources/site-neutral-imaging-payment-2027
Fri Sep 11Thu Sep 3
Teleradiology contract terms: what to negotiate
/resources/teleradiology-contract-terms
Fri Sep 18Thu Sep 10

Nothing on disk changes until Apply. Check runs the same gates the build runs, without writing.

A fourth drag is refused - the gate speaks in the rail, the cell flags it

Pending moves

3 pending, 1 refused.

Refused calendar-ordering

licensing/delaware → 2026-09-03 links to licensing/connecticut, which publishes 2026-09-07

A page may only link to pages already live on the day it publishes. This move would ship a dead link for four days.

Nothing was moved. The 3 moves in the tray still pass.

Variant B1

Right-rail tray

Moves collect beside the calendar; refusals speak where the moves live.

Why this shape

The tray is visible the whole time you are dragging, so "how many moves am I holding" never needs a click. The refusal arrives in the same column, in gate vocabulary, with both slugs and both dates, and the flagged cell shows you where the refused drop tried to land.

Amber, not red: a refusal is the build doing its job, not an emergency. Red stays reserved for STAT and SLA.

Looks like

  • Persistent 280px rail: moves, Check, Apply
  • Pending chips amber in place, old days show "vacated"
  • Refusal card quotes the gate line verbatim

Trade-offs

  • Rail costs 280px of calendar width all the time
  • Empty rail is dead space on a month you only read
astrarad.com/admin/content?view=calendar
Mid-drag - full-width calendar, weekends refuse before the drop lands
Draggingteleradiology-hidden-fees · Fri Sep 4 → ?Valid targets glow. Weekends, holidays and the draft-held Mar 8 refuse the drop.
Hidden fees in teleradiology contracts: 14 line items
Three moves held in the bottom bar, written like a diff Refusal as a toast panel over the calendar
3 pendingteleradiology-hidden-fees Sep 4 → Sep 1site-neutral-imaging-payment-2027 Sep 11 → Sep 3teleradiology-contract-terms Sep 18 → Sep 10

Refused calendar-ordering

licensing/delaware → 2026-09-03 links to licensing/connecticut, which publishes 2026-09-07

Nothing was moved. The 3 pending moves still pass. Dismisses itself in 12 seconds or on click.

Variant B2

Bottom diff bar

The calendar keeps its full width; the tray reads like a commit footer.

Why this shape

Every move is a one-line diff, slug and two dates, which is literally what Apply will commit. The bar only exists while there are pending moves, so a month you are merely reading is all calendar, edge to edge.

The toast keeps refusals from occupying layout, at the cost of being dismissable before it is read; the flagged cell stays flagged either way.

Looks like

  • Sticky bar under the grid, diff chips inline
  • Slug-first wording, dates in mono
  • Refusal toast anchors bottom right, amber

Trade-offs

  • Three diffs already crowd the bar; ten would not fit
  • A dismissed toast means re-running Check to re-read the reason
astrarad.com/admin/content?view=calendar
Mid-drag - the grid itself is the only chrome
Drag an article to another weekday. Every change stays in the grid, marked, until you apply.
Hidden fees in teleradiology contracts: 14 line items
Pending moves live in the grid; the ribbon counts them Refusal as a blocking modal - Check found the delaware move
Variant B3

In-grid marks

No tray at all: the calendar is the diff, a ribbon counts it, refusals block.

Why this shape

The pending state is drawn exactly where it will be true: amber chips on their new days, "vacated" on the old ones. There is no second list to reconcile against the grid because the grid is the list.

The refusal is a modal on purpose. It is the one moment worth interrupting, and it offers the honest pair of exits: drop the bad move, or apply the good ones.

Looks like

  • Amber count ribbon with Check, Apply, Discard
  • Every pending chip carries "was" + undo inline
  • Refusal modal in the product's modal shell

Trade-offs

  • Moves spread across months are invisible from one screen
  • A modal per refusal gets heavy if several moves fail at once
Module C

Promoting a delivery onto a date

Today the Promote modal writes the delivery into the tree dated today, and the calendar makes "which day" the natural question instead. The article in every variant is a real inbox delivery: HIPAA vs. HITRUST, sitting in seo/blg-inbox since BabyLoveGrowth delivered it. Each variant shows both outcomes stacked: dated today, and dated onto the Tuesday slot. The consequence copy must never lie about deploys: a future date publishes at that morning's run, nothing deploys now.

astrarad.com/admin/content
Dated today - the copy the product ships now, plus one date field
Future-dated - the same field, the copy rewrites itself
Variant C1

One date field

The existing modal plus the reschedule modal's date input. Nothing else.

Why this shape

Smallest possible change to a modal that already works, and it reuses the exact input the Reschedule modal ships. The consequence box is the safety feature: it rereads the date and states, in words, whether a deploy happens now or not.

The primary button relabels with the date, so "publish" and "schedule" can never be confused at the moment of clicking.

Looks like

  • Native date input, today prefilled
  • Consequence copy keyed off the chosen date
  • Button text follows: publish vs schedule

Trade-offs

  • The date field knows nothing about which days are open
  • Picking an occupied or weekend day is only caught by the gates after submit
astrarad.com/admin/content
"Today" chosen - no date field on screen at all
"Onto a scheduled date" chosen - the date field appears with its consequences
Variant C2

Today or a date

The deploy decision is made explicit before any date is typed.

Why this shape

Promoting today deploys production; promoting onto a date does not. That is the sharpest edge in this whole flow, and this variant makes it a two-option choice in plain words rather than a side effect of what you typed into a date field.

The default stays "Today", which preserves the current behaviour exactly for anyone who never touches the toggle.

Looks like

  • Segmented control in the product's tab style
  • Date input only exists in the second mode
  • Same consequence box, keyed to the mode

Trade-offs

  • One more decision for the common same-day case
  • Still blind to which days are actually open
astrarad.com/admin/content
Dated today - with the calendar's knowledge of open slots inline
Tue Sep 1 tapped - the field, the chips and the copy all agree
Variant C3

Free-slot helper

The modal borrows the calendar's one useful fact: where the empty days are.

Why this shape

The reason the founder opened Tue/Thu is precisely so deliveries like this one have somewhere to land. This variant puts those days one tap away, reads the schedule to skip occupied ones, and says why a day is missing rather than silently hiding it.

The date field stays for arbitrary dates, so the chips are an accelerator, not a cage.

Looks like

  • Chip row of the next open slots, schedule-aware
  • Chips, field and consequence copy stay in sync
  • Occupied slots are named, not hidden

Trade-offs

  • The modal now depends on schedule data being loaded
  • Four chips of lookahead may not reach the slot you wanted
After you pick

What happens next

Your picks get built 1:1 inside the existing admin Content panel, translated to the project's oklch tokens with every pixel value preserved, and verified with Playwright screenshots at 1440x900 against these frames. The calendar reads the same schedule endpoint the queue table reads; drag-reschedule and dated promote call the endpoints that already exist, gated by the same gates.

Nothing is committed until you say so. Every article, date, slug and link relationship in these frames is real, so what you approve here is what September actually looks like.

Module A -
Module B -
Module C -

Your picks

Copy this and paste it back into the session. Anything you ticked or typed comes with it.