"use client"; import { AlertTriangle, Building2, Clock, FileText, Plus, Radio, ServerCog } from "lucide-react"; import Link from "next/link"; import { useCurrentUser, useSystemStatus } from "@/hooks/use-auth"; import { useCompanies } from "@/hooks/use-companies"; import { useDashboardAnalytics } from "@/hooks/use-analytics"; import { StatCard } from "@/components/ui/stat-card"; import { DashboardAnalyticsSection } from "@/components/dashboard/analytics-section"; import { formatDateTime } from "@/lib/format"; import type { CompanyResponse } from "@/lib/types"; function mostRecentLastRun(companies: CompanyResponse[]): string | null { const runs = companies .map((c) => c.monitor_configuration?.last_run) .filter((v): v is string => Boolean(v)); if (runs.length === 0) return null; return runs.sort().at(-1) ?? null; } function nextUpcomingRun(companies: CompanyResponse[]): string | null { const runs = companies .filter((c) => c.monitor_configuration?.enabled) .map((c) => c.monitor_configuration?.next_run) .filter((v): v is string => Boolean(v)); if (runs.length === 0) return null; return runs.sort().at(0) ?? null; } export default function DashboardPage() { const { data: user } = useCurrentUser(); const { data: systemStatus } = useSystemStatus(); const { data: companies, isLoading } = useCompanies(); const { data: analytics } = useDashboardAnalytics(); const companyList = companies ?? []; const activeCount = companyList.filter((c) => c.status === "active").length; const reportCount = companyList.reduce((sum, c) => sum + c.report_count, 0); const unreadAlertCount = companyList.reduce((sum, c) => sum + c.unresolved_alert_count, 0); return (

Welcome{user ? `, ${user.display_name}` : ""}

Here's what's happening across your monitors.

Add company
{analytics && }
Monitoring schedule
Last successful run
{formatDateTime(mostRecentLastRun(companyList))}
Next scheduled run
{formatDateTime(nextUpcomingRun(companyList))}
System health
{systemStatus?.components.map((c) => (
{c.name}
{c.status}
))}
LLM provider
{systemStatus?.llm_provider ?? "—"}

Companies

View all
{isLoading ? (

Loading…

) : companyList.length === 0 ? (

You're not monitoring any companies yet.

Add your first company
) : (
    {companyList.slice(0, 5).map((c) => (
  • {c.name} {c.status}
  • ))}
)}
); }