import React, { useState, useEffect } from 'react';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, LineChart, Line } from 'recharts';
const API_BASE = import.meta.env.VITE_API_URL || 'http://localhost:8000';
export default function Analytics() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const fetchSummary = async () => {
try {
const res = await fetch(`${API_BASE}/api/analytics/summary`);
setData(await res.json());
} catch {
// backend offline
}
setLoading(false);
};
useEffect(() => {
fetchSummary();
const interval = setInterval(fetchSummary, 60000);
return () => clearInterval(interval);
}, []);
const revenueData = data?.weekly_revenue || [];
const accuracy = data?.ml_model_accuracy || {};
return (
{/* Header */}
Analytics Command Center
Aggregated from all 5 surfaces · ML model performance · Swiggy MCP call volume
{/* KPI row */}
GMV Today
₹{loading ? '—' : data?.gmv_today_lakhs}L
+{data?.gmv_change_pct}% vs yesterday
Orders Today
{loading ? '—' : data?.order_volume_today?.toLocaleString()}
AOV ₹{data?.avg_order_value}
MCP Calls Today
{loading ? '—' : data?.mcp_calls_today?.toLocaleString()}
{data?.agent_sessions_today} agent sessions
Fraud Blocked
{loading ? '—' : data?.fraud_blocked_today}
orders intercepted
{/* Charts row */}
{/* Revenue chart */}
Weekly Revenue (Lakhs)
Last 7 days · GMV across all verticals
{/* Order volume chart */}
Weekly Order Volume
Food + Instamart + Dineout combined
{/* ML model accuracy */}
ML Model Performance
0.9}
/>
{/* System info */}
Platform Stack
{[
'LangGraph Multi-Agent', 'Gemini 2.0 Flash', 'Swiggy MCP (35 tools)',
'Tobit Regression', 'Kalman ETA Smoother', 'FraudGuard v2',
'FastAPI + WebSocket', 'Recharts', 'React 19 + Vite',
].map(tag => (
{tag}
))}
);
}
function ModelMetric({ label, value, model, color, good }) {
return (
{label}
{value || '—'}
{model}
{good ? 'Good' : 'Acceptable'}
);
}