"use client"; import { useState, useEffect } from 'react'; import { Users, FileAudio, Activity, ShieldCheck, Crown, Clock } from 'lucide-react'; import { useAuth } from '@clerk/nextjs'; import { useRouter } from 'next/navigation'; export default function AdminDashboard() { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const { isLoaded, isSignedIn } = useAuth(); const router = useRouter(); useEffect(() => { if (isLoaded && !isSignedIn) { router.push("/"); return; } // Fetch stats const baseUrl = process.env.NEXT_PUBLIC_BACKEND_URL || "http://localhost:8000"; fetch(`${baseUrl}/api/admin/analytics`) .then(res => res.json()) .then(data => { setStats(data); setLoading(false); }) .catch(err => { console.error("Failed to load admin stats", err); setLoading(false); }); }, [isLoaded, isSignedIn, router]); if (loading) { return (
); } if (!stats) return
Failed to load analytics
; return (

Platform Admin

Live Analytics
{/* Top Stats Row */}

Total Extractions

{stats.total_tasks}

Completed

{stats.status_counts?.completed || 0}

Total Users

{stats.total_users}

Pro Subscribers

{stats.premium_users}
{/* Detailed Breakdown */}

Task Status Breakdown

{Object.entries(stats.status_counts || {}).map(([status, count]: [string, any]) => (
{status} {count}
))}

Recent Activity

{stats.recent_tasks?.map((task: any) => ( ))} {stats.recent_tasks?.length === 0 && ( )}
Task ID User Email Status Created At
{task.task_id} {task.user_email || "Anonymous"} {task.status.toUpperCase()} {new Date(task.created_at * 1000).toLocaleString()}
No recent tasks found.
); }