@@ -3,6 +3,7 @@ import Link from "next/link";
33import { createClient as createServerClient } from "../../lib/supabase/server" ;
44import { Cinzel } from "next/font/google" ;
55import checkUserCompletedQuizzes from "@/lib/checkUserCompletedQuizzes" ;
6+ import { ArrowBigLeft , ArrowBigDown , ArrowBigRight } from "lucide-react" ;
67
78const cinzel = Cinzel ( {
89 subsets : [ "latin" ] ,
@@ -45,29 +46,27 @@ export default async function DashboardPage() {
4546 "btn border-2 border-cyan-400 text-cyan-400 bg-transparent hover:bg-cyan-900/50 hover:border-cyan-200 hover:text-cyan-200 shadow-lg shadow-cyan-500/50 transition duration-300 ease-in-out" ;
4647
4748 const greyButtonClass =
48- "btn border-2 border-gray-400 text-gray-400 bg-transparent hover:bg-gray-900/50 hover:border-gray-200 hover:text-gray-200 shadow-lg shadow-gray-500/50 transition duration-300 ease-in-out" ;
49+ "btn border-2 border-gray-400 text-gray-400 bg-black/50 backdrop-blur-sm hover:bg-gray-900/50 hover:border-gray-200 hover:text-gray-200 shadow-lg shadow-gray-500/50 transition duration-300 ease-in-out" ;
4950
5051 const greenButtonClass =
51- "btn border-2 border-emerald-400 text-emerald-400 bg-transparent hover:bg-emerald-900/50 hover:border-emerald-200 hover:text-emerald-200 shadow-lg shadow-emerald-500/50 transition duration-300 ease-in-out" ;
52+ "btn border-2 border-emerald-400 text-emerald-400 bg-emerald-900/60 backdrop-blur-sm hover:bg-emerald-900/50 hover:border-emerald-200 hover:text-emerald-200 shadow-lg shadow-emerald-400/70 transition duration-300 ease-in-out" ;
5253
53- // helper
54- const getButtonClass = ( complete : boolean ) =>
55- complete ? greenButtonClass : greyButtonClass ;
54+ // helpers
55+ const getButtonClass = ( complete : boolean ) => ( complete ? greenButtonClass : greyButtonClass ) ;
56+ const getArrowColor = ( complete : boolean ) => ( complete ? "text-emerald-400" : "text-gray-400" ) ;
5657
5758 return (
5859 < main
5960 className = { `relative min-h-dvh p-8 text-white ${ cinzel . className } ` }
6061 style = { {
61- backgroundImage : "url('/dashboard.png ')" ,
62+ backgroundImage : "url('/dashboard.jpg ')" ,
6263 backgroundSize : "cover" ,
6364 backgroundPosition : "center" ,
6465 } }
6566 >
6667 < div className = "flex justify-between items-start w-full" >
6768 < div className = "flex flex-col gap-4 p-0 w-fit" >
68- < h1 className = "text-white text-5xl font-bold tracking-wider mb-4" >
69- Dashboard
70- </ h1 >
69+ < h1 className = "text-white text-5xl font-bold tracking-wider mb-4" > Dashboard</ h1 >
7170 < div className = "flex flex-col gap-4 w-32" >
7271 < Link href = "/" className = { celestialButtonClasses } >
7372 < span > Home</ span >
@@ -88,44 +87,65 @@ export default async function DashboardPage() {
8887 </ div >
8988
9089 { /* Tutorials */ }
91- < div className = "absolute bottom-16 left-1/2 -translate-x-1/2" >
92- < div className = "flex flex-col gap-6 w-64 text-center" >
90+ < div className = "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-black/70 backdrop-blur-md rounded-2xl p-8 border border-white/10" >
91+ < div className = "grid grid-cols-[1fr_auto_1fr] gap-4 items-center w-[500px]" >
92+ { /* Row 1: Hello World → Variables */ }
9393 < Link href = "tutorial-hello-world" className = { getButtonClass ( isHelloWorldComplete ) } >
9494 Hello World
9595 </ Link >
96-
96+ < ArrowBigRight className = { getArrowColor ( isVariablesComplete ) } size = { 28 } />
9797 < Link href = "tutorial-variables" className = { getButtonClass ( isVariablesComplete ) } >
9898 Variables
9999 </ Link >
100100
101- < Link href = "tutorial-user-input" className = { getButtonClass ( isUserInputComplete ) } >
102- User Input
103- </ Link >
101+ < div className = "col-span-3 flex justify-end pr-12" >
102+ < ArrowBigDown className = { getArrowColor ( isUserInputComplete ) } size = { 28 } />
103+ </ div >
104104
105+ { /* Row 2: Conditionals ← User Input */ }
105106 < Link href = "tutorial-conditionals" className = { getButtonClass ( isConditionalsComplete ) } >
106107 Conditionals
107108 </ Link >
109+ < ArrowBigLeft className = { getArrowColor ( isConditionalsComplete ) } size = { 28 } />
110+ < Link href = "tutorial-user-input" className = { getButtonClass ( isUserInputComplete ) } >
111+ User Input
112+ </ Link >
108113
114+ < div className = "col-span-3 flex justify-start pl-12" >
115+ < ArrowBigDown className = { getArrowColor ( isLoopsComplete ) } size = { 28 } />
116+ </ div >
117+
118+ { /* Row 3: Loops → Math */ }
109119 < Link href = "tutorial-loops" className = { getButtonClass ( isLoopsComplete ) } >
110120 Loops
111121 </ Link >
112-
122+ < ArrowBigRight className = { getArrowColor ( isMathComplete ) } size = { 28 } />
113123 < Link href = "tutorial-math" className = { getButtonClass ( isMathComplete ) } >
114124 Math
115125 </ Link >
116126
117- < Link href = "tutorial-functions" className = { getButtonClass ( isFunctionsComplete ) } >
118- Functions
119- </ Link >
127+ < div className = "col-span-3 flex justify-end pr-12" >
128+ < ArrowBigDown className = { getArrowColor ( isFunctionsComplete ) } size = { 28 } />
129+ </ div >
120130
131+ { /* Row 4: Lists & Arrays ← Functions */ }
121132 < Link href = "tutorial-lists-arrays" className = { getButtonClass ( isListsArraysComplete ) } >
122133 Lists & Arrays
123134 </ Link >
135+ < ArrowBigLeft className = { getArrowColor ( isListsArraysComplete ) } size = { 28 } />
136+ < Link href = "tutorial-functions" className = { getButtonClass ( isFunctionsComplete ) } >
137+ Functions
138+ </ Link >
124139
140+ < div className = "col-span-3 flex justify-start pl-12" >
141+ < ArrowBigDown className = { getArrowColor ( isDictionaryComplete ) } size = { 28 } />
142+ </ div >
143+
144+ { /* Row 5: Dictionary → Recursion */ }
125145 < Link href = "tutorial-dictionary" className = { getButtonClass ( isDictionaryComplete ) } >
126146 Dictionary
127147 </ Link >
128-
148+ < ArrowBigRight className = { getArrowColor ( isRecursionComplete ) } size = { 28 } />
129149 < Link href = "tutorial-recursion" className = { getButtonClass ( isRecursionComplete ) } >
130150 Recursion
131151 </ Link >
0 commit comments