feat(badges): plumb working group and refined conference role badges
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 33
- Forks
- 104
- Avg merge
- 12h 3m
- Merged PRs (30d)
- 10
Description
Summary
Phase 2 of the badge expansion. Wire `computeBadges` to consume tables that already exist in the schema but don't yet feed the recognition system: `group_memberships`, `event_committee_assignments`, `event_sessions`, and `event_session_types`. Adds ~10 new badges spanning sustained community participation and granular conference roles.
Requirements
- Working Group Member / Working Group Chair badges from `group_memberships` joined to `groups` (filter to working-group type, distinguish chair/co-chair from rank-and-file).
- Affinity Group Member / Affinity Group Coordinator from the same tables filtered to affinity-group type.
- Program Committee badge from `event_committee_assignments`.
- Reviewer badge from `event_committee_assignments` filtered to reviewer-style areas.
- Refined conference-role badges using `event_sessions` and `event_session_types`: Keynote Speaker, Plenary Speaker, Lightning Talk, Tutorial Lead, Workshop Lead, Birds of a Feather Lead, Panelist. Replaces the current heuristic regex on `event_attendances.notes` with a proper join.
- Backwards compatibility: existing `Talk` and `Poster` badges continue to work for events that don't have richer session data.
- `pickFeaturedBadges` updated — Keynote and Plenary should rank near the top of the achievements strip alongside Service tier.
Context
Tables already exist (verified during the disciplines/skills work): `groups`, `group_memberships`, `event_committee_areas`, `event_committee_assignments`, `event_sessions`, `event_session_presenters`, `event_session_types`. Nothing in `badges.ts` reads them today.
The Phase 1 issue (#1951) is a prerequisite — its widened `computeBadges` signature is the natural place to add these new inputs. Phase 3 introduces the brand-new `awards` / `mentorship` / `contributions` tables.
Implementation Notes
- `loadMemberDossier` will need to load these additional rows (or join them lazily) before passing to `computeBadges`. Worth measuring query count — the Promise.all batch is already a few queries deep.
- Conference-role badges should prefer `event_sessions` data over `event_attendances.notes` regex. If a session matches via `event_session_presenters`, emit the session-type badge; otherwise fall back to the existing logic.
- Group membership end-dating (if the join carries dates) should distinguish "current chair" from "former chair" — current rates higher in the visual hierarchy.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with Phase 1 issue #1951, then inspect badges.ts and loadMemberDossier to trace how computeBadges receives data. Load the named group, committee, session, and session-type rows, implement the listed badges and ranking changes, preserve the existing Talk and Poster fallback, and measure the added query count.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend, databases
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100