⚠️ PLANNING DOCUMENT - This describes features that are NOT YET IMPLEMENTED.
Phase: This feature is planned for Phase 4 of Champion Portal development.
Direct messaging enables Champions to connect one-on-one, separate from public discussion boards.
Full messaging system built into the Champion Portal.
Pros:
Cons:
Features:
Messages sent through email, with addresses masked.
Pros:
Cons:
Flow:
noreply@champions.bualum.coLeverage existing LinkedIn messaging.
Pros:
Cons:
Phase 4: Start with Option B (Masked Email Relay)
Future: Evolve to Option A (In-Portal) if demand warrants
| View | Description |
|---|---|
| All Messages | Complete conversation list |
| Unread | Conversations with unread messages |
| Archived | Conversations moved to archive |
┌─────────────────────────────────────────────────────────────┐
│ [Photo] Champion Name [Close] │
├─────────────────────────────────────────────────────────────┤
│ │
│ [Their message bubble - left aligned] 11:30 AM │
│ │
│ [Your message bubble - right aligned] 11:32 AM │
│ │
│ [Their message bubble - left aligned] 11:35 AM │
│ │
├─────────────────────────────────────────────────────────────┤
│ [Attachment] [Type your message... ] [Send] │
└─────────────────────────────────────────────────────────────┘
Respect profile settings:
# Masked email approach
class ChampionMessage < ApplicationRecord
belongs_to :sender, class_name: 'Champion'
belongs_to :recipient, class_name: 'Champion'
after_create :send_notification_email
private
def send_notification_email
ChampionMailer.new_message(self).deliver_later
end
end
# Generate reply token for threading
def reply_token
"msg-#{id}-#{SecureRandom.hex(8)}"
end
# Conversation
- id
- created_at
- updated_at
# ConversationParticipant
- conversation_id
- champion_id
- last_read_at
- archived (boolean)
# Message
- conversation_id
- champion_id (sender)
- body
- read_at
- deleted_at
- created_at