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.
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.
What does this prompt do?
- 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 do I need to use this?
- 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
How can I customize it?
- 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
FAQs
Will this create duplicate posts on my site if someone clicks publish twice?
Do I have to move my content calendar out of Airtable?
Why do feedback notes live on the record instead of in Slack?
What does the reconcile view actually catch?
Can each writer see just their own work?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Search creators for free, shortlist the best with your team, and spend an audit credit only when you decide someone is worth a closer look.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
Stop guessing what is actually published.
Give your content team one desk that runs the calendar, the site, and the announcement, and keeps all three honest with each other.