Calendar and drafts
All posts is a calendar of everything scheduled and published — with a drafts tray, drag-to-reschedule, and conflict-safe moves when a teammate or agent edits underneath you.
All posts is the calendar view of your organization’s work: scheduled, publishing, and published posts on the days they go out, plus a tray of drafts waiting to be placed. You reschedule by dragging, and Inklate keeps moves honest when more than one person — or an agent — is working at once.
The calendar view
The calendar opens on a month grid and switches to week or day. Each post shows as a chip on the day and hour it’s scheduled for, tinted by status, with its channel icons. In the day view, the surface is 24 hour rows for the cursor’s day; the current hour is marked, and past hours are muted and not droppable.
Where you drop a card decides what changes: a drop on the month or week grid changes the date and keeps the time of day, while a drop on an hour row in day view changes the time. Clicking an empty slot starts a new post scheduled at that moment.
The drafts tray
The drafts tray is a collapsible rail on the left holding unscheduled work and failed posts. Collapsed, it’s a thin spine showing the backlog count; open, it’s a draggable list. Anything an agent drafts over MCP or the API lands here on the next refresh — same rows, no separate sync.
To schedule a draft, drag it out of the tray and onto a day. The drop schedules it in place. Failed posts surface here too, with their error inline, so a placement that didn’t land is one drag away from being rescheduled and retried.
Drag-to-reschedule is permission-aware
Dragging a card schedules or moves a post, which requires the content:publish permission. A member without it sees the drag handle hidden and the card stays edit-only — no card that lets go into a server refusal. The server remains the source of truth; the affordance only reflects what a drop would actually do. Permissions are set per member in your organization.
Conflict handling
Every reschedule carries the version of the post you dragged (expectedUpdatedAt). If a teammate or an agent moved or edited that post since you picked it up, the server refuses the write with a 409 rather than clobbering their change:
This post was changed by someone else — reload to see the latest.
The card snaps back to where it started, and Inklate refetches so the calendar shows the change that beat you. This optimistic-concurrency check means concurrent editing never silently overwrites — the last writer doesn’t win by accident.
Where to go next
Scheduling
Schedule each channel at its own time, watch one aggregate status roll up across them, and work in your local timezone while Inklate stores everything in UTC.
Publishing
When a post's moment arrives, each channel publishes independently — one failing never blocks the others — with automatic retries, honest partial-failure results, and a read-only status view.