Case study · AI & automation

AI social carousel pipeline with approval dashboard

Turns a short topic into researched copy, branded carousel slides and a PDF, with a review dashboard and weekly planner before publishing.

Sector
Marketing and content creation
Category
AI & automation
Maturity
Working prototype; pipeline publish adapters are mocks, while the dashboard and LLM copy generation are implemented and one real text and image publish path exists

At a glance

Who it's for
Solo creators and small marketing teams who publish carousel content regularly.
Core stack
Node.js, Express, PostgreSQL, Playwright
What sets it apart
One flow from a short topic to reviewed, branded carousel assets, with a graceful fallback and a weekly planning layer.

What it looks like in use

A planner of posts, each with a clear status, and a review panel where a person has the final say.

Planner: this week
This week+ Plan Week+ Add Content
Habits of calm project managers

Mon, LinkedIn carousel

Draft
Why small teams skip the brief

Tue, LinkedIn carousel

Needs changes
A simple weekly planning ritual

Wed, LinkedIn carousel

Approved
Myths about slow mornings

Thu, LinkedIn carousel

Published
Review: Why small teams skip the brief (Needs changes)
Why small teams skip the brief
Tip: write the plan down first
Want more? Follow for weekly tips
The middle slide is too wordy. Can we shorten it?Comment
Earlier versionsKept
Add a comment for the next revision
Revise from feedbackApprove
Illustrative screen sample data, not client data; publishing is partly a prototype

Real screens from the working product (sample data)

A post review screen showing a carousel post slide by slide with an approve button, and a status on each post in the list.
Real screen, sample data Reviewing a post slide by slide before approval, with a status on every post. Sample content on a test setup.
A post marked as approved, with a button to mark it as published as the remaining step.
Real screen, sample data An approved post. The only next step left is to mark it as published. Sample content.

From idea to approved post

  1. You pick a topic

    Type one idea, or plan a whole week of ideas and let the tool suggest the rest.

  2. The tool drafts the post

    It researches the topic, writes captions and turns them into branded slides.

  3. A person reviews it

    You read the slides, leave comments and ask for a revision if something is off.

  4. Changes keep earlier versions

    A revision starts from your comments, and the older version is saved, not overwritten.

  5. It is ready to post

    Once approved, it is ready to post. A LinkedIn publishing route exists; other networks are still prototypes.

The challenge

Producing consistent social carousels means repeating the same chain by hand: pick a topic, research it, write platform-specific captions, design slides, export a PDF and publish.

Each step lives in a different tool, so output slows down and quality varies. Topics need to be pulled on a schedule, branched by format, reviewed by a human and only then handed to publishing and analytics.

The solution

A Node.js pipeline researches a topic with a search-grounded LLM, then generates a structured brief (hook, points, stat, call to action, image keywords) and per-platform captions.

Branded HTML slide templates are rendered to PNG and PDF with a headless browser, and stock photography is fetched per slide on a best-effort basis. An Express dashboard backed by Postgres lets a reviewer comment, revise, approve, pick alternative images and schedule posts. A weekly planner outlines a week of ideas, optionally AI-planned, and bulk-generates every post.

For your technical teamhow it works under the hood

Review lifecycle of one post

Post status lifecycleA new post starts as a draft with its first version saved. A reviewer can approve it, then it can be published. Alternatively the reviewer flags it as needing changes; revising from the feedback saves the old version to history, regenerates the copy and returns the post to draft. Comments, earlier versions, chosen images and the scheduled time are kept with each post.new postDraftfirst version savedapproveApprovedpublishPublishedNeeds changesreviewer feedbackreviewer flags itrevise from feedback,old version to historyKept with each postComments, earlier versions, chosen imagesand the scheduled time
A post moves through four statuses: draft, needs changes, approved and published. Revising from feedback archives the old version and sends the post back to draft, so nothing is overwritten. The interface only offers publishing once a post is approved.

Key features

What the system does, as built in the codebase.

  • 01

    Search-grounded research

    Gathers current facts for a topic before any copy is written, and continues without them if the call fails.

  • 02

    Resilient copy generation

    Calls one LLM and falls back to topic-aware mock content on failure, so generation never hard-stops.

  • 03

    Branded slide rendering

    Fills cover, bullet, stat and call-to-action templates and exports PNG slides plus a combined PDF.

  • 04

    Stock image selection

    Fetches portrait photos per slide from keywords and lets the reviewer choose among candidates.

  • 05

    Review workflow

    Comments, status changes, versioned revisions and history for each post.

  • 06

    Weekly planner

    Day and time-slot planning, AI idea generation, per-idea regeneration, approval and bulk generation.

  • 07

    Platform publish adapters

    Per-platform payload builders for several networks, plus a real LinkedIn text and image call path.

  • 08

    Workflow export

    The same stages are mirrored as an n8n workflow definition.

How it fits together

From a short topic to reviewed, publish-ready carousel assets.

  1. Topic or weekly plancalendar and idea input
  2. Research and copysearch-grounded LLM with mock fallback
  3. Slide plan and renderHTML templates to PNG and PDF
  4. Review dashboardcomments, revisions, approval
  5. Postgresposts, versions, schedule
  6. Publish adaptersper-platform payloads
A topic or weekly plan feeds research and copy generation. Slides are planned and rendered, then reviewed in a dashboard backed by Postgres. Approved posts flow to per-platform publish adapters.
  • The review dashboard reads and writes Postgres.
  • Approved posts flow to the publish adapters.
  • Stock images feed the render step.

Implementation notes

Engineering decisions worth knowing about.

  1. Swappable pipeline stages

    Copy, slide plan, render, approval, publish and analytics modules are orchestrated by a single runner, so each stage can move from mock to real independently.

  2. Flexible storage

    Postgres stores posts with JSONB briefs, slide plans, comments and history, and uses additive migrations for new columns such as scheduling.

  3. Timezone-aware scheduling

    Scheduled time is stored as a timezone-aware timestamp after a documented round-trip bug with naive timestamps.

  4. Fixed-size rendering

    Headless Chromium renders slides at a fixed portrait size, and pdf-lib merges them into one document.

  5. Best-effort integrations

    Research and image fetches return null instead of throwing, so one failing integration degrades a slide rather than the run.

  6. REST API

    Posts, previews, uploads, comments, status and weekly plans are exposed to a vanilla JavaScript front end.

  7. Approval gate

    The human approval gate is mocked in the command-line pipeline and real in the dashboard.

Technology stack

Taken from the project's dependency and config files.

Runtime
  • Node.js
  • Express
AI
  • Anthropic SDK
  • Google Generative AI SDK
Rendering
  • Playwright
  • sharp
  • pdf-lib
Data
  • PostgreSQL (pg)
Front end
  • Vanilla JavaScript
  • HTML
  • CSS
Automation
  • n8n workflow export
For your technical teamtechnology layers

Technology stack by layer

Technology stack layersLayered view from the front end down: vanilla JavaScript, HTML and CSS; Node.js and Express; AI through the Anthropic and Google Generative AI SDKs; rendering with Playwright, sharp and pdf-lib; PostgreSQL for data; and an n8n workflow export for automation.Front endReview and planning UIVanilla JavaScriptHTMLCSSRuntimeREST API and pipelineNode.jsExpressAIResearch and copyAnthropic SDKGoogle Generative AI SDKRenderingSlides and PDFPlaywrightsharppdf-libDataPosts and versionsPostgreSQL (pg)AutomationMirrored stagesn8n workflow export
Read from top to bottom: the browser dashboard talks to the Express API, which calls the AI and rendering libraries and stores results in PostgreSQL. The n8n export mirrors the same stages.

Business value

What the system enables. No numbers are claimed.

  • Removes repeated manual steps between idea, copy, design and export for carousel content.
  • Keeps a human review gate in the dashboard, with revision history, before anything is published.
  • Makes weekly content planning a bulk operation instead of post-by-post work.
  • Degrades gracefully when an AI provider or image source is unavailable.

Need a system like this built?

Tell us what it needs to do and we will scope it with you on a call.

Discuss a build