--- name: generate-card description: Generate dashboard card component with shadcn Card structure, TypeScript props, and optional sub-components. Use when creating new dashboard widgets or stat cards. allowed-tools: Read, Write, Glob, Grep --- # Generate Card Generate a dashboard card component following Health Tracker 9000 patterns. ## Usage When user requests to create a card component, ask for: 1. **Card name** (e.g., "WaterIntakeCard", "SleepScoreCard") 2. **Data type** the card displays (statistic, progress, chart, list, etc.) 3. **Icon name** from Lucide React 4. **Whether it includes a sub-component** (list items, chart, etc.) ## Implementation Pattern Based on `src/components/dashboard/HealthScoreCard.tsx` pattern. ### File Structure Create file: `src/components/dashboard/{CardName}.tsx` ```typescript 'use client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Progress } from '@/components/ui/progress'; import { cn } from '@/lib/utils'; import { Activity } from 'lucide-react'; interface CardNameProps { score: number; data: { field1: number; field2: number; }; } export function CardName({ score, data }: CardNameProps) { const getScoreColor = (value: number) => { if (value >= 80) return 'text-green-500'; if (value >= 60) return 'text-yellow-500'; return 'text-red-500'; }; const getProgressColor = (value: number) => { if (value >= 80) return 'bg-green-500'; if (value >= 60) return 'bg-yellow-500'; return 'bg-red-500'; }; return ( Card Title
{score}

Subtitle

); } interface ItemComponentProps { label: string; value: number; description: string; } function ItemComponent({ label, value, description }: ItemComponentProps) { return (
{label}
{value}%
); } ``` ### With Chart Integration (Optional) For cards with charts, add Recharts: ```typescript 'use client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; import { TrendingUp } from 'lucide-react'; interface ChartCardProps { data: Array<{ label: string; value: number }>; title: string; } export function ChartCard({ data, title }: ChartCardProps) { return ( {title} ); } ``` ## Key Conventions - Use `'use client'` directive at top - Import Card components from `@/components/ui/card` - Props interface should be `{ComponentName}Props` - Use Lucide React icons for visual elements - Tailwind for styling with shadcn color utilities - Optional: sub-components for list items, chart items, etc. - Optional: `React.memo()` wrapper for performance optimization - Color functions for responsive visual feedback (green/yellow/red) ## Steps 1. Ask user for card name, data type, icon, and optional sub-component 2. Create file: `src/components/dashboard/{CardName}.tsx` 3. Generate component with Card wrapper from shadcn/ui 4. Add icon from lucide-react 5. Add props interface with TypeScript 6. Add helper functions for colors/formatting if needed 7. Add optional sub-component if requested 8. Format with Prettier ## Implementation Checklist - [ ] Component exports correctly - [ ] Props interface defined and typed - [ ] Icon imported from lucide-react - [ ] 'use client' directive present - [ ] Uses shadcn/ui Card components - [ ] Color functions for visual feedback - [ ] Sub-component created (if applicable) - [ ] Responsive design with Tailwind