Status: Complete (2.1-2.4)
Estimated Effort: 4-6 weeks
Prerequisites: Phase 1 Complete (Community Foundation 1.12-1.14)Related Documents:
- ../README.md — Phase Index
- ../../JOBS-TO-BE-DONE.md — Jobs L1-L4 (CLC Jobs)
- ../../features/02-PROFILE-MANAGEMENT.md — Profile features
Completed: January 2026
community_id column to cp_clc_assignments tableregion_id column[cp_champion_id, community_id]assigned_at and assigned_by_id tracking columnsGET /champions/community_leaders — List all CL assignmentsportal_admin or admin rolecan_portal_admin and can_support_respond added to User modelportal_admin role continues to workcan_support_respond)portal_admin)portal_admin)portal_admin, member_count >= 7)portal_admin)portal_admin)/champions/communities/:id/members to identify potential community leaders/champions/community_leaders/newdb/migrate/*_add_community_id_to_clc_assignments.rbdb/migrate/*_remove_region_id_from_clc_assignments.rbapp/controllers/champions/community_leaders_controller.rbapp/views/champions/community_leaders/index.html.erbapp/views/champions/community_leaders/new.html.erbtest/controllers/champions/community_leaders_controller_test.rbapp/services/action_items_service.rbapp/helpers/action_items_helper.rbapp/javascript/controllers/action_items_controller.jsapp/views/layouts/_action_items.html.erbtest/services/action_items_service_test.rbassigned_at and assigned_by fieldsPhase 2 establishes the Community Leadership infrastructure — enabling Champions to serve as Community Leaders (CLs) for any community type (district, college, major, affinity, industry, or custom).
| Feature | Description |
|---|---|
| CL Role Assignment | Admin interface to assign Champions as Community Leaders |
| CL Portal Features | Moderation queue, community management, member insights |
| CL-Staff Communication | Channel for CLs to communicate with Engagement Team |
| Model Refactor | `ClcAssignment` links to `Community` instead of `Region` |
Community Leaders need to be in place before user-generated content (Phase 3: Discussion Boards) goes live. This ensures:
Job L1: Know My Community’s Champions
“When I’m leading Champions in my community, I want to see who’s active and engaged, so I can coordinate effectively and welcome new members.”
Job L4: Keep Discussions On-Track
“When discussions go off-topic or problematic content appears, I want to moderate effectively, so I can maintain a welcoming community.”
Phase 1 built the Community infrastructure (types, membership, suggestions). But there’s no formal role for leading a community. Champions can join communities, but nobody is empowered to:
Phase 2 creates this leadership layer.
| Term | Definition | Usage |
|---|---|---|
| CL | Community Leader | Singular: “The CL for Nashville District” |
| Community Leaders | Multiple CLs | Plural: “Community Leaders in the Southeast” |
| CLC | Community Leadership Council | Collective: “The CLC meets monthly” |
| Community | Any group type | district, college, major, affinity, industry, custom |
Goal: Update `ClcAssignment` to link to `Community` instead of `Region`.
Current State: ```ruby
belongs_to :region # ❌ Links to Region belongs_to :champion, class_name: “Cp::Champion” ```
Target State: ```ruby
belongs_to :community, class_name: “Cp::Community” belongs_to :champion, class_name: “Cp::Champion”
```
Deliverables:
Deferred:
Goal: Enable Lookup Portal admins to assign Champions as Community Leaders.
Location: Lookup Portal → Champion Admin → Community Leaders
UI Features Implemented:
Deferred:
Wireframe: ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ Community Leadership Assignments │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ [+ Assign New CL] │ │ │ │ Filter: [All Communities ▼] [All Roles ▼] [Search…] │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Nashville District │ │ │ │ ├─ Jane Smith (Leader) — Assigned 2024-01-15 │ │ │ │ ├─ John Doe (Co-Leader) — Assigned 2024-03-22 │ │ │ │ └─ [Add CL] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ College of Music │ │ │ │ ├─ Sarah Johnson (Leader) — Assigned 2024-02-10 │ │ │ │ └─ [Add CL] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ Communities without CLs: [View 47 communities →] │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ```
Deliverables:
Note: CL Portal Features (Leadership Dashboard, Moderation Queue, Member Management) were implemented alongside Phase 3 Discussion Boards. See DISCUSSION_MODERATION.md for implementation details.
Goal: Give Community Leaders tools to manage their communities within the Champion Portal.
New Section: “My Leadership” in Champion Portal navigation
Features:
Wireframe (CL Dashboard): ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ My Leadership │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 🏙️ Nashville District [Leader] │ │ │ │ │ │ │ │ 127 Members • 12 joined this month • 89% verified │ │ │ │ │ │ │ │ [View Members] [Welcome New] [Community Settings] │ │ │ │ │ │ │ │ ⏳ Moderation Queue: Nothing to review │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 🎵 Music Business Major [Co-Leader] │ │ │ │ │ │ │ │ 45 Members • 3 joined this month • 100% verified │ │ │ │ │ │ │ │ [View Members] [Welcome New] │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ```
Deliverables:
Note: Implemented as Support Threads via
Cp::SupportThreadsController. See Phase 3.5 for moderation escalation integration.
Goal: Give Community Leaders a direct channel to the Engagement Team.
Use Cases:
Implementation Options:
Option A: Dedicated Message Thread
Option B: Support Form
Recommendation: Start with Option A for simplicity. Upgrade to Option B if volume warrants.
Deliverables:
| Column | Type | Change |
|---|---|---|
| `id` | bigint | — |
| `champion_id` | bigint FK | — |
| REMOVED | ||
| `community_id` | bigint FK | NEW |
| `role` | integer (enum) | NEW (0: leader, 1: co_leader, 2: moderator) |
| `assigned_at` | datetime | NEW |
| `assigned_by_id` | bigint FK | NEW (references `users`) |
| `created_at` | datetime | — |
| `updated_at` | datetime | — |
```ruby
class Cp::ClcAssignment < ApplicationRecord belongs_to :champion, class_name: “Cp::Champion” belongs_to :community, class_name: “Cp::Community” belongs_to :assigned_by, class_name: “User”, optional: true
enum role: { leader: 0, co_leader: 1, moderator: 2 }
validates :champion_id, uniqueness: { scope: :community_id }
scope :leaders, -> { where(role: [:leader, :co_leader]) } scope :for_community, ->(community) { where(community: community) } end
class Cp::Community < ApplicationRecord has_many :clc_assignments, dependent: :destroy has_many :community_leaders, through: :clc_assignments, source: :champion
def has_leadership? clc_assignments.exists? end
def primary_leader clc_assignments.leaders.order(:assigned_at).first&.champion end end
class Cp::Champion < ApplicationRecord has_many :clc_assignments, dependent: :destroy has_many :led_communities, through: :clc_assignments, source: :community
def community_leader? clc_assignments.exists? end
def leads?(community) clc_assignments.where(community: community).exists? end end ```
ClcAssignment belongs to Community (not Region)ClcAssignment role enum works correctlyCommunity#has_leadership? returns correct booleanChampion#community_leader? returns correct booleanChampion#leads?(community) returns correct booleanAfter completing Phase 2:
roadmap_controller.rb with Phase 2 statusdocs/features/champion_portal/COMMUNITY-LEADERSHIP.md| Question | Status | Notes |
|---|---|---|
| Multiple CLs per community? | ✅ Yes | Co-leadership supported |
| CL assignment UI location? | ✅ Lookup Portal | Champion Admin section |
| CL-Staff communication method? | TBD | Option A (message thread) vs Option B (form) |
| Existing Region assignments? | TBD | Data migration strategy needed |
| Document | Purpose |
|---|---|
| ../../JOBS-TO-BE-DONE.md | Jobs L1-L4 (CLC needs) |
| ../../development/DESIGN-GUIDELINES.md | UI patterns |
| ../phase-1/1.12-community-foundation.md | Community model foundation |
| ../phase-3/README.md | Discussion Boards (depends on this phase) |
This phase creates the leadership infrastructure required for Phase 3 (Discussion Boards) and beyond.