"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { buttonVariants } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { Plus, Info } from "lucide-react"; interface Campaign { id: string; name: string; status: string; platforms: string; createdAt: string; _count: { assets: number; agentRuns: number }; } const statusColors: Record = { draft: "secondary", running: "default", review: "outline", approved: "default", published: "default", }; const statusTooltips: Record = { draft: "Campaign is configured but hasn't been launched yet. Click to edit and launch.", running: "The AI pipeline is actively generating assets for this campaign.", review: "All agents finished. Assets are ready for your review before publishing.", approved: "Assets have been approved and are ready to publish.", published: "Campaign content has been pushed to social platforms.", }; function Tip({ children, content }: { children: React.ReactNode; content: string }) { return ( {children} {content} ); } export default function CampaignsPage() { const [campaigns, setCampaigns] = useState([]); useEffect(() => { fetch("/api/campaigns") .then((r) => r.json()) .then(setCampaigns) .catch(() => {}); }, []); return (

Campaigns

New Campaign
{campaigns.length === 0 ? (

No campaigns yet. Create your first one to get started.

) : (
{campaigns.map((campaign) => { const platforms = JSON.parse(campaign.platforms) as string[]; return (
{campaign.name} {campaign.status}
{platforms.join(", ")} · {campaign._count.assets} assets · {new Date(campaign.createdAt).toLocaleDateString()}
); })}
)}
); }