/rh/alumni lists all alumni records for the current organization and provides tools to manage alumni engagements such as mentoring, volunteer work, and re-engagement milestones.
Overview
The screen loads alumni records viauseAlumni, which queries the rh_alumni table joined to rh_resident_profiles and rh_episodes, filtered by organization_id and ordered by program_completion_date descending. A search field filters on alumni id; a status selector filters by status values all, active, inactive, lost_contact, and deceased. A second card below the directory table shows Alumni Engagements — records of mentoring, volunteer work, and re-engagement milestones loaded by useAlumniEngagements. Users with rh.residents.edit permission see an Add Engagement button in that section.
Who it’s for
No route-levelRequirePermission beyond the outer RHViewGuard. The outer guard requires RH_PERMISSIONS.DASHBOARD_VIEW (rh.dashboard.view). The Add Engagement button is gated by PermissionGate with permission rh.residents.edit.
Before you start
- Hold
rh.dashboard.viewto access the RH module. - Hold
rh.residents.editto add engagement records.
Steps
Open the Alumni list
/rh/alumni. The Alumni directory card loads with a count of records matching the current filter.Filter alumni
Active, Inactive, Lost Contact, or Deceased.Add an alumni record
AlumniDialog opens. Complete the form and save.View engagement history
AlumniEngagementsTable lists all engagement records across the organization.Add an engagement (requires rh.residents.edit)
AlumniEngagementDialog opens. Complete the form and save.Open an alumni record
/rh/alumni/:id for full detail.Key concepts
Empty state
Empty state
Loading state
Loading state
useAlumni is fetching, the Alumni directory card shows five skeleton rows. The record count area also renders a skeleton placeholder.Viewing an alumni record
The Alumni Details screen at/rh/alumni/:id shows the full record for one alumni, including program completion details, contact consent and contact information, success story status, an engagement breakdown chart, and a complete engagement history table.
The page reads the URL parameter :id and loads the alumni record via useAlumniDetail. The breadcrumb is set to Alumni #<first 8 chars of id>. The header badge shows Active Alumni (green) when alumni.is_active is true, and Inactive (secondary) otherwise. Program completion date is formatted as MMMM d, yyyy. Contact information (contact_email, contact_phone, contact_address) is rendered only when contact_consent is true. The success story card shows an “Approved” badge when success_story_approved is true, a “Pending Approval” badge with a no-op approve button when a story is present but not yet approved, or a placeholder message when no story exists. The AlumniEngagementChart renders when engagement data is present, aggregating records by engagement_type. A full AlumniEngagementsTable filtered by alumniId shows the complete engagement history. If the record is not found or an error occurs, a “Alumni record not found or an error occurred.” message is displayed.
No route-level RequirePermission beyond the outer RHViewGuard, which requires rh.dashboard.view. The alumni record must exist; navigating to a non-existent ID shows an error card.
Open an alumni record
/rh/alumni, click a row in the Alumni directory table to navigate to /rh/alumni/:id.Review alumni information
contact_consent is true.Review the success story
View engagement breakdown
AlumniEngagementChart renders a breakdown by engagement type.Edit the record
/rh/alumni/:id/edit.Add an engagement
/rh/alumni/:id/engagements/new.Error / not-found state
Error / not-found state
useAlumniDetail returns an error or no data, the page renders a card with the message “Alumni record not found or an error occurred.”Loading state
Loading state
Contact consent gate
Contact consent gate
alumni.contact_consent is true. This is enforced in the component JSX — not via a separate permission check.Creating an alumni record
The path/rh/alumni/new is not registered as a route in src/routes/rh.tsx. Alumni record creation is handled through an inline dialog on the /rh/alumni list page, not via a dedicated route. Visiting /rh/alumni/new directly will render the platform’s Not Found page.
Before you start: navigate to /rh/alumni and use the Add Alumni button to create a new alumni record.
Navigate to the Alumni list
/rh/alumni. The alumni directory for your organization is displayed.Open the Add Alumni dialog
Complete and save the form
Related
Recovery Housing
Governance & parity
Documentation sources
Documentation sources
- src/routes/rh.tsx
- src/cores/rh/pages/AlumniPage.tsx
- src/cores/rh/pages/AlumniDetailPage.tsx
- src/cores/rh/hooks/useAlumni.ts
- src/cores/rh/components/forms/AlumniDialog.tsx