Comment construire un tableau de bord d'administration avec Claude Code
Apprenez à construire un tableau de bord d'administration avec Claude Code. Exemples de code pratiques et instructions étape par étape inclus.
Construire un tableau de bord d’administration avec Claude Code
Un tableau de bord d’administration est une application complexe comprenant de nombreux écrans : affichage de KPI, gestion des utilisateurs, analyse de données. Avec Claude Code, vous pouvez créer rapidement un tableau de bord complet avec navigation latérale, tableaux de données et graphiques.
Mise en page du tableau de bord
> Crée un tableau de bord d'administration avec React + Tailwind CSS.
> Mise en page 3 colonnes avec navigation latérale, en-tête et contenu principal.
> Affiche des cartes KPI, un graphique de ventes et un tableau des commandes récentes.
// src/components/DashboardLayout.tsx
import { ReactNode, useState } from 'react';
import { Sidebar } from './Sidebar';
import { Header } from './Header';
export function DashboardLayout({ children }: { children: ReactNode }) {
const [isSidebarOpen, setSidebarOpen] = useState(true);
return (
<div className="flex h-screen bg-gray-50 dark:bg-gray-900">
<Sidebar isOpen={isSidebarOpen} onToggle={() => setSidebarOpen(!isSidebarOpen)} />
<div className="flex-1 flex flex-col overflow-hidden">
<Header onMenuClick={() => setSidebarOpen(!isSidebarOpen)} />
<main className="flex-1 overflow-y-auto p-6">
{children}
</main>
</div>
</div>
);
}
Composant carte KPI
// src/components/KpiCard.tsx
interface KpiCardProps {
title: string;
value: string;
change: number;
icon: ReactNode;
}
export function KpiCard({ title, value, change, icon }: KpiCardProps) {
const isPositive = change >= 0;
return (
<div className="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-sm">
<div className="flex items-center justify-between mb-4">
<span className="text-gray-500 dark:text-gray-400 text-sm">{title}</span>
<div className="p-2 bg-blue-50 dark:bg-blue-900/30 rounded-lg">{icon}</div>
</div>
<div className="text-2xl font-bold dark:text-white mb-1">{value}</div>
<div className={`text-sm flex items-center gap-1 ${isPositive ? 'text-green-500' : 'text-red-500'}`}>
<span>{isPositive ? '↑' : '↓'}</span>
<span>{Math.abs(change)}%</span>
<span className="text-gray-400 ml-1">par rapport au mois dernier</span>
</div>
</div>
);
}
Intégration du graphique de ventes
// src/components/SalesChart.tsx
import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
const salesData = [
{ month: 'Jan', revenue: 4200000, orders: 320 },
{ month: 'Fév', revenue: 3800000, orders: 290 },
{ month: 'Mar', revenue: 5100000, orders: 410 },
{ month: 'Avr', revenue: 4700000, orders: 380 },
{ month: 'Mai', revenue: 5600000, orders: 450 },
{ month: 'Juin', revenue: 6200000, orders: 510 },
];
export function SalesChart() {
return (
<div className="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-sm">
<h3 className="text-lg font-semibold dark:text-white mb-4">Évolution des ventes</h3>
<ResponsiveContainer width="100%" height={300}>
<AreaChart data={salesData}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="month" />
<YAxis tickFormatter={(v) => `${(v / 1000).toFixed(0)}k€`} />
<Tooltip
formatter={(value: number) => `${value.toLocaleString()} €`}
/>
<Area
type="monotone"
dataKey="revenue"
stroke="#3B82F6"
fill="#3B82F6"
fillOpacity={0.1}
/>
</AreaChart>
</ResponsiveContainer>
</div>
);
}
Tableau de données
// src/components/RecentOrders.tsx
interface Order {
id: string;
customer: string;
amount: number;
status: 'completed' | 'pending' | 'cancelled';
date: string;
}
const statusStyles = {
completed: 'bg-green-100 text-green-800',
pending: 'bg-yellow-100 text-yellow-800',
cancelled: 'bg-red-100 text-red-800',
};
const statusLabels = {
completed: 'Terminé',
pending: 'En cours',
cancelled: 'Annulé',
};
export function RecentOrders({ orders }: { orders: Order[] }) {
return (
<div className="bg-white dark:bg-gray-800 rounded-xl shadow-sm overflow-hidden">
<div className="p-6 border-b dark:border-gray-700">
<h3 className="text-lg font-semibold dark:text-white">Commandes récentes</h3>
</div>
<table className="w-full">
<thead className="bg-gray-50 dark:bg-gray-700">
<tr>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">ID commande</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Client</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Montant</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Statut</th>
</tr>
</thead>
<tbody className="divide-y dark:divide-gray-700">
{orders.map((order) => (
<tr key={order.id} className="hover:bg-gray-50 dark:hover:bg-gray-700/50">
<td className="px-6 py-4 text-sm dark:text-gray-300">{order.id}</td>
<td className="px-6 py-4 text-sm dark:text-gray-300">{order.customer}</td>
<td className="px-6 py-4 text-sm dark:text-gray-300">{order.amount.toLocaleString()} €</td>
<td className="px-6 py-4">
<span className={`text-xs px-2 py-1 rounded-full ${statusStyles[order.status]}`}>
{statusLabels[order.status]}
</span>
</td>
</tr>
))}
</tbody>
</table>
</div>
);
}
Ressources connexes
Pour la visualisation de données, consultez Implémentation de la visualisation de données, et pour le contrôle d’accès basé sur les rôles, consultez le guide d’implémentation RBAC.
La documentation officielle de Recharts (recharts.org) est aussi utile pour la personnalisation des graphiques.
Related Posts
Comment booster vos projets personnels avec Claude Code [Avec exemples]
Apprenez à accélérer considérablement vos projets de développement personnels avec Claude Code. Inclut des exemples concrets et un workflow pratique de l'idée au déploiement.
Comment automatiser le refactoring avec Claude Code
Apprenez à automatiser efficacement le refactoring de code avec Claude Code. Inclut des prompts pratiques et des patterns de refactoring concrets pour des projets réels.
Guide complet de configuration CORS avec Claude Code
Découvrez le guide complet de configuration CORS avec Claude Code. Conseils pratiques et exemples de code inclus.