Campaign creative review board for Cloudinary artwork

By General Input

Approve or reject campaign artwork on one board instead of chasing sign off in email threads, with every decision recorded on the file.

Integrations

  • Cloudinary
  • Airtable
  • Slack Bot

Type

App

Categories

  • Marketing
  • Operations

I want an app my marketing team uses to sign off on campaign artwork before it goes live, so approvals stop living in email threads. Reviewer identity comes from the logged in user, so every decision is attributed to a real person and the audit trail is genuine.

On first run, let me configure the app and save those settings: which Airtable base and table holds my campaigns, which field in that table holds the campaign's tag name, which field holds the campaign status, and which field holds the approved count. Do not hard code a schema. Read the table with Airtable List Records and let me map each field by picking from what the table actually contains. Let me also set the tag that means waiting on review (default needs-review) and the tag that means approved (default approved), plus an optional Slack channel to fall back to when a designer cannot be matched.

The main screen is a two pane board. Down the left, list every campaign from the configured Airtable table using List Records. Each campaign row shows its name, its current status, and a progress bar of approved assets against total assets for that campaign. Selecting a campaign loads its assets into the right pane.

For the selected campaign, read the campaign's tag from the mapped Airtable field and load every Cloudinary asset carrying that tag using List Resources by Tag, using Search Assets for filtering and sorting and List Resources by Asset IDs to refresh specific cards after a decision. Lay the assets out as review cards showing a preview image, the pixel dimensions, the file format and size, who uploaded it, and how long it has been waiting. Default the view to assets still carrying the review tag, oldest upload first. Let me switch the filter to approved, changes requested, or everything.

On each card give me an Approve button and a Request changes button. Approving uses Cloudinary Manage Tags to remove the review tag and add the approved tag, then uses Update Resource by Asset ID to write the reviewer's name, the decision and an ISO timestamp into the asset's context metadata, so the record of who approved what lives on the file itself.

Requesting changes opens a note box and will not submit until I type something. It records the note the same way, writing reviewer name, decision, timestamp and note text into context metadata with Update Resource by Asset ID, and tags the asset so it reads as changes requested rather than approved.

Let a reviewer flip a decision back if they change their mind. Reopening an approved asset swaps the approved tag back to the review tag with Manage Tags and appends the reversal to the asset's context metadata rather than erasing the earlier decision, so the full history stays intact.

After every decision, roll the result up to the campaign record in Airtable with Update Record so the status and the approved count stay current, and refresh the progress bar immediately. When every asset on a campaign is approved, set the campaign status to fully approved.

Also notify the designer who uploaded the asset. Take the uploader from the asset metadata, find their Slack account with Look Up User by Email, open a direct message with Open a Conversation, and send the verdict with Send a Message including the campaign name, the asset name, the decision, my note and a direct link to the file. If no matching Slack user is found, post to the fallback channel instead.

Handle Cloudinary pagination so campaigns with many assets load fully, keep the board responsive while decisions are saving, and show a clear empty state when a campaign has no tagged assets yet.

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