Version: 1.0
Last Updated: November 2025
Status: ✅ Complete
Note: This documents the current Champion Signup flow. Much of this will be replaced/reintegrated when the Champion Portal (seeplanning/champion-portal/) is developed.
The Champion Signup System provides a complete workflow for alumni to become “Alumni Champions” — volunteer ambassadors for Belmont University. The system spans two domains:
| Domain | Audience | Features |
|---|---|---|
champions.bualum.co |
External Alumni | Multi-step signup wizard |
lookup.bualum.co |
Internal Staff | Management, review, exports |
The signup process at champions.bualum.co guides alumni through 5 steps:
| Step | Status Value | What’s Collected |
|---|---|---|
| 1. Welcome | started (1) |
First name, last name, graduation year |
| 2. Personal Info | completed_questions (2) |
Contact info, address |
| 3. Questions | selected_role (3) |
Quiz answers → role recommendation |
| 4. Role Selection | interests (4) |
Confirmed role choice |
| 5. Interests | zip_code (5) |
Lifestage interests, completion |
The quiz recommends one of four roles:
| Role | Description | Icon |
|---|---|---|
| Connection Advisor | 1:1 mentorship and career guidance | 🤝 |
| Digital Ambassador | Social media and online engagement | 📱 |
| Community Builder | Events and local gatherings | 🏠 |
| Giving Advocate | Philanthropy and giving campaigns | 💝 |
Upon completing step 5:
Alumni can have one of four champion-related statuses:
| Status | Criteria | Visual Indicator |
|---|---|---|
| Completed Champion | ChampionSignup with status: 5 |
Blue border |
| Signup In Progress | ChampionSignup with status: 1-4 |
Yellow border |
| Manual Prospect | prospect_status: 1 without signup |
Sky blue border |
| No Champion Activity | No signup, prospect_status: 0 |
Gray border |
Staff can manually flag alumni as prospects from the alumni show page:
The alumni search supports 6 status filters:
/champion_signups)Features:
Shows:
Staff can link signups to alumni records by:
# Required environment variables
MAILGUN_API_KEY=your_api_key
MAILGUN_DOMAIN=email.bualum.co
CHAMPION_ADMIN_EMAILS=alumni@belmont.edu,development@belmont.edu
MAILER_FROM_ADDRESS="Belmont University Alumni <noreply@email.bualum.co>"
MAILER_REPLY_TO="Belmont University Alumni <alumni@belmont.edu>"
Welcome Email (to champion)
Admin Notification (to staff)
# Preview emails
http://localhost:3000/rails/mailers/champion_signup_mailer
# Send test emails
rails champion_signup:test_emails
Task: rails champion_signups:import[/path/to/file.csv]
Expected columns (case-insensitive):
Features:
From /champion_signups index, click “Export CSV”.
Export includes:
Duplicates are identified by matching BUID (when multiple signups are linked to the same alumni record).
Visual indicators:
When duplicates are merged:
created_at)deleted_at set)Web Interface:
Rake Tasks:
rails champion_signups:stats # Statistics with duplicate counts
rails champion_signups:duplicates # Detailed duplicate info
rails champion_signups:merge_all_duplicates # Merge all
rails "champion_signups:merge_buid[B00123456]" # Merge specific BUID
create_table "champion_signups" do |t|
t.string "first_name"
t.string "last_name"
t.string "graduation_year"
t.string "email"
t.string "phone"
t.string "zip_code"
t.string "street"
t.string "city"
t.string "state"
t.string "interests"
t.jsonb "answers", default: {}
t.string "result_role"
t.string "selected_role"
t.string "lifestage_interest"
t.jsonb "belonging_categories", default: []
t.text "belonging_note"
t.string "vocation"
t.boolean "vocation_help", default: false
t.string "buid"
t.datetime "deleted_at"
t.integer "status", default: 0, null: false
t.timestamps
end
enum status: {
started: 1,
completed_questions: 2,
selected_role: 3,
interests: 4,
zip_code: 5
}
Valid keywords (comma-separated):
almost-alumni — Current seniorsyoung-alumni — 0-10 years since graduatingtower-society — 50+ years since graduatingfamilies — Alumni with young childrenother — Any other interests# ChampionSignup
belongs_to :alumni, primary_key: :buid, foreign_key: :buid, optional: true
# Alumni
has_many :champion_signups, foreign_key: :buid, primary_key: :buid
enum prospect_status: { not_prospect: 0, prospect: 1 }
| Controller | Domain | Purpose |
|---|---|---|
Champions::ChampionSignupsController |
External | Public signup wizard |
ChampionSignupsController |
Internal | Staff management |
# External (champions.bualum.co)
constraints subdomain: 'champions' do
scope module: 'champions' do
resources :signups, controller: 'champion_signups'
root to: "champion_signups#new"
end
end
# Internal (lookup.bualum.co)
resources :champion_signups do
collection do
get :export_csv
get :duplicates
post :merge_duplicates
post :merge_all_duplicates
end
end
| Service | Purpose |
|---|---|
ChampionSignupMerger |
Handles duplicate merging logic |
Csv::ChampionSignupExporter |
Generates CSV exports |
| Mailer | Method | Purpose |
|---|---|---|
ChampionSignupMailer |
welcome_email |
Send to new champion |
ChampionSignupMailer |
admin_notification |
Notify staff |
rails champion_signups:stats # Show statistics
rails champion_signups:import[file.csv] # Import from CSV
rails champion_signups:import_july_2025 # Import specific file
rails champion_signups:duplicates # Show duplicate info
rails champion_signups:merge_all_duplicates # Merge all duplicates
Legacy data may have full descriptions instead of keywords. Cleanup tasks:
rails data:preview_lifestage_interest_cleanup # Preview changes
rails data:cleanup_lifestage_interest # Apply cleanup
rails data:cleanup_lifestage_interest_production # Production-safe version
Mapping:
| Legacy Format | Current Keyword |
|—————|—————–|
| “Almost Alumni (current seniors)” | almost-alumni |
| “Young Alumni (0-10 years since graduating)” | young-alumni |
| “Tower Society (50 or more years)” | tower-society |
| “Belmont Family” or “Families” | families |
| Unknown values | other |
The Champion Portal (planning/champion-portal/) will expand this system with:
When implemented, the signup flow will integrate with the new portal, and champions will gain access to authenticated features beyond the initial signup.