From bd13e49530cfc3a647151657e9a3bafc744b375b Mon Sep 17 00:00:00 2001 From: Ayush Raj Date: Fri, 5 Jun 2026 22:48:06 +0530 Subject: [PATCH 1/2] fix: dynamically calculate avg review time from merged PRs (#261) --- src/app/(app)/my-prs/page.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/(app)/my-prs/page.tsx b/src/app/(app)/my-prs/page.tsx index c5d2258..934f5a9 100644 --- a/src/app/(app)/my-prs/page.tsx +++ b/src/app/(app)/my-prs/page.tsx @@ -287,7 +287,21 @@ export default async function MyPRsPage() { const prsMerged = enrichedPRs.filter((pr) => pr.state === 'merged').length; const prsTotal = enrichedPRs.length; const successRate = prsTotal > 0 ? Math.round((prsMerged / prsTotal) * 100) : 0; - const avgReviewDays = 2.3; + const mergedWithDates = enrichedPRs.filter( + (pr) => pr.state === 'merged' && pr.github_created_at && pr.merged_at, + ); + const avgReviewDays = + mergedWithDates.length > 0 + ? Math.round( + (mergedWithDates.reduce((sum, pr) => { + const created = new Date(pr.github_created_at).getTime(); + const merged = new Date(pr.merged_at!).getTime(); + return sum + (merged - created) / (1000 * 60 * 60 * 24); + }, 0) / + mergedWithDates.length) * + 10, + ) / 10 + : null; const levelFloor = xpForLevel(level); const levelCeiling = xpForLevel(level + 1); @@ -351,7 +365,7 @@ export default async function MyPRsPage() { Avg Review Time
- {avgReviewDays} days + {avgReviewDays !== null ? `${avgReviewDays} days` : 'N/A'}
From a90289261fcbc2c06744d4374936c4fa89a78cf8 Mon Sep 17 00:00:00 2001 From: Ayush Raj Date: Sat, 6 Jun 2026 17:25:18 +0530 Subject: [PATCH 2/2] refactor: address review feedback - fix metric label, floating point, and string spacing --- src/app/(app)/my-prs/page.tsx | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/app/(app)/my-prs/page.tsx b/src/app/(app)/my-prs/page.tsx index 934f5a9..f048ca8 100644 --- a/src/app/(app)/my-prs/page.tsx +++ b/src/app/(app)/my-prs/page.tsx @@ -290,17 +290,13 @@ export default async function MyPRsPage() { const mergedWithDates = enrichedPRs.filter( (pr) => pr.state === 'merged' && pr.github_created_at && pr.merged_at, ); - const avgReviewDays = + const avgMergeDays = mergedWithDates.length > 0 - ? Math.round( - (mergedWithDates.reduce((sum, pr) => { - const created = new Date(pr.github_created_at).getTime(); - const merged = new Date(pr.merged_at!).getTime(); - return sum + (merged - created) / (1000 * 60 * 60 * 24); - }, 0) / - mergedWithDates.length) * - 10, - ) / 10 + ? mergedWithDates.reduce((sum, pr) => { + const created = new Date(pr.github_created_at).getTime(); + const merged = new Date(pr.merged_at!).getTime(); + return sum + (merged - created) / (1000 * 60 * 60 * 24); + }, 0) / mergedWithDates.length : null; const levelFloor = xpForLevel(level); @@ -362,10 +358,17 @@ export default async function MyPRsPage() {
- Avg Review Time + Avg Time to Merge
-
- {avgReviewDays !== null ? `${avgReviewDays} days` : 'N/A'} +
+ {avgMergeDays !== null ? ( + <> + {avgMergeDays.toFixed(1)} + days + + ) : ( + 'N/A' + )}