From 8abb0b8e1db6f5f5748dead09b5af68fa5c16d2d Mon Sep 17 00:00:00 2001 From: Pierre Wessman <4029607+pierrewessman@users.noreply.github.com> Date: Fri, 12 Dec 2025 12:21:47 +0100 Subject: [PATCH] remove PLAN.md --- PLAN.md | 445 -------------------------------------------------------- 1 file changed, 445 deletions(-) delete mode 100644 PLAN.md diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index a35fb33..0000000 --- a/PLAN.md +++ /dev/null @@ -1,445 +0,0 @@ -# Dashboard Recreation Plan: Next.js 14 + shadcn/ui - -## Overview -Recreate the main dashboard page from https://shadcnblocks-admin.vercel.app/ using Next.js 14 App Router, shadcn/ui components, TypeScript, Chart.js, Inter font, and dark/light theme support with mock data. - -## Project Status -- **Current State**: Empty directory (only readme.md exists) -- **Target**: Full-featured dashboard with sidebar navigation, metrics, charts, and data tables - ---- - -## Implementation Phases - -### Phase 1: Project Foundation (30 min) - -#### 1. Initialize Next.js 14 Project -```bash -cd /e/repos/claude/shadcn-dashboard -npx create-next-app@latest . --typescript --tailwind --app --no-src-dir --import-alias "@/*" -``` -Choose: TypeScript ✓, ESLint ✓, Tailwind CSS ✓, App Router ✓, No src/ directory - -#### 2. Initialize shadcn/ui -```bash -npx shadcn@latest init -``` -Choose: Default style, Slate base color, CSS variables ✓ - -#### 3. Install Dependencies -```bash -npm install chart.js react-chartjs-2 next-themes lucide-react date-fns -npm install -D @types/node -``` - -#### 4. Install shadcn/ui Components -```bash -npx shadcn@latest add button card table dropdown-menu tabs avatar badge separator input sidebar command dialog -``` - ---- - -### Phase 2: Theme & Layout Foundation (45 min) - -#### 5. Create Theme Provider -**File**: [components/theme-provider.tsx](components/theme-provider.tsx) -- Wrap next-themes provider -- Export ThemeProvider component - -#### 6. Configure Root Layout -**File**: [app/layout.tsx](app/layout.tsx) -- Import Inter font from next/font/google -- Wrap with ThemeProvider (attribute="class", defaultTheme="system") -- Wrap with SidebarProvider -- Add suppressHydrationWarning to html tag - -#### 7. Create Theme Toggle Component -**File**: [components/layout/theme-toggle.tsx](components/layout/theme-toggle.tsx) -- Use useTheme() hook -- Dropdown menu: Light, Dark, System options -- Sun/Moon icons from lucide-react - -#### 8. Build Sidebar Navigation -**File**: [components/layout/app-sidebar.tsx](components/layout/app-sidebar.tsx) -- Use shadcn/ui Sidebar components -- Navigation structure: - - **General**: Dashboard (3 sub-items), Tasks, Users - - **Pages**: Auth, Errors - - **Other**: Settings, Developers -- Icons from lucide-react -- User profile section in footer - -**File**: [components/layout/user-nav.tsx](components/layout/user-nav.tsx) -- Avatar with dropdown menu -- Options: Profile, Settings, Sign out - -#### 9. Create Header Component -**File**: [components/layout/header.tsx](components/layout/header.tsx) -- Left: SidebarTrigger button -- Center: Command palette button (⌘K) -- Right: ThemeToggle component -- Sticky positioning with backdrop blur - ---- - -### Phase 3: Data Layer (20 min) - -#### 10. Define TypeScript Interfaces -**File**: [types/dashboard.ts](types/dashboard.ts) -```typescript -interface MetricCard { - id: string; - title: string; - value: string | number; - change: number; - changeLabel: string; -} - -interface Payment { - id: string; - status: 'success' | 'processing' | 'failed'; - email: string; - amount: number; -} - -interface TeamMember { - id: string; - name: string; - email: string; - role: string; - avatar: string; -} - -interface ChartDataPoint { - label: string; - value: number; - secondaryValue?: number; -} - -interface DashboardData { - metrics: MetricCard[]; - revenueData: ChartDataPoint[]; - salesData: ChartDataPoint[]; - payments: Payment[]; - team: TeamMember[]; -} -``` - -#### 11. Create Mock Data -**File**: [lib/mock-data.ts](lib/mock-data.ts) - -Generate realistic data: -- **Metrics** (4 cards): - - New Subscriptions: 4,682 (+15.54%) - - New Orders: 1,226 (+40.2%) - - Avg Order Revenue: 1,080 (+10.8%) - - Total Revenue: $15,231.89 (+20.1%) - -- **Revenue Chart**: 6 months of trend data -- **Sales Chart**: 12 months of bar data -- **Payments Table**: 12-15 transaction entries -- **Team Table**: 6-8 member entries - -Export `getDashboardData()` function - ---- - -### Phase 4: Chart Components (45 min) - -#### 12. Configure Chart.js -**File**: [lib/chart-config.ts](lib/chart-config.ts) -- Register Chart.js components (CategoryScale, LinearScale, PointElement, LineElement, BarElement, Tooltip, Legend) -- Define default options -- Export `getChartColors(theme)` for theme-aware styling - -#### 13. Create Line Chart Component -**File**: [components/charts/line-chart.tsx](components/charts/line-chart.tsx) -- Mark as "use client" -- Use dynamic import with `{ ssr: false }` -- Accept props: data, options, height -- Apply theme-aware colors using useTheme() - -#### 14. Create Bar Chart Component -**File**: [components/charts/bar-chart.tsx](components/charts/bar-chart.tsx) -- Similar to LineChart but using Bar from react-chartjs-2 -- "use client" directive -- Theme-aware colors - ---- - -### Phase 5: Dashboard Components (90 min) - -#### 15. Create Metric Card -**File**: [components/dashboard/metric-card.tsx](components/dashboard/metric-card.tsx) -- Use Card component -- Display: title, value, change percentage (colored), change label -- Add TrendingUp/TrendingDown icon based on change - -#### 16. Build Revenue Chart Component -**File**: [components/dashboard/revenue-chart.tsx](components/dashboard/revenue-chart.tsx) -- Use LineChart component -- Dual-line display (Revenue + Subscriptions) -- Wrap in Card with title - -#### 17. Build Sales Activity Chart -**File**: [components/dashboard/sales-chart.tsx](components/dashboard/sales-chart.tsx) -- Use BarChart component -- 12-month bar display -- Wrap in Card with title - -#### 18. Create Payments Table -**File**: [components/dashboard/payments-table.tsx](components/dashboard/payments-table.tsx) -- Use Table components -- Columns: Status (Badge), Email, Amount (formatted), Actions (DropdownMenu) -- Color-coded status badges (green/yellow/red) -- Wrap in Card with title - -#### 19. Create Team Members Table -**File**: [components/dashboard/team-table.tsx](components/dashboard/team-table.tsx) -- Use Table components -- Columns: Member (Avatar + name), Email, Role -- Wrap in Card with title - -#### 20. Create Dashboard Tabs -**File**: [components/dashboard/dashboard-tabs.tsx](components/dashboard/dashboard-tabs.tsx) -- Use Tabs component -- Four tabs: Overview (active), Analytics, Reports, Notifications (last 3 disabled) -- Overview contains all dashboard content - ---- - -### Phase 6: Assembly & Polish (60 min) - -#### 21. Build Main Dashboard Page -**File**: [app/page.tsx](app/page.tsx) -- Import all dashboard components -- Call getDashboardData() -- Layout structure: - - Page header with title - - DashboardTabs wrapper - - Metric cards grid (1→2→4 cols responsive) - - Charts row (1→2 cols responsive) - - Tables row (1→2 cols responsive) - -#### 22. Configure Inter Font -**File**: [app/layout.tsx](app/layout.tsx) -- Import Inter from next/font/google -- Apply to body with className - -#### 23. Add Custom Styling -**File**: [app/globals.css](app/globals.css) -- Smooth transitions for theme changes -- Custom scrollbar styling -- Hover effects -- Focus states - -#### 24. Create Avatar Placeholders -**Directory**: [public/avatars/](public/avatars/) -- Create 01.png through 08.png -- Use UI Avatars service or placeholder images -- Ensure Avatar components have fallback initials - ---- - -### Phase 7: Testing & Refinement (30 min) - -#### 25. Development Testing -```bash -npm run dev -``` -Test checklist: -- ✓ Dashboard loads at localhost:3000 -- ✓ Theme toggle works (light/dark/system) -- ✓ Sidebar collapse/expand -- ✓ All metric cards display -- ✓ Charts render with data -- ✓ Tables show all entries -- ✓ Responsive design works -- ✓ Command palette (⌘K) opens -- ✓ No TypeScript errors - -#### 26. Build Optimization -```bash -npm run build -npm start -``` -Verify: -- No build errors -- Reasonable bundle size -- Chart.js code-split properly -- Production performance good - -#### 27. Final Polish -- Add loading states for charts -- Add empty states for tables -- Improve accessibility (ARIA labels) -- Add tooltips where helpful -- Refine responsive breakpoints - ---- - -## Critical Files to Create (22 total) - -### Configuration (Auto-generated) -- package.json, tsconfig.json, tailwind.config.ts, next.config.js, components.json - -### Application Core -1. [app/layout.tsx](app/layout.tsx) - Root layout with providers -2. [app/page.tsx](app/page.tsx) - Main dashboard page -3. [app/globals.css](app/globals.css) - Global styles - -### Theme & Layout -4. [components/theme-provider.tsx](components/theme-provider.tsx) -5. [components/layout/app-sidebar.tsx](components/layout/app-sidebar.tsx) -6. [components/layout/header.tsx](components/layout/header.tsx) -7. [components/layout/theme-toggle.tsx](components/layout/theme-toggle.tsx) -8. [components/layout/user-nav.tsx](components/layout/user-nav.tsx) - -### Dashboard Components -9. [components/dashboard/metric-card.tsx](components/dashboard/metric-card.tsx) -10. [components/dashboard/revenue-chart.tsx](components/dashboard/revenue-chart.tsx) -11. [components/dashboard/sales-chart.tsx](components/dashboard/sales-chart.tsx) -12. [components/dashboard/payments-table.tsx](components/dashboard/payments-table.tsx) -13. [components/dashboard/team-table.tsx](components/dashboard/team-table.tsx) -14. [components/dashboard/dashboard-tabs.tsx](components/dashboard/dashboard-tabs.tsx) - -### Charts -15. [components/charts/line-chart.tsx](components/charts/line-chart.tsx) -16. [components/charts/bar-chart.tsx](components/charts/bar-chart.tsx) - -### Data Layer -17. [lib/mock-data.ts](lib/mock-data.ts) -18. [lib/chart-config.ts](lib/chart-config.ts) -19. [lib/utils.ts](lib/utils.ts) - Auto-generated by shadcn - -### Types -20. [types/dashboard.ts](types/dashboard.ts) - -### Assets -21-28. [public/avatars/01-08.png](public/avatars/) - Avatar placeholder images - ---- - -## Key Technical Decisions - -### 1. Chart.js Integration -- Use Chart.js (as requested) with react-chartjs-2 -- Mark chart components as "use client" -- Use dynamic imports with `{ ssr: false }` to avoid SSR issues -- Theme-aware colors using useTheme() hook - -### 2. Sidebar Implementation -- Use shadcn/ui Sidebar component (official, accessible) -- Built-in state management with cookie persistence -- Fully customizable with Tailwind - -### 3. Theme Management -- Use next-themes package (industry standard) -- Zero-flash on load with suppressHydrationWarning -- CSS class strategy for theme switching - -### 4. Component Strategy -- Server Components by default -- "use client" only when necessary (charts, theme toggle, interactive elements) -- Feature-based organization in components/ directory - -### 5. Responsive Design -- Mobile-first with Tailwind breakpoints -- Metrics: 1→2→4 column grid -- Charts/Tables: 1→2 column grid -- Horizontal scroll for tables on mobile - ---- - -## Potential Challenges & Solutions - -### Challenge 1: Chart.js SSR Issues -**Solution**: Use dynamic imports with `{ ssr: false }` and "use client" directive - -### Challenge 2: Theme Flash on Load -**Solution**: Use next-themes with suppressHydrationWarning and disableTransitionOnChange - -### Challenge 3: Sidebar State Persistence -**Solution**: shadcn/ui Sidebar has built-in cookie persistence - -### Challenge 4: Responsive Tables -**Solution**: Wrap tables in `overflow-x-auto` containers - -### Challenge 5: Chart Colors in Dark Mode -**Solution**: Use useTheme() to detect theme and apply color schemes from chart-config.ts - ---- - -## Project Directory Structure - -``` -shadcn-dashboard/ -├── app/ -│ ├── layout.tsx # Root layout with providers -│ ├── page.tsx # Main dashboard page -│ └── globals.css # Global styles -├── components/ -│ ├── ui/ # shadcn/ui components (auto-generated) -│ ├── layout/ -│ │ ├── app-sidebar.tsx # Main sidebar -│ │ ├── header.tsx # Top header -│ │ ├── theme-toggle.tsx # Theme switcher -│ │ └── user-nav.tsx # User profile dropdown -│ ├── dashboard/ -│ │ ├── metric-card.tsx # Metric display card -│ │ ├── revenue-chart.tsx # Revenue line chart -│ │ ├── sales-chart.tsx # Sales bar chart -│ │ ├── payments-table.tsx # Payments data table -│ │ ├── team-table.tsx # Team members table -│ │ └── dashboard-tabs.tsx # Tab navigation -│ ├── charts/ -│ │ ├── line-chart.tsx # Line chart wrapper -│ │ └── bar-chart.tsx # Bar chart wrapper -│ └── theme-provider.tsx # Theme context provider -├── lib/ -│ ├── utils.ts # Utility functions -│ ├── mock-data.ts # Mock dashboard data -│ └── chart-config.ts # Chart.js config -├── types/ -│ └── dashboard.ts # TypeScript interfaces -├── public/ -│ └── avatars/ # User avatar images -├── tailwind.config.ts -├── tsconfig.json -├── next.config.js -├── components.json -└── package.json -``` - ---- - -## Estimated Timeline -- **Phase 1** (Foundation): 30 minutes -- **Phase 2** (Theme & Layout): 45 minutes -- **Phase 3** (Data Layer): 20 minutes -- **Phase 4** (Charts): 45 minutes -- **Phase 5** (Dashboard Components): 90 minutes -- **Phase 6** (Assembly & Polish): 60 minutes -- **Phase 7** (Testing): 30 minutes - -**Total**: 5-6 hours for complete implementation - ---- - -## Next Steps After Approval - -1. Run project initialization commands -2. Install and configure all dependencies -3. Create file structure -4. Implement components in order -5. Test thoroughly -6. Polish and optimize - -## Future Enhancement Possibilities - -1. **Real API Integration**: Replace mock data with API calls -2. **Authentication**: Add NextAuth.js or Clerk -3. **More Pages**: Analytics, Reports, User Management -4. **Real-time Updates**: WebSocket integration -5. **Advanced Tables**: Add TanStack Table for sorting/filtering -6. **Alternative Charts**: Consider shadcn/ui Chart components (Recharts) for better theme integration