medium complexity extracted Referral Program Confidence: 100%
4
Components
39
Shared
0
User Stories
Yes
Analyzed

Description

This feature gives coordinators a dashboard widget and underlying analytics service that surface how many invitations have been sent, how many have been redeemed, and which peer mentors are the most active recruiters within their local association. The view updates in near-real time as referral links are redeemed, providing actionable visibility into the health of the volunteer pipeline. Data can be filtered by time range and broken down per peer mentor to support targeted follow-up and recognition.

Analysis

Business Value

Coordinators currently have no systematic way to see whether their peer mentors are actively recruiting or whether invite campaigns are converting. Recruitment Tracking closes this gap by making the referral funnel measurable, allowing coordinators to identify top recruiters for recognition and to follow up with peer mentors whose invites have gone unredeemed. For organization administrators the aggregate metrics feed into strategic planning around volunteer growth targets and can be included in Bufdir progress reports. Making recruitment visible also reinforces gamification goals by giving peer mentors a concrete number to point to, complementing achievement badges and the annual wrapped summary.

Implementation Notes

The recruitment analytics service aggregates data from the referrals table using parameterized SQL queries grouped by referrer_user_id and redeemed_at date ranges. The coordinator-facing dashboard widget calls a paginated REST endpoint that returns referrer summaries sorted by total redemptions descending. To avoid N+1 queries the endpoint joins referrals with users in a single query and returns display names alongside counts. The widget is implemented as a Flutter StatelessWidget consuming a Riverpod provider that caches the response and invalidates on pull-to-refresh. Organization scoping is enforced server-side by filtering referrals to users whose organization_membership matches the requesting coordinator's organization, ensuring tenant isolation. No personally identifiable information beyond display names is exposed in aggregate views.

Components (43)

User Interface (2)

Service Layer (2)

Shared Components

These components are reused across multiple features

User Stories

No user stories have been generated for this feature yet.