You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Phase 3 of #167. Award badges / roles to users — e.g. contributor, server owner, early adopter, plugin author — and display them on profiles.
Scope
Backend (dpc-api): a Badge enum/table + a UserBadge join (FK to the local User mirror, awarded-at timestamp). Some badges are derivable and can be computed rather than stored at first: server owner = the user owns at least one API key (ApiKeyRepository.findByOwner), early adopter = User.createdAt before a cutoff. Others (contributor, plugin author) are assigned and need an admin grant path: authenticated admin-only POST/DELETE /api/v1/users/{username}/badges.
Frontend: render badges as MUI Chips on the public profile (pages/u/[username].tsx) and the account page.
Why it matters
Badges give recognition (motivating contribution) and let visitors quickly gauge who is behind a review or plugin (a plugin author badge carries weight on that plugin's reviews).
The admin-grant path shares an admin-role notion with reviews moderation; deriving server owner / early adopter first keeps an initial cut shippable without an admin system.
Filed as a Phase 3 decomposition of #167; drafted by Claude on behalf of Daniel Stephenson. Claims verified against User, ApiKey/ApiKeyRepository, and the #181 public-profile surface.
Summary
Phase 3 of #167. Award badges / roles to users — e.g. contributor, server owner, early adopter, plugin author — and display them on profiles.
Scope
dpc-api): aBadgeenum/table + aUserBadgejoin (FK to the localUsermirror, awarded-at timestamp). Some badges are derivable and can be computed rather than stored at first: server owner = the user owns at least one API key (ApiKeyRepository.findByOwner), early adopter =User.createdAtbefore a cutoff. Others (contributor, plugin author) are assigned and need an admin grant path: authenticated admin-onlyPOST/DELETE /api/v1/users/{username}/badges.PublicProfileResponse(Public profile pages — view another user's profile (#167 Phase 3) #181) so badges show without auth.Chips on the public profile (pages/u/[username].tsx) and the account page.Why it matters
Badges give recognition (motivating contribution) and let visitors quickly gauge who is behind a review or plugin (a plugin author badge carries weight on that plugin's reviews).
Dependencies
Filed as a Phase 3 decomposition of #167; drafted by Claude on behalf of Daniel Stephenson. Claims verified against
User,ApiKey/ApiKeyRepository, and the #181 public-profile surface.