"use client" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Play, Star, GitFork, FileText, TrendingUp, Zap, BarChart3 } from "lucide-react" import Link from "next/link" interface AnalyticsData { prompts: { id: string title: string slug: string totalRuns: number starsCount: number remixesCount: number createdAt: Date }[] dailyData: { date: string; runs: number }[] modelUsage: Record totalTokens: number totals: { runs: number stars: number remixes: number prompts: number } } interface AnalyticsDashboardProps { data: AnalyticsData } export function AnalyticsDashboard({ data }: AnalyticsDashboardProps) { const maxRuns = Math.max(...data.dailyData.map((d) => d.runs), 1) return (
{/* Summary Stats */}

Total Prompts

{data.totals.prompts}

Total Runs

{data.totals.runs.toLocaleString()}

Total Stars

{data.totals.stars.toLocaleString()}

Total Remixes

{data.totals.remixes.toLocaleString()}

{/* Charts Row */}
{/* Runs per Day Chart */} Runs Per Day Last 30 days
{data.dailyData.map((day, i) => (
0 ? "4px" : "1px", }} />
{day.runs} runs
))}
30 days ago Today
{/* Model Usage */} Model Usage {data.totalTokens.toLocaleString()} total tokens used
{Object.entries(data.modelUsage).length > 0 ? ( Object.entries(data.modelUsage) .sort(([, a], [, b]) => b - a) .map(([model, count]) => { const percentage = Math.round( (count / Object.values(data.modelUsage).reduce((a, b) => a + b, 0)) * 100 ) return (
{model} {count} runs ({percentage}%)
) }) ) : (
No usage data yet
)}
{/* Top Prompts */} Top Performing Prompts Sorted by total runs {data.prompts.length > 0 ? (
{data.prompts.slice(0, 10).map((prompt, i) => ( {i + 1}

{prompt.title}

{prompt.totalRuns.toLocaleString()} runs {prompt.starsCount} stars {prompt.remixesCount} remixes
{prompt.totalRuns} runs ))}
) : (

No prompts yet

Create your first prompt

)}
) }