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