From 74e477506e56270f225a30bb7e3b04d1db1b37f0 Mon Sep 17 00:00:00 2001 From: ectasy663 Date: Fri, 25 Sep 2026 16:34:17 +0530 Subject: [PATCH] Update college predictor chart with JEE/NEET marks scale and college names --- .../ai-coach/college-predictor/page.tsx | 84 +++++++++++-------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/src/app/dashboard/ai-coach/college-predictor/page.tsx b/src/app/dashboard/ai-coach/college-predictor/page.tsx index 3c10f3d..ccfa7fe 100644 --- a/src/app/dashboard/ai-coach/college-predictor/page.tsx +++ b/src/app/dashboard/ai-coach/college-predictor/page.tsx @@ -7,41 +7,55 @@ import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContai import { useActiveUser, isDemoUser } from "@/hooks/useActiveUser" const DEMO_TREND_DATA = [ - { name: '1', value: 0.120, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '2', value: 0.100, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '3', value: 0.075, ucl: 0.195, lcl: 0.005, cl: 0.10, target: 0.16 }, - { name: '4', value: 0.090, ucl: 0.195, lcl: 0.005, cl: 0.10, target: 0.16 }, - { name: '5', value: 0.119, ucl: 0.180, lcl: 0.020, cl: 0.10, target: 0.16 }, - { name: '6', value: 0.110, ucl: 0.180, lcl: 0.020, cl: 0.10, target: 0.16 }, - { name: '7', value: 0.110, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '8', value: 0.160, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '9', value: 0.111, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '10', value: 0.067, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '11', value: 0.180, ucl: 0.178, lcl: 0.022, cl: 0.10, target: 0.16 }, - { name: '12', value: 0.125, ucl: 0.178, lcl: 0.022, cl: 0.10, target: 0.16 }, - { name: '13', value: 0.075, ucl: 0.178, lcl: 0.022, cl: 0.10, target: 0.16 }, - { name: '14', value: 0.066, ucl: 0.180, lcl: 0.020, cl: 0.10, target: 0.16 }, - { name: '15', value: 0.055, ucl: 0.180, lcl: 0.020, cl: 0.10, target: 0.16 }, - { name: '16', value: 0.100, ucl: 0.195, lcl: 0.005, cl: 0.10, target: 0.16 }, - { name: '17', value: 0.125, ucl: 0.195, lcl: 0.005, cl: 0.10, target: 0.16 }, - { name: '18', value: 0.088, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '19', value: 0.056, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '20', value: 0.080, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '21', value: 0.050, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '22', value: 0.080, ucl: 0.185, lcl: 0.015, cl: 0.10, target: 0.16 }, - { name: '23', value: 0.100, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '24', value: 0.067, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, - { name: '25', value: 0.100, ucl: 0.190, lcl: 0.010, cl: 0.10, target: 0.16 }, + { name: 'Test 1', value: 120, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'NIT Raipur CSE' }, + { name: 'Test 2', value: 135, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'NIT Jalandhar IT' }, + { name: 'Test 3', value: 110, ucl: 290, lcl: 35, cl: 150, target: 240, label: 'IIIT Pune CSE' }, + { name: 'Test 4', value: 160, ucl: 290, lcl: 35, cl: 150, target: 240, label: 'NIT Silchar CSE' }, + { name: 'Test 5', value: 145, ucl: 280, lcl: 45, cl: 150, target: 240, label: 'NIT Kurukshetra IT' }, + { name: 'Test 6', value: 175, ucl: 280, lcl: 45, cl: 150, target: 240, label: 'NIT Calicut CSE' }, + { name: 'Test 7', value: 195, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'NIT Rourkela ECE' }, + { name: 'Test 8', value: 165, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'NIT Durgapur CSE' }, + { name: 'Test 9', value: 215, ucl: 275, lcl: 50, cl: 150, target: 240, label: 'NIT Warangal ECE' }, + { name: 'Test 10', value: 230, ucl: 275, lcl: 50, cl: 150, target: 240, label: 'NIT Surathkal IT' }, + { name: 'Test 11', value: 210, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'IIT Mandi CSE' }, + { name: 'Test 12', value: 255, ucl: 285, lcl: 40, cl: 150, target: 240, label: 'IIT Roorkee CSE' }, ]; const ZERO_TREND_DATA = DEMO_TREND_DATA.map(d => ({ ...d, value: 0 })); -// Custom dot to match the requested look +// Custom Label to permanently show text on the graph (not on hover) +const CustomLabel = (props: any) => { + const { x, y, index, data } = props; + const point = data[index]; + if (!point || !point.label) return null; + + let anchor = "middle"; + let xPos = x; + let yPos = y - 15; + + if (index === 0) { + anchor = "start"; + xPos = x + 5; + } else if (index === data.length - 1) { + anchor = "end"; + xPos = x - 5; + } + + return ( + + + {point.label} + + + ); +}; + +// Custom dot const CustomDot = (props: any) => { const { cx, cy, payload } = props; - // Find if this is the outlier (highest point, around 0.180) to color it red - const isOutlier = payload.value >= 0.180; + // High score outlier (e.g., above target band) + const isOutlier = payload.value >= 250; return ( val.toFixed(3)} + domain={[0, 300]} + ticks={[0, 50, 100, 150, 200, 250, 300]} axisLine={false} tickLine={false} - label={{ value: 'Prediction Volatility', angle: -90, position: 'insideLeft', fill: 'var(--muted-foreground)', fontSize: 12, fontWeight: 'bold' }} + label={{ value: 'Mock Exam Score', angle: -90, position: 'insideLeft', fill: 'var(--muted-foreground)', fontSize: 12, fontWeight: 'bold' }} /> {/* Target Spec Line Band */} - + {/* Target Line */} - + {/* Center Line (CL) */} - + {/* Control Limits (stepped) */} @@ -132,6 +145,7 @@ export default function CollegePredictorPage() { dot={} activeDot={{ r: 6, fill: 'var(--cyan-ai)' }} isAnimationActive={true} + label={} />