Skip to content

Commit d25e1ca

Browse files
authored
Merge pull request #23 from mrepol742/master
title not found
2 parents f331eca + 6cf362c commit d25e1ca

2 files changed

Lines changed: 61 additions & 16 deletions

File tree

app/page.tsx

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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 &quot;dedicated&quot; 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 &quot;dedicated&quot; 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 && (

sql/public.top_user_stats.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE OR REPLACE VIEW top_user_stats AS
2+
SELECT
3+
us.user_id,
4+
us.total_seconds,
5+
a.email
6+
FROM user_stats us
7+
JOIN auth.users a ON us.user_id = a.id;

0 commit comments

Comments
 (0)