# Editorial desk app for your Airtable content calendar

> Run every piece from brief to published post in one place, and stop wondering whether something marked live in your calendar is actually live on your site.

- Workflow type: app
- Services: Airtable, WordPress, Slack Bot
- Categories: Marketing, Operations
- Published: 2026-08-14

## What it does

- Gives your team one board that groups every piece of content by stage, from idea through drafting, review, scheduled, and live, and pins anything whose publish date has slipped past while the piece still is not out
- Opens each card to show the brief and the draft body, so an editor can change the status, hand it to a different owner, and leave feedback that stays attached to the record instead of getting lost in chat
- Publishes straight to your site: create the post as a draft, flip it live when it is ready, and drop the link into your marketing channel, all without leaving the app
- Cross-checks your site against your calendar and flags the drift, both pieces marked live that never actually published and posts on your site that nobody logged in the calendar

## What you'll need

- An Airtable content calendar with a row per piece, including fields for status, owner, target publish date, the brief, and the draft body
- An Airtable connection made by signing in with your Airtable account, which is what lets the app leave comments on records
- A WordPress site you can publish to, connected with your username and an application password
- A Slack workspace and the channel where you want new posts announced

## Prompt

Build me an editorial desk app that my content team works out of every day. It runs on an Airtable content calendar as the source of truth, publishes to WordPress, and announces in Slack. Nothing runs on a schedule; a person opens this app and works in it.

The main screen is a board view of the content calendar, loaded with the Airtable List Records action. Group the cards into columns by status: Idea, Drafting, In review, Scheduled, and Live. Each card shows the piece title, the owner, the target publish date, and a hint of the brief. Pin to the top of the board, with a clear overdue treatment, any row whose target publish date has already passed while the status is anything other than Live. That pinned set is the whole point of the board, so make it visually obvious rather than a subtle badge.

Default each person to their own queue: filter the board to rows where they are the owner, with a toggle to switch to the whole team's board. Remember each user's last choice so they land back where they left off. Match the signed-in person to the Airtable owner field by email, and if no match is found, fall back to showing the full team board rather than an empty screen.

Opening a card shows the full detail for that piece, fetched with Get Record: the brief and the draft body from the Airtable record. Store the draft body in a long text or rich text field. From this card the editor can change the status and reassign the owner using Update Record, and leave feedback using Create Comment so that editorial notes stay on the record instead of disappearing into chat. Show the existing comment thread on the card using List Comments so the history of what was asked for is visible. Note that Airtable comments require an OAuth connection rather than a personal access token, so the app should surface a clear message if the connection cannot post comments.

The card has three publishing actions. Push to WordPress creates the post as a draft using Create a Post, passing the title, body, categories, and tags from the Airtable record, and then writes the returned post id and post URL back onto the Airtable row with Update Record. Go live flips that stored post from draft to published using Update a Post, and sets the Airtable status to Live in the same action. Announce posts the live URL into the marketing channel using the Slack Send a Message action from the Slack Bot integration, so the message comes from the workspace bot and keeps working even if the person who set it up leaves.

This is the most important rule in the app: never create a second WordPress post for a record that already stores a post id. Re-read the record's stored post id at the moment the button is clicked, not just when the page was loaded, because someone else may have pushed it in the meantime. If a post id is already present, the button becomes Update draft and uses Update a Post against that stored id instead of creating anything new. Disable the publishing buttons while a push is in flight so a double click cannot produce two posts.

Add a reconcile view as a second page. It compares WordPress List Posts against the calendar rows and surfaces two lists side by side: rows marked Live in Airtable that have no matching WordPress post, and published WordPress posts that have no matching row in the calendar. Match on the stored post id first, then fall back to comparing titles for rows that were published before the team started using this app. Give each mismatch a one-click fix where an obvious one exists, such as writing a discovered post id and URL back onto the Airtable record with Update Record, so the two systems can be pulled back into agreement without hand editing.

Make the whole thing fast to scan and dense enough that an editor running a morning standup can see the state of the pipeline without scrolling much. Handle empty states gracefully: a new calendar with no rows, a piece with no draft body yet, and a reconcile view where everything matches should each read as intentional rather than broken.

## How to customize

- Rename the stages to match how your team actually works, whether that is a simple three-step review or a longer approval chain
- Change what counts as overdue, so a piece is only pinned once it is a few days past its target date rather than the same morning
- Point the announcement at a different channel, or change the wording so it reads the way your team talks
- Decide whether everyone lands on their own queue first or on the full team board

## FAQ

### Will this create duplicate posts on my site if someone clicks publish twice?

No. Once a piece has been pushed to your site, the app remembers which post it created and will never make a second one for that record. The button changes to update the existing draft instead, and it re-checks at the moment you click rather than relying on what was on screen.

### Do I have to move my content calendar out of Airtable?

Not at all. Your Airtable base stays exactly where it is and remains the source of truth. The app is a nicer place to work out of, and every change you make in it writes straight back to your existing rows.

### Why do feedback notes live on the record instead of in Slack?

Because chat scrolls away and records do not. Keeping editorial notes attached to the piece means anyone picking it up later sees the full history of what was asked for, even months on.

### What does the reconcile view actually catch?

Two kinds of drift. Pieces your team marked live in the calendar that never actually made it onto the site, and posts sitting published on your site that nobody ever logged in the calendar. Both are easy to miss and awkward to explain later.

### Can each writer see just their own work?

Yes. Everyone lands on their own queue by default, and a single toggle switches to the whole team's board when you want the wider picture, such as in an editorial standup.

Use this prompt in General Input: https://www.generalinput.com/prompts/editorial-desk-app-for-your-airtable-content-calendar