Editorial desk app for your Airtable content calendar

By General Input

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.

Integrations

  • Airtable
  • WordPress
  • Slack Bot

Type

App

Categories

  • Marketing
  • Operations

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.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them