alumni_lookup

Champion Signup System (Legacy)

Canonical sources: Portal philosophy, posture, and language live in /docs/planning/champion-portal/source/README.md.
Use these sources (including CHRIST_CENTERED__IDENTITY_STATEMENT.md) when writing specs or user-facing copy. Prefer quoting/paraphrasing over inventing new language.

Version: 2.0 (in progress)
Last Updated: June 2026 (Phase 19.5 complete; final revision pass pending)
Status: 🔄 v2.0 Public Flow In Progress (19.1–19.5 complete; full phase closeout pending revisions) — Staff Management & Data Pipeline Active


v2.0 Relaunch (Phase 19 — In Progress)

The public signup flow is being rebuilt as Public::ChampionSignupsController at alumnichampions.com/sign-up. This is a clean rebuild in a new public/ namespace — not a restoration of the deleted Champions::ChampionSignupsController.

Phase 19 Status

Sub-phase Deliverable Status
19.1 Schema (7 new columns), domain-isolated routes, controller shell, landing page âś… Complete
19.2 Steps 1–3 shipped with simplified UX + ordered flow scaffolding ✅ Complete
19.3 Role hub (pick or quiz), question1–7, quiz_results, light interests, role-celebrating confirmation ✅ Complete
19.4 Full affinities (browse/search), submission, mailer âś… Complete
19.5 Confirmation page, staff queue integration âś… Complete

Current Public Flow (as shipped)

alumnichampions.com/sign-up currently supports this ordered path:

  1. who_you_are — creates ChampionSignup + session tracking
  2. belmont_experience — belmont_background free text
  3. affinities (Groups/Interests) — full affinity browse/search (affinity_codes) + optional affinity_other + optional belonging_note
  4. where_you_are (Job) — employment status + company/job/industry capture
  5. role — role hub: three paths (take quiz, I already know, skip for now); direct-pick role cards reveal on demand; recommended role highlighted after a quiz
  6. question1–question7 (optional) — one quiz question per page; answers persisted to champion_signups.answers
  7. quiz_results — recommended role + blend breakdown; Confirm this role finalizes directly (no role-hub hop); Select a different role returns to the role hub
  8. confirmation (GET /sign-up/:id) — celebrates the chosen role (seal + title + description); no-role follow-up CTA is token-gated for secure continuation

Source tagging and submission mailers are now live in 19.4 (source = "champion_signup_v2", welcome + admin notifications via deliver_later).

Per approved scope, this flow does not capture lifestage_interest or belonging_categories.

Phase 19.3 Follow-up UX/Robustness Notes

Phase 19.5 Completion Notes

Phase 19 Closeout Status

Phase 19 is complete (19.1–19.6 shipped, 2026-06-09).

Additional Columns Added After 19.1

New Schema Columns (Phase 19.1)

Added to champion_signups:

Routes (Phase 19.1)

See full spec: docs/planning/champion-flow/SPEC.md


⚠️ Retirement Notice (Phase 17.3)

The original public signup wizard at /signups/new was removed in Phase 17.3. Legacy URLs now 301 redirect to /champions. The v2.0 relaunch (Phase 19) is the active rebuild.

What Was Removed in Phase 17.3

What Is Still Active

Profile Pre-fill Field Mapping (to_champion_attributes)

ChampionSignup Field Cp::Champion Field Notes
first_name first_name  
last_name last_name  
maiden_name college_last_name  
zip_code zip_code  
city city  
state state  
street or address street_address street preferred, falls back to address
phone phone  
final_role_key primary_role Selected role (or quiz result)

All values are compact_blank — nil and empty strings are excluded.


Historical documentation below — The following sections document the original system for reference.


Overview

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
belmontalum.com External Alumni Multi-step signup wizard
alumnilookup.com Internal Staff Management, review, exports

Table of Contents

  1. Public Signup Flow
  2. Champion Status & Prospect Management
  3. Staff Management Interface
  4. Email Notifications
  5. CSV Import/Export
  6. Duplicate Detection & Merging
  7. Data Model
  8. Technical Implementation

1. Public Signup Flow

Wizard Steps

The signup process at belmontalum.com 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

Champion Roles

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 đź’ť

Completion

Upon completing step 5:


2. Champion Status & Prospect Management

Status Types

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

Prospect Management

Staff can manually flag alumni as prospects from the alumni show page:

Filtering Options

The alumni search supports 6 status filters:


3. Staff Management Interface

Champion Signups Index (/champion_signups)

Features:

Individual Signup View

Shows:

BUID Linking

Staff can link signups to alumni records by:


4. Email Notifications

Configuration

# Required environment variables
MAILGUN_API_KEY=your_api_key
MAILGUN_DOMAIN=mail.belmontalum.com
CHAMPION_ADMIN_EMAILS=alumni@belmont.edu,development@belmont.edu
MAILER_FROM_ADDRESS="Belmont Alumni Network <noreply@mail.belmontalum.com>"
MAILER_REPLY_TO="Belmont University Alumni <alumni@belmont.edu>"

Email Types

Welcome Email (to champion)

Admin Notification (to staff)

Testing

# Preview emails
http://localhost:3000/rails/mailers/champion_signup_mailer

# Send test emails
rails champion_signup:test_emails

5. CSV Import/Export

Import

Task: rails champion_signups:import[/path/to/file.csv]

Expected columns (case-insensitive):

Features:

Export

From /champion_signups index, click “Export CSV”.

Export includes:


6. Duplicate Detection & Merging

Detection

Duplicates are identified by matching BUID (when multiple signups are linked to the same alumni record).

Visual indicators:

Merging Logic

When duplicates are merged:

  1. Most recent signup becomes the target (by created_at)
  2. Older signups are soft deleted (deleted_at set)
  3. Data preservation rules:
    • Contact info: use most recent
    • Text fields: combine with date tags
    • Structured data: use most recent

Merging Tools

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

7. Data Model

ChampionSignup Table

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

Status Enum

enum status: {
  started: 1,
  completed_questions: 2,
  selected_role: 3,
  interests: 4,
  zip_code: 5
}

Lifestage Interest Values

Valid keywords (comma-separated):

Alumni Association

# 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 }

8. Technical Implementation

Controllers

Controller Domain Purpose
Champions::ChampionSignupsController External Public signup wizard
ChampionSignupsController Internal Staff management

Routes

# External (belmontalum.com)
constraints subdomain: 'champions' do
  scope module: 'champions' do
    resources :signups, controller: 'champion_signups'
    root to: "champion_signups#new"
  end
end

# Internal (alumnilookup.com)
resources :champion_signups do
  collection do
    get :export_csv
    get :duplicates
    post :merge_duplicates
    post :merge_all_duplicates
  end
end

Services

Service Purpose
ChampionSignupMerger Handles duplicate merging logic
Csv::ChampionSignupExporter Generates CSV exports

Mailers

Mailer Method Purpose
ChampionSignupMailer welcome_email Send to new champion
ChampionSignupMailer admin_notification Notify staff

Rake Tasks

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

Data Cleanup

Lifestage Interest Normalization

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 |


Future Development

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.