src/app/dashboard/contributor/page.tsx#ContributorDashboardPage renders a section
titled "Recommended for you":
<h2 className="mt-12 text-xl font-semibold text-slate-900 dark:text-white">
Recommended for you
</h2>
<div className="mt-6 grid gap-4 md:grid-cols-2">
{available.slice(0, 4).map((bounty) => (
<BountyCard key={bounty.id} bounty={bounty} />
))}
</div>
available is simply bounties.filter((b) => b.status === "open") — every open bounty,
in whatever order the backend/mock data happens to return them, with the first four taken
via slice(0, 4). There is no relevance scoring against the signed-in contributor's
history, languages (ReputationProfile.languages, which this same app already computes
and displays on the reputation page), past claims, or repos they've contributed to —
"Recommended for you" is functionally identical to "here are the first four open
bounties," which would be an honest heading; "Recommended for you" implies a
personalization that doesn't exist anywhere in this code path.
This matters specifically because the same contributor's own reputation profile (fetched
via mockReputationProfiles/fetchReputationByUsername elsewhere in this app) already
contains exactly the signal — languages, organizations — that a real recommendation
would use, but ContributorDashboardPage never reads it for this purpose.
Suggested fix: either rename the section to something accurate ("Open bounties") until
real personalization exists, or use the signed-in user's own languages/organizations
(already fetched elsewhere) to filter/sort available before slicing.
src/app/dashboard/contributor/page.tsx#ContributorDashboardPagerenders a sectiontitled "Recommended for you":
availableis simplybounties.filter((b) => b.status === "open")— every open bounty,in whatever order the backend/mock data happens to return them, with the first four taken
via
slice(0, 4). There is no relevance scoring against the signed-in contributor'shistory, languages (
ReputationProfile.languages, which this same app already computesand displays on the reputation page), past claims, or repos they've contributed to —
"Recommended for you" is functionally identical to "here are the first four open
bounties," which would be an honest heading; "Recommended for you" implies a
personalization that doesn't exist anywhere in this code path.
This matters specifically because the same contributor's own reputation profile (fetched
via
mockReputationProfiles/fetchReputationByUsernameelsewhere in this app) alreadycontains exactly the signal —
languages,organizations— that a real recommendationwould use, but
ContributorDashboardPagenever reads it for this purpose.Suggested fix: either rename the section to something accurate ("Open bounties") until
real personalization exists, or use the signed-in user's own
languages/organizations(already fetched elsewhere) to filter/sort
availablebefore slicing.