Status: Implemented in Phase 1.4 + 1.6 (card view, filters, sorting, privacy-aware display). Map view and messaging remain deferred.
The Champion Directory makes it easy for Champions to find and connect with each other. This is central to the Connection Advisor role and the belonging narrative.
Design Principle: Connection is at the heart of the Champion community. Make it easy to find people who share your interests, location, or background.
Modeled after the internal Alumni Lookup, but simplified for the Champion audience.
| Filter | Type | Notes |
|---|---|---|
| Name | Text | Searches preferred, legal, and maiden names (AlumniMatcher parsing) |
| Graduation Year | Multi-select dropdown | Dynamic years from alumni degrees; decade toggle selects all years |
| College | Dropdown | From linked alumni degrees (college_code) |
| Affinity | Typeahead | Single selection from Champion cp_affinities |
| District | Autocomplete | Typeahead via /api/districts |
| Industry | Dropdown | From Champion profile |
| Champion Role | Dropdown | Community Builder, Connection Advisor, etc. |
| Major | Future | Potential addition for later phases |
The affinity filter uses a single-select autocomplete:
grad_years[]┌─────────────────────────┐
│ [Photo] │
│ Preferred Name │
│ City, State │
│ ─────────────────────── │
│ Role: Community Builder │
│ Industry: Healthcare │
│ Affinity: Greek Life │
│ ─────────────────────── │
│ [View Profile] │
└─────────────────────────┘
| Column | Content | |——–|———| | Photo | Thumbnail or placeholder | | Name | Preferred name | | Location | City, State (if visible) | | Role | Champion role badge(s) | | Affinity | Primary affinity | | Actions | View Profile, Message |
Privacy Note: Map shows approximate location only. No precise addresses displayed.
When viewing another Champion’s profile:
verified_at)Directory shows all verified Champions by default. District is an optional filter.
Planned for Phase 5 as a temporary district override.
def display_field?(field, viewer, owner)
case owner.privacy_setting_for(field)
when 'all_champions'
true
when 'district_only'
viewer.district == owner.district
when 'hidden'
viewer == owner # Only self can see
end
end
ILIKE against parsed name parts (AlumniMatcher parsing of preferred/legal/maiden names).