diff --git a/src/app/api/og/dashboard/route.tsx b/src/app/api/og/dashboard/route.tsx index 829850a..6145377 100644 --- a/src/app/api/og/dashboard/route.tsx +++ b/src/app/api/og/dashboard/route.tsx @@ -25,8 +25,27 @@ export async function GET(req: NextRequest) { timeZone: 'Asia/Kolkata', }).format(new Date()); + // Read theme + const theme = searchParams.get('theme') || 'dark'; + const isDark = theme === 'dark'; + + // Theme Variables + const bgColor = isDark + ? 'linear-gradient(145deg, #050505 0%, #111111 50%, #0a0a0a 100%)' + : 'linear-gradient(145deg, #f8fafc 0%, #ffffff 50%, #f1f5f9 100%)'; + const textColor = isDark ? '#ffffff' : '#0f172a'; + const gridColor = isDark ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.05)'; + const cardBg = isDark + ? 'linear-gradient(145deg, rgba(255,255,255,0.05) 0%, rgba(255,255,255,0.01) 100%)' + : 'linear-gradient(145deg, #ffffff 0%, #f8fafc 100%)'; + const cardBorder = isDark ? '1px solid rgba(255,255,255,0.1)' : '1px solid rgba(0,0,0,0.05)'; + const textSec = isDark ? 'rgba(255,255,255,0.5)' : 'rgba(15,23,42,0.5)'; + const textTert = isDark ? 'rgba(255,255,255,0.7)' : 'rgba(15,23,42,0.7)'; + const dividerColor = isDark ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.1)'; + const logoName = isDark ? 'Rectangular_dark_background.png' : 'Rectangular_light_background.png'; + // Load logo from disk and convert to base64 - const logoPath = join(process.cwd(), 'public', 'PragatiVeer_Logo', 'PNG_Logos', 'Rectangular_dark_background.png'); + const logoPath = join(process.cwd(), 'public', 'PragatiVeer_Logo', 'PNG_Logos', logoName); let logoUrl = ''; try { const logoData = readFileSync(logoPath); @@ -45,8 +64,8 @@ export async function GET(req: NextRequest) { flexDirection: 'column', justifyContent: 'space-between', alignItems: 'center', - background: 'linear-gradient(145deg, #050505 0%, #111111 50%, #0a0a0a 100%)', - color: '#ffffff', + background: bgColor, + color: textColor, fontFamily: '"Inter", sans-serif', padding: '70px 0', }} @@ -59,7 +78,7 @@ export async function GET(req: NextRequest) { left: 0, right: 0, bottom: 0, - backgroundImage: 'radial-gradient(circle at 2px 2px, rgba(255,255,255,0.05) 1px, transparent 0)', + backgroundImage: `radial-gradient(circle at 2px 2px, ${gridColor} 1px, transparent 0)`, backgroundSize: '40px 40px', zIndex: 0, }} @@ -81,23 +100,23 @@ export async function GET(req: NextRequest) { {/* Main Content - 2x2 Grid */}
-
- Today's Score +
+ Today's Score {score}
-
- Accuracy +
+ Accuracy {accuracy}
-
- Qs Attempted +
+ Qs Attempted {qs}
-
- City Rank +
+ City Rank {rank}
@@ -106,7 +125,7 @@ export async function GET(req: NextRequest) { {/* Footer */}
{/* Divider */} -
+
@@ -116,20 +135,20 @@ export async function GET(req: NextRequest) {
-
{name}
-
Generated: {exportDate}
+
{name}
+
Generated: {exportDate}
{`${target} Aspirant`}
-
•
-
{`${plan} Plan`}
+
•
+
{`${plan} Plan`}
-
pragativeer.com
-
contact@pragativeer.com
-
+91 9079337961
+
pragativeer.com
+
contact@pragativeer.com
+
+91 9079337961
diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index a049510..563b682 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -4,7 +4,7 @@ import { useRef, useState, useEffect } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" -import { BrainCircuit, Play, ChevronRight, Activity, Target, CheckCircle2, AlertTriangle, TrendingUp, Calendar, Zap, LayoutDashboard, Share2, Trophy, Lock, ArrowRight, Clock, Facebook, Download, MessageCircle } from "lucide-react" +import { BrainCircuit, Play, ChevronRight, Activity, Target, CheckCircle2, AlertTriangle, TrendingUp, Calendar, Zap, LayoutDashboard, Share2, Trophy, Lock, ArrowRight, Clock, Download } from "lucide-react" import { MistakeHeatmap } from "@/components/AI/MistakeHeatmap" import { AdaptiveStudyPlan } from "@/components/AI/AdaptiveStudyPlan" import { useActiveUser } from "@/hooks/useActiveUser" @@ -55,7 +55,10 @@ export default function DashboardPage() { timeZone: 'Asia/Kolkata', }).format(new Date()); - return `/api/og/dashboard?score=${encodeURIComponent(score)}&accuracy=${encodeURIComponent(accuracy)}&qs=${encodeURIComponent(qs)}&rank=${encodeURIComponent(rank)}&name=${encodeURIComponent(name)}&target=${target}&plan=${encodeURIComponent(plan)}&date=${encodeURIComponent(date)}` + const isDark = typeof document !== 'undefined' && document.documentElement.classList.contains('dark'); + const themeParam = isDark ? 'dark' : 'light'; + + return `/api/og/dashboard?score=${encodeURIComponent(score)}&accuracy=${encodeURIComponent(accuracy)}&qs=${encodeURIComponent(qs)}&rank=${encodeURIComponent(rank)}&name=${encodeURIComponent(name)}&target=${target}&plan=${encodeURIComponent(plan)}&date=${encodeURIComponent(date)}&theme=${themeParam}` } const handleDownload = async () => { @@ -131,11 +134,11 @@ export default function DashboardPage() { {shareMenuOpen && (