'use client'; import Link from 'next/link'; import { useJobs } from '@/contexts/JobsContext'; import { JobStatus } from '@/components/ScraperTest'; function extractBusinessName(job: JobStatus): string { if (job.business_name) return job.business_name; try { const urlObj = new URL(job.url); const query = urlObj.searchParams.get('query'); return query ? decodeURIComponent(query) : 'Unknown Business'; } catch { return 'Unknown Business'; } } export default function AnalyticsPage() { const { jobs, isLoading } = useJobs(); // Filter to only completed jobs with reviews const completedJobs = jobs .filter(j => j.status === 'completed' && j.reviews_count && j.reviews_count > 0) .sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); if (isLoading) { return (
); } return (

Analytics

{completedJobs.length} completed {completedJobs.length === 1 ? 'scrape' : 'scrapes'} with reviews

{completedJobs.length === 0 ? (

No Analytics Yet

Complete a scrape job to see analytics

Start New Scrape
) : (
{completedJobs.map(job => { const businessName = extractBusinessName(job); return (

{businessName}

{job.rating_snapshot && ( {job.rating_snapshot.toFixed(1)} )}
{job.reviews_count} reviews {job.scrape_time && {job.scrape_time.toFixed(1)}s}
{job.business_category && (
{job.business_category}
)}
{new Date(job.created_at).toLocaleDateString()} at {new Date(job.created_at).toLocaleTimeString()}
); })}
)}
); }