Champion Portal Development Sub-Phase 1.13
Status: ✅ COMPLETE (January 8, 2026) Estimated Effort: 2–3 weeks
Focus: Champion-facing community pages and discoveryPrerequisites: Phase 1.12 (Community Foundation) complete
Related Documents:
- 1.12-community-foundation.md — Schema this builds on
- ../../development/DESIGN-GUIDELINES.md — Visual standards
- ../../JOBS-TO-BE-DONE.md — Job C1: Find My Tribe, Job C9: Feel Like I Belong
Completed: January 8, 2026
1.13.1 Community Show Page:
/communities/:slugcommunity_view event)1.13.2 Communities Index:
/communities/communities?explore=true) grouped by type1.13.3 Dashboard My Communities Widget:
1.13.4 Navigation Updates:
| New nav order: Communities | Directory | Messages | [Name] |
Tests: All 1661 tests pass (0 failures, 0 errors)
Controllers:
app/controllers/cp/communities_controller.rb — index, show, members, exploreapp/controllers/cp/dashboard_controller.rb — load_my_communities methodViews:
app/views/cp/communities/index.html.erb — My Communities + Suggestionsapp/views/cp/communities/show.html.erb — Community landing pageapp/views/cp/communities/explore.html.erb — Browse all communitiesapp/views/cp/communities/members.html.erb — Members listapp/views/cp/communities/members.turbo_stream.erb — Load more paginationapp/views/cp/dashboard/show.html.erb — My Communities widgetNavigation:
app/views/layouts/champions/_header.html.erb — Desktop nav updateapp/views/layouts/champions/_mobile_nav.html.erb — Mobile nav updateTests:
test/controllers/cp/communities_controller_test.rb — 21 teststest/controllers/cp/dashboard_controller_test.rb — 8 testsPhase 1.13 brings communities to life with landing pages that Champions can visit, browse, and discover. This is where the “emergent community” model becomes visible to users.
After Phase 1.13, Champions will be able to:
/communities to browse all their communities/communities/:slug to see a community’s landing pagePhase 1.12 created communities in the database. Phase 1.13 makes them real to Champions by giving them a place to go.
Champion logs in
│
▼
┌──────────────────────────────┐
│ Dashboard │
│ ┌──────────────────────────┐ │
│ │ 🏘️ My Communities │ │
│ │ • Nashville District │ │
│ │ • Music Business │ │
│ │ • Phi Mu │ │
│ │ View All → │ │
│ └──────────────────────────┘ │
└──────────────────────────────┘
│
▼ (clicks "Nashville District")
┌──────────────────────────────┐
│ Nashville District │
│ 127 Champions │
│ │
│ [Members] [News] [Events] │
│ │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │
│ │ 👤 │ │ 👤 │ │ 👤 │ │ 👤 │ │
│ │Jane│ │John│ │Sara│ │Mike│ │
│ └────┘ └────┘ └────┘ └────┘ │
│ │
│ Latest News │
│ • Nashville Mixer Recap │
│ │
│ Upcoming Events │
│ • Jan 15: Alumni Mixer │
└──────────────────────────────┘
Job C1: Find My Tribe
“When I move to a new city or want to expand my Belmont network, I want to find other Champions/alumni nearby, so I can build meaningful local connections.”
Job C9: Feel Like I Belong
“When I’m far from Nashville or years past graduation, I want to feel part of something bigger…”
Community landing pages are where Champions find their tribe and feel belonging.
| Decision | Choice | Rationale |
|---|---|---|
| Community index layout | Champion’s communities → Suggested → “Explore All” link | Not grouped by type; most champions only have 1-2 per type |
| “Explore All” page | Grouped by type for discovery | Only the browse-all view groups by type |
| Member display | Grid of profile cards (paginated, verified only) | Same privacy rules as Directory |
| News/Events on landing | Only community-scoped content (not global) | With “See all News/Events” links |
| Empty community handling | Simplified view focused on invite CTA | Primary goal: get them to invite others |
| Dashboard widget | Replace “Community Snapshot” entirely | My Communities becomes the primary widget |
| Navigation order | Communities | Directory | Messages | [Name] | Logo links to Dashboard; Events/News placement TBD |
| Sub-Phase | Name | Est. Time |
|---|---|---|
| 1.13.1 | Community Show Page | 3–4 days |
| 1.13.2 | Communities Index Page | 2–3 days |
| 1.13.3 | Dashboard Widget | 1–2 days |
| 1.13.4 | Navigation Updates | 1 day |
| 1.13.5 | Testing & Polish | 2–3 days |
# Champion Portal (config/routes.rb - champions subdomain)
constraints(SubdomainConstraint.new('champions')) do
scope module: 'cp' do
resources :communities, only: [:index, :show] do
member do
get :members
end
end
end
end
# app/controllers/cp/communities_controller.rb
module Cp
class CommunitiesController < Cp::BaseController
before_action :authenticate_cp_champion!
before_action :set_community, only: [:show, :members]
def index
@my_communities = current_cp_champion.communities.active.includes(:district)
@explore_communities = Cp::Community.active
.where.not(id: @my_communities.pluck(:id))
.order(:name)
.limit(20) if params[:explore]
end
def show
@members = @community.champions
.verified
.includes(:alumni)
.order(created_at: :desc)
.page(params[:page])
.per(12)
@news = Cp::NewsPost.published
.for_community(@community)
.recent
.limit(3)
@events = Cp::Event.published
.for_community(@community)
.upcoming
.chronological
.limit(3)
end
def members
@members = @community.champions
.verified
.includes(:alumni)
.order(created_at: :desc)
.page(params[:page])
.per(24)
respond_to do |format|
format.html
format.turbo_stream
end
end
private
def set_community
@community = Cp::Community.active.find_by!(slug: params[:id])
end
end
end
┌─────────────────────────────────────────────────────────────┐
│ 🏘️ My Communities View All → │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 📍 Nashville District 127 members │ │
│ │ Your local Bruin community │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🎵 Music Business 42 members │ │
│ │ College of Entertainment & Music Business │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 🏛️ Phi Mu 18 members │ │
│ │ Greek Life │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
/communities)┌─────────────────────────────────────────────────────────────────────────┐
│ My Communities │
│ Find your people in communities you belong to │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ [My Communities] [Explore All] │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ 📍 Districts │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Nashville │ │ │ │ │ │
│ │ 127 members │ │ │ │ │ │
│ │ Your local Bruins │ │ │ │ │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │
│ │
│ 🎓 Colleges │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Music Business │ │ Nursing │ │
│ │ 42 members │ │ 28 members │ │
│ │ Entertainment &...│ │ College of Health │ │
│ └───────────────────┘ └───────────────────┘ │
│ │
│ 🏛️ Organizations │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Phi Mu │ │ SAAC │ │ Towering Trad. │ │
│ │ 18 members │ │ 12 members │ │ 8 members │ │
│ │ Greek Life │ │ Athletics │ │ Campus Tradition │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │
│ │
│ 💼 Industries │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Music Industry │ │ Healthcare │ │
│ │ 35 members │ │ 22 members │ │
│ │ Professional │ │ Professional │ │
│ └───────────────────┘ └───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
/communities/nashville)┌─────────────────────────────────────────────────────────────────────────┐
│ ← Back to Communities │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ╭───────────────────────────────────────────────────────────────────╮ │
│ │ 📍 Nashville District │ │
│ │ │ │
│ │ 127 Champions in your local community │ │
│ │ │ │
│ │ Your fellow Bruins in the Nashville metro area. Connect with │ │
│ │ neighbors, attend local events, and build lasting friendships. │ │
│ ╰───────────────────────────────────────────────────────────────────╯ │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ 👥 Members View All → │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ [Photo] │ │ [Photo] │ │ [Photo] │ │ [Photo] │ │
│ │ Jane Doe │ │ John Smith│ │ Sara Lee │ │ Mike Chen │ │
│ │ '15 Music │ │ '18 Nurs. │ │ '20 Bus. │ │ '12 Eng. │ │
│ │ Business │ │ │ │ │ │ │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ 📰 Latest News │
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Nashville Alumni Mixer Recap Jan 5 │ │
│ │ Over 50 Bruins gathered at the annual Nashville mixer... │ │
│ │ Read More → │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ 📅 Upcoming Events │
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ JAN Spring Networking Social │ │
│ │ 20 Belmont University • 6:00 PM [RSVP →] │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ FEB Nashville Bruin Brunch │ │
│ │ 8 The Pancake Pantry • 10:00 AM [RSVP →] │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 📍 Boise District │
│ 2 Champions │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 🌱 This community is just getting started! │ │
│ │ │ │
│ │ You're one of the first Bruins here. Help grow your │ │
│ │ local community by inviting other Belmont alumni. │ │
│ │ │ │
│ │ [Invite Alumni to Boise] │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ 👥 Current Members │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ [Photo] │ │ [Photo] │ │
│ │ You! │ │ Other │ │
│ │ │ │ Person │ │
│ └────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
| Feature | Description |
|---|---|
/communities index |
List Champion’s communities grouped by type |
/communities/:slug show |
Community landing page with members, news, events |
/communities/:slug/members |
Full paginated member list |
| Dashboard widget | “My Communities” showing top communities |
| Community cards | Reusable card component for listings |
| Member cards | Profile preview cards in member grid |
| News section | Community-targeted news on landing page |
| Events section | Community-targeted events on landing page |
| Empty states | Encouraging messages for sparse communities |
| Navigation | Add “Communities” to main nav |
| Feature | Reason | Target Phase |
|---|---|---|
| Dynamic community creation | Separate logic phase | Phase 1.14 |
| Community discussion boards | Phase 3 feature | Phase 3 |
| Community admin/moderation | Future need | Phase 2+ |
| Community invitations | Needs invite system | Backlog |
| Community search | Nice-to-have | Backlog |
| Community notifications | Needs notification system | Phase 2+ |
/communities shows all communities Champion belongs to/communities/:slug shows community landing page# test/controllers/cp/communities_controller_test.rb
class Cp::CommunitiesControllerTest < ActionDispatch::IntegrationTest
test "index requires authenticated champion"
test "index shows champion's communities"
test "index groups communities by type"
test "index explore tab shows other active communities"
test "show displays community landing page"
test "show displays community members"
test "show displays community news"
test "show displays community events"
test "show returns 404 for inactive community"
test "members paginates members list"
test "members responds to turbo_stream"
end
# test/helpers/cp/communities_helper_test.rb
class Cp::CommunitiesHelperTest < ActionView::TestCase
test "community_type_icon returns correct icon"
test "community_type_label returns human-readable label"
test "community_member_count_text handles singular and plural"
end
# test/views/cp/communities_test.rb
class Cp::CommunitiesViewTest < ActionDispatch::IntegrationTest
test "index renders community cards"
test "show renders member grid"
test "show renders news section"
test "show renders events section"
test "show renders empty state for sparse community"
end
After completing Phase 1.13:
app/controllers/champions/roadmap_controller.rb statusdocs/features/champion_portal/| Question | Answer | Date |
|---|---|---|
| Show all communities or just Champion’s? | Champion’s by default, “Explore” tab for others | Jan 7, 2026 |
| How to display members? | Grid of profile cards, paginated | Jan 7, 2026 |
| What content on landing page? | Members, news, events for that community | Jan 7, 2026 |
| Dashboard widget behavior? | Show top 3-5 communities | Jan 7, 2026 |
| Empty community handling? | Encouraging message + invite CTA | Jan 7, 2026 |
app/controllers/cp/communities_controller.rbapp/views/cp/communities/index.html.erbapp/views/cp/communities/show.html.erbapp/views/cp/communities/members.html.erbapp/views/cp/communities/members.turbo_stream.erbapp/views/cp/communities/_community_card.html.erbapp/views/cp/communities/_member_card.html.erbapp/views/cp/communities/_news_section.html.erbapp/views/cp/communities/_events_section.html.erbapp/views/cp/communities/_empty_state.html.erbapp/views/cp/dashboard/_communities_widget.html.erbapp/helpers/cp/communities_helper.rbtest/controllers/cp/communities_controller_test.rbtest/helpers/cp/communities_helper_test.rbconfig/routes.rb — Add community routesapp/views/cp/dashboard/show.html.erb — Add communities widgetapp/views/shared/_cp_nav.html.erb — Add Communities nav link