diff --git a/src/app/leaderboards/components/LeaderboardRow.tsx b/src/app/leaderboards/components/LeaderboardRow.tsx
index 06d8598..884bc1b 100644
--- a/src/app/leaderboards/components/LeaderboardRow.tsx
+++ b/src/app/leaderboards/components/LeaderboardRow.tsx
@@ -1,71 +1,88 @@
-import { Trophy } from "lucide-react";
+import { LeaderboardRank } from "@/modules/leaderboard/types";
+import { LinkIcon, Trophy } from "lucide-react";
+import Link from "next/link";
-interface LeaderboardRowProps {
- rank: number;
- username: string;
- pb: string;
- runsCount: number;
- category: string;
+const LeaderboardRow = ({
+ index = 0,
+ run,
+}: {
index?: number;
-}
-
-const LeaderboardRow = ({ rank, username, pb, runsCount, category, index = 0 }: LeaderboardRowProps) => {
+ run: LeaderboardRank;
+}) => {
const getRankStyle = (rank: number) => {
- if (rank === 1) return "rank-gold";
- if (rank === 2) return "rank-silver";
- if (rank === 3) return "rank-bronze";
+ if (run.rank === 1) return "rank-gold";
+ if (run.rank === 2) return "rank-silver";
+ if (run.rank === 3) return "rank-bronze";
return "bg-secondary text-muted-foreground";
};
const getRankGlow = (rank: number) => {
- if (rank === 1) return "glow-gold";
- if (rank === 2) return "glow-silver";
- if (rank === 3) return "glow-bronze";
+ if (run.rank === 1) return "glow-gold";
+ if (run.rank === 2) return "glow-silver";
+ if (run.rank === 3) return "glow-bronze";
return "";
};
- const isTopThree = rank <= 3;
+ const isTopThree = run.rank <= 3;
return (
-
{/* Rank */}
-
-
- {rank <= 3 ? : rank}
+
+
+ {isTopThree ? : run.rank}
|
{/* Username */}
-
+ |
-
- {username.charAt(0).toUpperCase()}
-
-
- {username}
+
+ {run.username}
|
- {/* PB */}
-
- {pb}
- |
-
- {/* Runs */}
-
- {runsCount}
+ {/* Time */}
+ |
+
+ {run.pb}
+
|
{/* Category */}
- {category}
+ {run.category}
|
+
+ {/* Assisted */}
+
+
+ {run.assisted ? "Assisted" : "Unassisted"}
+
+ |
+
+ {/* Runs */}
+ {run.runsCount} |
+
+ {/* Problem */}
+
+
+ {run.problem}
+
+ |
|
);
};
diff --git a/src/app/leaderboards/page.tsx b/src/app/leaderboards/page.tsx
index 360b4d2..0a9c3fe 100644
--- a/src/app/leaderboards/page.tsx
+++ b/src/app/leaderboards/page.tsx
@@ -114,16 +114,28 @@ export default function Leaderboards() {
- Rank
- Runner
- PB
- Runs
- Category
+
+ Rank
+
+
+ Runner
+
+
+ Time
+
+
+ Category
+
+
+ Assisted
+
+ Runs
+ Problem
{data.map((entry, i) => (
-
+
))}
diff --git a/src/modules/leaderboard/actions.ts b/src/modules/leaderboard/actions.ts
index 34f7f0a..c62bab4 100644
--- a/src/modules/leaderboard/actions.ts
+++ b/src/modules/leaderboard/actions.ts
@@ -1,154 +1,194 @@
"use server";
import * as Core from "./core";
-import { Leaderboard } from "./types";
+import { LeaderboardRank } from "./types"; // updated interface
-export async function getGlobalLeaderboard(): Promise {
+export async function getGlobalLeaderboard(): Promise {
return [
{
rank: 1,
username: "speedmaster_x",
pb: "2:34.21",
runsCount: 2341,
- category: "Any%",
+ problem: "Fix broken login flow",
+ category: "any%",
+ assisted: false,
},
{
rank: 2,
username: "algo_ninja",
pb: "2:38.54",
runsCount: 1876,
- category: "Any%",
+ problem: "Refactor legacy API endpoints",
+ category: "any%",
+ assisted: false,
},
{
rank: 3,
username: "clockwork",
pb: "2:41.02",
runsCount: 3102,
- category: "Any%",
+ problem: "Optimize image upload pipeline",
+ category: "any%",
+ assisted: false,
},
{
rank: 4,
username: "fastfingers99",
pb: "2:45.33",
runsCount: 987,
- category: "Any%",
+ problem: "Build a mini chat server",
+ category: "any%",
+ assisted: false,
},
{
rank: 5,
username: "recursion_queen",
pb: "2:47.89",
runsCount: 1543,
- category: "Any%",
+ problem: "Fix CSS layout bug in dashboard",
+ category: "any%",
+ assisted: false,
},
{
rank: 6,
username: "bitshifter",
pb: "2:52.11",
runsCount: 2109,
- category: "Any%",
+ problem: "Implement JWT authentication",
+ category: "any%",
+ assisted: false,
},
{
rank: 7,
username: "nullpointer",
pb: "2:54.67",
runsCount: 876,
- category: "Any%",
+ problem: "Create REST endpoint for user data",
+ category: "any%",
+ assisted: false,
},
{
rank: 8,
username: "stackattack",
pb: "2:58.23",
runsCount: 1234,
- category: "Any%",
+ problem: "Fix off-by-one bug in sorting function",
+ category: "any%",
+ assisted: false,
},
{
rank: 9,
username: "looplegend",
pb: "3:01.45",
runsCount: 654,
- category: "Any%",
+ problem: "Optimize SQL query for reports",
+ category: "any%",
+ assisted: false,
},
{
rank: 10,
username: "coderunner",
pb: "3:05.78",
runsCount: 1098,
- category: "Any%",
+ problem: "Add file upload validation",
+ category: "any%",
+ assisted: false,
},
];
}
-export async function getWeeklyLeaderboard(): Promise {
+export async function getWeeklyLeaderboard(): Promise {
return [
{
rank: 1,
username: "weekly_warrior",
pb: "2:51.33",
runsCount: 156,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 2,
username: "speedmaster_x",
pb: "2:53.12",
runsCount: 89,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 3,
username: "newbie_grinder",
pb: "2:58.67",
runsCount: 234,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 4,
username: "algo_ninja",
pb: "3:02.45",
runsCount: 67,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 5,
username: "fresh_runner",
pb: "3:05.89",
runsCount: 45,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 6,
username: "practice_makes",
pb: "3:08.12",
runsCount: 112,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 7,
username: "splitmaster",
pb: "3:12.34",
runsCount: 78,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 8,
username: "grindtime",
pb: "3:15.56",
runsCount: 92,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 9,
username: "pb_hunter",
pb: "3:18.90",
runsCount: 56,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
{
rank: 10,
username: "reset_king",
pb: "3:22.11",
runsCount: 187,
- category: "Any%",
+ problem: "Build notifications API",
+ category: "any%",
+ assisted: false,
},
];
}
diff --git a/src/modules/leaderboard/types.ts b/src/modules/leaderboard/types.ts
index 4f25bf1..0f1cc51 100644
--- a/src/modules/leaderboard/types.ts
+++ b/src/modules/leaderboard/types.ts
@@ -5,5 +5,7 @@ export interface LeaderboardRank {
username: string;
pb: string;
runsCount: number;
- category: string;
+ problem: string;
+ category: "any%" | "100%";
+ assisted: boolean;
}