Files
ClaudeMarketing/pipeline/scripts/research_agent.mjs
T
Trey t 66c2bbec8b feat: complete marketing command center with pipeline, UI, and asset generation
- Dashboard with campaign management, asset gallery, and publishing queue
- 7-agent pipeline: trend scout, research, scripts, ad creative, video, copy, distribution
- Campaign form with screenshot upload, goal picker, platform selection
- Campaign detail view with Details/Pipeline/Assets/Chat tabs
- Two-set image generation: Gemini AI (NanoBanana MCP) + Canvas Design posters
- Remotion video rendering with phone.png frame and real screenshot alignment
- honeyDue branding: blue #0079FF, orange #FF9400, Inter font, warm off-white
- Asset cards with source badges (Gemini/Canvas/Remotion/Playwright)
- Markdown/JSON render endpoint for viewing pipeline outputs as HTML
- Settings page with Tavily, Gemini, Postiz, Nextdoor integration management
- Claude Chat for campaign feedback loop with streaming SSE
- Postiz publishing modal with scheduling
- Auth with NextAuth credentials + JWT sessions
- SQLite via Prisma with better-sqlite3 adapter

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 21:05:26 -05:00

71 lines
2.0 KiB
JavaScript

import { tavily } from "@tavily/core";
import { writeFileSync, mkdirSync } from "fs";
import { join } from "path";
const OUTPUT_DIR = join(
import.meta.dirname,
"..",
"outputs",
"task_management_feature_launch_20260323"
);
const queries = [
"home maintenance app download conversion strategies app store optimization 2026",
"homeowner forgot maintenance costly repair stories real examples",
"mobile app Instagram Reels ad creative best practices high CTR 2026",
"TikTok home improvement property management app ads that convert",
"millennial first time homeowner maintenance anxiety solutions apps",
];
async function runResearch() {
const client = tavily({ apiKey: process.env.TAVILY_API_KEY });
const results = [];
for (const query of queries) {
console.log(`Researching: "${query}"`);
try {
const response = await client.search(query, {
searchDepth: "advanced",
maxResults: 10,
});
results.push({
query,
timestamp: new Date().toISOString(),
resultCount: response.results.length,
results: response.results.map((r) => ({
title: r.title,
url: r.url,
content: r.content,
score: r.score,
})),
});
console.log(`${response.results.length} results`);
} catch (err) {
console.error(` ✗ Error for "${query}": ${err.message}`);
results.push({
query,
timestamp: new Date().toISOString(),
resultCount: 0,
results: [],
error: err.message,
});
}
}
const output = {
generatedAt: new Date().toISOString(),
agent: "marketing-research",
campaign: "task_management_feature_launch",
queryCount: queries.length,
queries,
results,
};
mkdirSync(OUTPUT_DIR, { recursive: true });
const outPath = join(OUTPUT_DIR, "research_results.json");
writeFileSync(outPath, JSON.stringify(output, null, 2));
console.log(`\nSaved: ${outPath}`);
}
runResearch();