DEV Community

Amna Anjum
Amna Anjum

Posted on

⭐ Build "AI Moodboards From Tweets" Using the Contentdrips API

UX and product teams collect insights from users daily — feature requests, frustrations, praise, patterns. Most of these insights live inside scattered tweets, screenshots, Slack messages, and internal threads.

This guide shows how to turn all that chaos into clean, branded visual cards and then automatically group them into AI-generated moodboards using the Contentdrips API.

Paste a tweet → extract text → render → categorize → drop into moodboards.

No designers. No screenshots. No editing.

Why Screenshots Don't Work

Most teams screenshot tweets for internal decks and research docs. But screenshots:

  • Look inconsistent
  • Capture random UI elements
  • Break brand guidelines
  • Don't scale
  • Aren't easy to automate

Rendering tweets as structured visual cards gives you:

  • Consistent formatting
  • Proper brand alignment
  • High readability
  • Customizable layouts
  • Fully automated workflows

Perfect for UX research, VOC dashboards, planning sessions, and product reviews.


What You'll Build

By following this tutorial, you'll be able to:

  1. Extract tweet text from any tweet URL
  2. Send that text to the Contentdrips API
  3. Render it into a polished card image
  4. Generate a shareable CDN URL
  5. Use these cards to build moodboards of customer insights

The final output looks like neatly designed "insight cards" that can be grouped under themes like:

  • "Feature Requests"
  • "Bugs & Pain Points"
  • "Delight / Praise"
  • "Confusion / Misunderstanding"

These visual boards are massively helpful for PMs, UX teams, founders, and researchers.


Prerequisites

You'll need:

  • Node.js or any environment that supports HTTP requests
  • A Twitter API bearer token (for extracting tweet text)
  • A Contentdrips API token (free, no credit card)
  • A Contentdrips template with a text field labeled tweet_text

Step 0: Prepare Your Template (One-Time Only)

Inside Contentdrips:

  • Open Templates → Tweet Styles and choose any layout OR open your own template and click Automate
  • Make sure the tweet-body textbox is labeled tweet_text

You'll use this label in the API calls.


Step 1: Extract the Tweet Text

function getTweetId(url) {
  const match = url.match(/status\/(\d+)/);
  return match ? match[1] : null;
}

async function getTweetText(url, twitterToken) {
  const id = getTweetId(url);
  if (!id) throw new Error("Invalid tweet URL");

  const response = await fetch(
    `https://api.twitter.com/2/tweets/${id}`,
    {
      headers: { "Authorization": `Bearer ${twitterToken}` }
    }
  );

  const json = await response.json();
  return json.data.text;
}
Enter fullscreen mode Exit fullscreen mode

Step 2: Render the Tweet as a Card

async function renderTweetCard(text, cdToken, templateId) {
  const response = await fetch("https://generate.contentdrips.com/render", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${cdToken}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      template_id: templateId,
      output: "png",
      content_update: [
        { type: "textbox", label: "tweet_text", value: text }
      ]
    })
  });

  const json = await response.json();
  return json.job_id;
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Poll the Rendering Job

async function checkJobStatus(jobId, cdToken) {
  const response = await fetch(
    `https://generate.contentdrips.com/job/${jobId}/status`,
    { headers: { "Authorization": `Bearer ${cdToken}` } }
  );

  const json = await response.json();
  return json.status;
}
Enter fullscreen mode Exit fullscreen mode

Step 4: Get the Final Image URL

async function getRenderedImage(jobId, cdToken) {
  const response = await fetch(
    `https://generate.contentdrips.com/job/${jobId}/result`,
    { headers: { "Authorization": `Bearer ${cdToken}` } }
  );

  const json = await response.json();
  return json.export_url;
}
Enter fullscreen mode Exit fullscreen mode

Complete Function: Tweet URL → Rendered Card

async function tweetToCard(tweetUrl, twitterToken, cdToken, templateId) {
  const tweetText = await getTweetText(tweetUrl, twitterToken);

  const jobId = await renderTweetCard(tweetText, cdToken, templateId);

  let status = "queued";
  while (status !== "completed") {
    await new Promise(r => setTimeout(r, 2000));
    status = await checkJobStatus(jobId, cdToken);
  }

  return await getRenderedImage(jobId, cdToken);
}
Enter fullscreen mode Exit fullscreen mode

How to Turn These Cards Into Moodboards

Once you have images for each tweet, you can build moodboards automatically using:

Keyword grouping

Look for patterns:

  • "pricing"
  • "signup"
  • "loading"
  • "mobile"
  • "AI"
  • etc.

Sentiment analysis

  • Positive → Praise
  • Negative → Pain points
  • Mixed → Confusion

Product area tagging

Auto-tag based on:

  • Onboarding
  • Billing
  • Collaboration
  • Performance
  • Search
  • Editor

AI clustering

Feed tweet texts into an embedding model and cluster them into themes.

Your moodboard becomes:

  • Feature requests cluster
  • Frustrations cluster
  • UX issues cluster
  • Compliments cluster

Generate a visual board

Drop the exported card images into:

  • Notion galleries
  • FigJam boards
  • Miro boards
  • Custom dashboards
  • Internal portals
  • Research docs

You now have a living, visual "Voice of Customer" wall.


Real Use Cases for Product Teams

1. VOC Dashboards

Turn daily tweets into categorized, auto-updating visual boards.

2. Weekly UX Moodboards

Generate cards from all tweets mentioning your product that week.

3. Feature Demand Maps

Group "feature request" cards and count frequency visually.

4. Sprint Planning Inputs

Show developers a board of the exact user pain points.

5. Design Critique Sessions

Discuss clusters of UX frustration tweets with visuals.

These boards become part of your team's decision-making process.


Why This Approach Works

  • Clean visuals remove noise
  • Consistency helps with pattern recognition
  • Cards are easier to share internally
  • Automation saves countless hours
  • Insights become searchable and scannable
  • Works at any scale

It transforms raw, messy tweets into structured research assets.


What You Can Add Next

  • A Slack bot that generates a card whenever someone pastes a tweet
  • A Notion integration for automatic board updates
  • A daily cron job that fetches brand mentions
  • A dashboard showing "top recurring themes"
  • Export moodboards as PDFs for leadership

The entire system can become hands-free.


Resources

  • Contentdrips API documentation
  • Twitter API documentation
  • Template automation guide

Final Thoughts

Screenshots are the past.
Rendered insight cards + automated moodboards are the future of customer understanding.

With just a few API calls, you can give your product team a high-signal, automated, visual voice-of-customer system that runs itself.

Top comments (0)