'use client'; import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Mail, BarChart3, Zap, Globe, Settings, FileText, TrendingUp, ArrowLeft, Plus, Edit, Trash2, Eye } from 'lucide-react'; import Link from 'next/link'; import { EmailManager } from './EmailManager'; import { AnalyticsDashboard } from './AnalyticsDashboard'; import ImportExport from './ImportExport'; interface Project { id: number; title: string; description: string; content: string; tags: string[]; featured: boolean; category: string; date: string; github?: string; live?: string; published: boolean; imageUrl?: string; metaDescription?: string; keywords?: string; ogImage?: string; schema?: Record; difficulty: 'Beginner' | 'Intermediate' | 'Advanced' | 'Expert'; timeToComplete?: string; technologies: string[]; challenges: string[]; lessonsLearned: string[]; futureImprovements: string[]; demoVideo?: string; screenshots: string[]; colorScheme: string; accessibility: boolean; performance: { lighthouse: number; bundleSize: string; loadTime: string; }; analytics: { views: number; likes: number; shares: number; }; } const ModernAdminDashboard: React.FC = () => { const [activeTab, setActiveTab] = useState<'overview' | 'projects' | 'emails' | 'analytics' | 'settings'>('overview'); const [projects, setProjects] = useState([]); const [isLoading, setIsLoading] = useState(true); // Mock stats for overview const stats = { totalProjects: projects.length, publishedProjects: projects.filter(p => p.published).length, totalViews: projects.reduce((sum, p) => sum + p.analytics.views, 0), unreadEmails: 3, // This would come from your email API avgPerformance: Math.round(projects.reduce((sum, p) => sum + p.performance.lighthouse, 0) / projects.length) || 90 }; useEffect(() => { loadProjects(); }, []); const loadProjects = async () => { try { setIsLoading(true); const response = await fetch('/api/projects'); const data = await response.json(); setProjects(data.projects || []); } catch (error) { console.error('Error loading projects:', error); } finally { setIsLoading(false); } }; const handleEdit = (project: Project) => { // TODO: Implement edit functionality console.log('Edit project:', project); }; const handleDelete = async (projectId: number) => { if (confirm('Are you sure you want to delete this project?')) { try { await fetch(`/api/projects/${projectId}`, { method: 'DELETE' }); await loadProjects(); } catch (error) { console.error('Error deleting project:', error); } } }; const resetForm = () => { // TODO: Implement form reset functionality console.log('Reset form'); }; const tabs = [ { id: 'overview', label: 'Overview', icon: BarChart3, color: 'blue' }, { id: 'projects', label: 'Projects', icon: FileText, color: 'green' }, { id: 'emails', label: 'Emails', icon: Mail, color: 'purple' }, { id: 'analytics', label: 'Analytics', icon: TrendingUp, color: 'orange' }, { id: 'settings', label: 'Settings', icon: Settings, color: 'gray' } ]; return (
{/* Header */}
Back to Portfolio

Admin Dashboard

Live
dk0.dev
{/* Sidebar */}
{/* Main Content */}
{activeTab === 'overview' && ( {/* Stats Grid */}

Total Projects

{stats.totalProjects}

Published

{stats.publishedProjects}

Total Views

{stats.totalViews.toLocaleString()}

Avg Performance

{stats.avgPerformance}

{/* Recent Projects */}

Recent Projects

{projects.slice(0, 3).map((project) => (
{project.title.charAt(0)}

{project.title}

{project.category}

{project.published ? 'Published' : 'Draft'}
))}
)} {activeTab === 'projects' && (

Projects

{isLoading ? (
) : (
{projects.map((project) => (
{project.title.charAt(0)}

{project.title}

{project.description}

{project.category} {project.published ? 'Published' : 'Draft'}
))}
)}
)} {activeTab === 'emails' && ( )} {activeTab === 'analytics' && ( )} {activeTab === 'settings' && (

Settings

Import/Export

)}
); }; export default ModernAdminDashboard;