Champion Portal Development Phase 1B
Estimated Effort: 2–3 weeks
Focus: Activity Dashboard, Core Metrics InfrastructurePrerequisites: Phase 1 complete, Phase 1A recommended
Related Documents:
- ../JOBS-TO-BE-DONE.md — Job E2: See the Big Picture
- PHASE-6.md — Advanced reporting (builds on this)
Phase 1B establishes the metrics infrastructure and activity dashboard. This ensures we can measure impact from day one and grow the dashboard as new features are added.
After Phase 1B, the Engagement Team can:
Design Principle: Every subsequent phase adds its metrics to this dashboard. We don’t build features without building their measurements.
From JOBS-TO-BE-DONE.md:
Job E2: See the Big Picture
“When I’m reporting to leadership or planning strategy, I want to see Champion activity metrics at a glance, so I can demonstrate value and identify opportunities.”
Importance: 🔥 Critical
Current Satisfaction: ❌ Very Low
Opportunity Score: 🎯 High
Why not wait for Phase 6?
Development Principle:
Build the measurement tool with the feature.
Every phase should include its corresponding metrics integration:
- Phase 2 (Events) → Event submission and attendance metrics
- Phase 3 (Boards) → Post and comment metrics
- Phase 4 (Messaging) → Message volume metrics
- Phase 5 (Advanced) → Search and visit metrics
Phase 1B has 3 sub-phases:
| Sub-Phase | Name | Est. Time |
|---|---|---|
| 1B.1 | Activity Tracking Infrastructure | 2–3 days |
| 1B.2 | Dashboard UI | 3–4 days |
| 1B.3 | Exports & Scheduled Reports | 2–3 days |
Goal: Create the data infrastructure to track Champion activities.
Deliverables:
cp_activity_events table for event sourcingCp::ActivityRecorderEvent Types (Initial):
| Event | Description | Recorded |
|——-|————-|———-|
| login | Champion logged in | On sign_in |
| profile_view | Champion viewed another profile | On profile#show |
| profile_edit | Champion updated their profile | On profile#update |
| directory_search | Champion searched directory | On directory#index with query |
| contact_sent | Champion sent a message | On message create |
| contact_received | Champion received a message | On message create |
Database Schema:
create_table :cp_activity_events do |t|
t.references :champion, null: false, foreign_key: { to_table: :cp_champions }
t.string :event_type, null: false
t.jsonb :metadata, default: {}
t.datetime :occurred_at, null: false
t.timestamps
end
add_index :cp_activity_events, [:event_type, :occurred_at]
add_index :cp_activity_events, [:champion_id, :event_type, :occurred_at]
ActivityRecorder Service:
# Usage: Cp::ActivityRecorder.record(champion, :login)
# Usage: Cp::ActivityRecorder.record(champion, :profile_view, target_id: other_champion.id)
Goal: Create a staff-facing dashboard showing Champion Portal metrics.
Deliverables:
Dashboard Location:
Recommend Option A: Staff already use Lookup Portal for Champion management. Add a “Champion Portal Metrics” section there.
Metrics Cards (MVP): | Metric | Description | |——–|————-| | Total Champions | All verified Champions | | Verified This Month | New verifications | | Active This Week | Champions with any activity | | Monthly Active | Champions active in last 30 days | | Directory Searches | Total searches this period | | Messages Sent | Contact messages this period |
Chart: Activity Trend Line chart showing daily activity count over selected period.
Table: City Breakdown | City | Champions | Active (30d) | Messages Sent | |——|———–|————–|—————|
Recent Activity Feed:
• Sarah J. (Nashville) updated her profile — 2 hours ago
• Mike T. (Atlanta) searched the directory — 3 hours ago
• Lisa R. (Dallas) sent a message to Tom K. — 5 hours ago
UI Design Notes:
Goal: Enable metric exports and optional email summaries.
Deliverables:
Export Formats:
Weekly Digest Email:
Subject: Champion Portal Weekly Summary — Dec 2-8, 2025
Hi [Name],
Here's this week's Champion Portal activity:
📊 Key Metrics
• 5 new Champions verified (127 total)
• 89 Champions active this week (70% engagement)
• 156 directory searches
• 23 messages sent between Champions
🏙️ Most Active Cities
1. Nashville (34 active)
2. Atlanta (18 active)
3. Dallas (12 active)
🌟 Highlights
• First Champion verified in Portland, OR
• Highest daily activity: Tuesday (47 logins)
View full dashboard: [Link]
This framework ensures each subsequent phase adds its metrics:
| Metric | Event Type |
|——–|————|
| Events submitted | event_submitted |
| Events approved | event_approved |
| Event RSVPs | event_rsvp |
| Stories submitted | story_submitted |
| Stories published | story_published |
| Metric | Event Type |
|——–|————|
| Posts created | post_created |
| Comments added | comment_added |
| Reactions given | reaction_added |
| Metric | Event Type |
|——–|————|
| In-app messages sent | message_sent |
| Conversations started | conversation_started |
| Message read | message_read |
test/models/cp/activity_event_test.rb)test/services/cp/activity_recorder_test.rb)After completing Phase 1B:
Cp::ActivityEvent to ../../development/MODEL_RELATIONSHIPS.md| Question | Status | Notes |
|---|---|---|
| Dashboard in Lookup or Champion Portal? | Recommend Lookup | Staff already use Lookup Portal |
| Real-time or cached metrics? | Cached | Aggregate hourly, real-time for recent feed |
| Who receives weekly digest? | TBD | Engagement Team + configurable list |
Per JOBS-TO-BE-DONE.md Job C10 (Feel Recognized):
This dashboard also enables recognition features:
These could be surfaced:
Principle: Always look for ways to recognize contribution. Little nudges matter.