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'}
); }