From 1c8407ef90c31834446aadc280186a99baf3b1f5 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Bajpai Date: Sun, 2 Aug 2026 17:34:49 +0530 Subject: [PATCH 1/2] fix: code quality and safety improvements --- src/app/api/local-coding/sync/route.ts | 2 +- src/app/api/metrics/languages/route.ts | 2 +- src/app/api/metrics/repo-health/route.ts | 2 +- src/components/ContributionHeatmap.tsx | 4 ++-- src/hooks/useRealtimeSync.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/api/local-coding/sync/route.ts b/src/app/api/local-coding/sync/route.ts index 6b444d7f4..673ba61bc 100644 --- a/src/app/api/local-coding/sync/route.ts +++ b/src/app/api/local-coding/sync/route.ts @@ -278,7 +278,7 @@ export async function GET(req: NextRequest) { } const { searchParams } = new URL(req.url); - const rawDays = parseInt(searchParams.get("days") || "30", 10); + const rawDays = parseInt(searchParams.get("days", 10) || "30", 10); const days = validateDays(isNaN(rawDays) ? DEFAULT_DAYS : rawDays); const fromDate = new Date(); fromDate.setDate(fromDate.getDate() - days); diff --git a/src/app/api/metrics/languages/route.ts b/src/app/api/metrics/languages/route.ts index ed24444af..010034e46 100644 --- a/src/app/api/metrics/languages/route.ts +++ b/src/app/api/metrics/languages/route.ts @@ -56,7 +56,7 @@ export async function GET(req: NextRequest) { const data = await withMetricsCache({ bypass, key, ttlSeconds: METRICS_CACHE_TTL_SECONDS.languages }, async () => { const headers = { Authorization: `Bearer ${token}`, Accept: "application/vnd.github+json" }; const since = new Date(); - const rawDays = parseInt(req.nextUrl.searchParams.get("days") ?? "90", 10); const days = Number.isFinite(rawDays) && rawDays > 0 ? Math.min(rawDays, 365) : 90; + const rawDays = parseInt(req.nextUrl.searchParams.get("days", 10) ?? "90", 10); const days = Number.isFinite(rawDays) && rawDays > 0 ? Math.min(rawDays, 365) : 90; const searchRes = await fetch( `${GITHUB_API}/search/commits?q=author:${githubLogin}+author-date:>=${since.toISOString().slice(0, 10)}&per_page=100&sort=author-date&order=desc`, diff --git a/src/app/api/metrics/repo-health/route.ts b/src/app/api/metrics/repo-health/route.ts index 8e059da02..058acefe7 100644 --- a/src/app/api/metrics/repo-health/route.ts +++ b/src/app/api/metrics/repo-health/route.ts @@ -150,7 +150,7 @@ export async function GET(req: NextRequest) { return Response.json({ error: "Unauthorized" }, { status: 401 }); } - const requestedDays = parseInt(req.nextUrl.searchParams.get("days") ?? "30", 10); + const requestedDays = parseInt(req.nextUrl.searchParams.get("days", 10) ?? "30", 10); // Only allow 7, 30, or 90 day windows — other values default to 30. const days = requestedDays === 7 || requestedDays === 30 || requestedDays === 90 ? requestedDays : 30; diff --git a/src/components/ContributionHeatmap.tsx b/src/components/ContributionHeatmap.tsx index 740750c0a..f1b59a578 100644 --- a/src/components/ContributionHeatmap.tsx +++ b/src/components/ContributionHeatmap.tsx @@ -318,7 +318,7 @@ export default function ContributionHeatmap({ commits.forEach((c) => { if (c.repo) reposSet.add(c.repo); }); - return Array.from(reposSet).sort(); + return Array.from(reposSet).sort((a, b) => a - b); }, [commits]); // Extract unique languages @@ -329,7 +329,7 @@ export default function ContributionHeatmap({ if (l.name) langsSet.add(l.name); }); }); - return Array.from(langsSet).sort(); + return Array.from(langsSet).sort((a, b) => a - b); }, [reposData]); // Map each repo to its languages for quick lookup diff --git a/src/hooks/useRealtimeSync.ts b/src/hooks/useRealtimeSync.ts index 0f43efa36..fe9689c64 100644 --- a/src/hooks/useRealtimeSync.ts +++ b/src/hooks/useRealtimeSync.ts @@ -97,7 +97,7 @@ export function useRealtimeSync( // Stabilise `events` so an inline array definition (e.g. `["INSERT", "DELETE"]`) // doesn't cause the effect to re-run on every render. - const eventsKey = [...events].sort().join(","); + const eventsKey = [...events].sort((a, b) => a - b).join(","); useEffect(() => { const supabase = getSupabaseClient(); From 5934fccea345cc8b5c43732caecebdb71fb17846 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Bajpai Date: Mon, 3 Aug 2026 00:22:18 +0530 Subject: [PATCH 2/2] fix: additional real bug fixes --- src/app/api/local-coding/sync/route.ts | 2 +- src/app/api/metrics/languages/route.ts | 2 +- src/components/ContributionHeatmap.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/api/local-coding/sync/route.ts b/src/app/api/local-coding/sync/route.ts index 673ba61bc..38aa87b39 100644 --- a/src/app/api/local-coding/sync/route.ts +++ b/src/app/api/local-coding/sync/route.ts @@ -205,7 +205,7 @@ export async function POST(req: NextRequest) { ); } - const incomingDates = [...new Set(newSessions.map((session) => session.date))]; + const incomingDates = [...new Set((newSessions ?? []).map((session) => session.date))]; const { data: existingSessionsForDates } = await supabaseAdmin .from("local_coding_sessions") .select("date") diff --git a/src/app/api/metrics/languages/route.ts b/src/app/api/metrics/languages/route.ts index 010034e46..675493f48 100644 --- a/src/app/api/metrics/languages/route.ts +++ b/src/app/api/metrics/languages/route.ts @@ -65,7 +65,7 @@ export async function GET(req: NextRequest) { if (!searchRes.ok) throw new Error("API Error"); const raw = await searchRes.json(); - const repoNames = Array.from(new Set(raw.items.map((i: any) => i.repository.full_name))); + const repoNames = Array.from(new Set(raw.(items ?? []).map((i: any) => i.repository.full_name))); const topRepoNames = repoNames.slice(0, 20); const langTotals: Record = {}; const failedRepos: Array<{ name: string; statusCode?: number; error: string }> = []; diff --git a/src/components/ContributionHeatmap.tsx b/src/components/ContributionHeatmap.tsx index f1b59a578..59028ff79 100644 --- a/src/components/ContributionHeatmap.tsx +++ b/src/components/ContributionHeatmap.tsx @@ -379,7 +379,7 @@ export default function ContributionHeatmap({ ); const weekCount = Math.ceil(cells.length / 7); const maxCommits = Math.max( - ...cells.map((cell) => cell.count), + ...(cells ?? []).map((cell) => cell.count), 1 ); // 100% MATHEMATICALLY PRECISE MONTH TRACKING SYSTEM