@@ -13,24 +13,19 @@ export default async function Home() {
1313 . order ( "created_at" , { ascending : false } )
1414 . limit ( 5 ) ;
1515
16- const { data : losser } = await supabase
17- . from ( "leaderboard_members_view " )
18- . select ( "email, total_seconds " )
16+ const { data : losser_members } = await supabase
17+ . from ( "top_user_stats " )
18+ . select ( "* " )
1919 . lt ( "total_seconds" , 14400 ) // thats 4 hours
2020 . neq ( "total_seconds" , 0 )
2121 . not ( "total_seconds" , "is" , null )
2222 . order ( "total_seconds" , { ascending : true } ) ;
2323
24- const seen = new Set ( ) ;
25- const losser_members = losser
26- ? losser
27- . filter ( ( row ) => {
28- if ( seen . has ( row . email ) ) return false ;
29- seen . add ( row . email ) ;
30- return true ;
31- } )
32- . slice ( 0 , 10 )
33- : [ ] ;
24+ const { data : top_members } = await supabase
25+ . from ( "top_user_stats" )
26+ . select ( "*" )
27+ . order ( "total_seconds" , { ascending : false } )
28+ . limit ( 3 ) ;
3429
3530 return (
3631 < div className = "min-h-screen bg-[#0a0a1a] text-white overflow-hidden grid-bg relative" >
@@ -324,6 +319,49 @@ export default async function Home() {
324319 </ div >
325320 </ section >
326321
322+ { top_members && top_members . length > 0 && (
323+ < section className = "max-w-5xl mx-auto px-6 pb-5 relative z-10" >
324+ < div
325+ className = "glass-card border border-white/5 bg-white/[0.02] backdrop-blur-xl p-8 md:p-12 rounded-3xl"
326+ data-aos = "fade-up"
327+ >
328+ < h2 className = "text-2xl font-bold text-white mb-4" >
329+ Top Developers of the Week
330+ </ h2 >
331+ < p className = "text-gray-400 text-sm mb-8" >
332+ Celebrating the most dedicated coders in our community.
333+ </ p >
334+
335+ < div className = "grid grid-cols-1 md:grid-cols-3 gap-4" >
336+ { top_members . map (
337+ (
338+ member : { email : string ; total_seconds : number } ,
339+ i : number ,
340+ ) => (
341+ < div
342+ key = { i }
343+ className = "stat-card flex flex-col items-center px-6 py-4 group bg-black/20 hover:bg-white/5 transition-all border border-white/5 rounded-xl rounded-tl-sm"
344+ data-aos = "fade-up"
345+ data-aos-delay = { ( i * 50 ) . toString ( ) }
346+ >
347+ < div className = "flex items-center gap-3 mb-2" >
348+ < div className = "w-2 h-2 rounded-full bg-yellow-400 group-hover:shadow-[0_0_10px_rgba(250,204,21,0.8)] transition-all" />
349+ < span className = "text-gray-200 font-semibold group-hover:text-white transition" >
350+ { member . email . split ( "@" ) [ 0 ] }
351+ </ span >
352+ </ div >
353+ < span className = "text-gray-500 text-sm group-hover:text-yellow-400 transition" >
354+ { Math . floor ( member . total_seconds / 3600 ) } h{ " " }
355+ { Math . floor ( ( member . total_seconds % 3600 ) / 60 ) } m
356+ </ span >
357+ </ div >
358+ ) ,
359+ ) }
360+ </ div >
361+ </ div >
362+ </ section >
363+ ) }
364+
327365 { /* Recent Leaderboards */ }
328366 { leaderboards && leaderboards . length > 0 && (
329367 < section className = "max-w-5xl mx-auto px-6 pb-5 relative z-10" >
@@ -404,9 +442,9 @@ export default async function Home() {
404442 Losser Leaderboard
405443 </ h2 >
406444 < p className = "text-gray-400 text-sm mb-8" >
407- Top most "dedicated" developers who have spent the
408- least amount of time coding. Remember, its not about how much you
409- code, but how effective you are! 😉
445+ Top most "dedicated" developers who have spent the least
446+ amount of time coding. Remember, its not about how much you code,
447+ but how effective you are! 😉
410448 </ p >
411449
412450 { ( ! losser_members || losser_members . length ) === 0 && (
0 commit comments