Analytics Dashboard

Data-rich analytics interface with multiple chart types and filtering options.

Analytics DashboardUnsaved changes
import { Card, CardContent, CardHeader, CardTitle } from "./components/ui/card"
import { Badge } from "./components/ui/badge"
import { TrendingUp, Users, DollarSign, Activity } from "lucide-react"

export default function AnalyticsDashboard() {
  const metrics = [
    { label: "Total Users", value: "2,543", change: "+12.5%", icon: Users },
    { label: "Revenue", value: "$45,231", change: "+8.2%", icon: DollarSign },
    { label: "Active Sessions", value: "573", change: "+23.1%", icon: Activity },
    { label: "Growth Rate", value: "12.5%", change: "+4.1%", icon: TrendingUp },
  ]

  return (
    <div className="p-6 space-y-6 max-w-7xl mx-auto">
      <div>
        <h1 className="text-3xl font-bold">Analytics Dashboard</h1>
        <p className="text-muted-foreground">Track your key performance metrics</p>
      </div>

      <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
        {metrics.map((metric, i) => {
          const Icon = metric.icon
          return (
            <Card key={i}>
              <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
                <CardTitle className="text-sm font-medium">{metric.label}</CardTitle>
                <Icon className="h-4 w-4 text-muted-foreground" />
              </CardHeader>
              <CardContent>
                <div className="text-2xl font-bold">{metric.value}</div>
                <p className="text-xs text-green-600 flex items-center gap-1">
                  <TrendingUp className="h-3 w-3" />
                  {metric.change} from last month
                </p>
              </CardContent>
            </Card>
          )
        })}
      </div>

      <div className="grid gap-4 md:grid-cols-2">
        <Card>
          <CardHeader>
            <CardTitle>Recent Activity</CardTitle>
          </CardHeader>
          <CardContent className="space-y-3">
            {[1, 2, 3, 4].map((i) => (
              <div key={i} className="flex items-center gap-3">
                <div className="h-2 w-2 bg-primary rounded-full" />
                <div className="flex-1">
                  <p className="text-sm font-medium">User action {i}</p>
                  <p className="text-xs text-muted-foreground">{i} hours ago</p>
                </div>
              </div>
            ))}
          </CardContent>
        </Card>

        <Card>
          <CardHeader>
            <CardTitle>Top Performers</CardTitle>
          </CardHeader>
          <CardContent className="space-y-3">
            {["Alice Johnson", "Bob Smith", "Carol White", "David Brown"].map((name, i) => (
              <div key={i} className="flex items-center justify-between">
                <div className="flex items-center gap-3">
                  <div className="h-8 w-8 rounded-full bg-primary/20 flex items-center justify-center text-xs font-medium">
                    {name.split(" ").map(n => n[0]).join("")}
                  </div>
                  <span className="text-sm font-medium">{name}</span>
                </div>
                <Badge variant="secondary">{95 - i * 2}%</Badge>
              </div>
            ))}
          </CardContent>
        </Card>
      </div>
    </div>
  )
}