180 lines
3.4 KiB
Markdown
180 lines
3.4 KiB
Markdown
# Phase 5: Community & Engagement - Implementation Guide
|
|
|
|
**Duration**: Weeks 20-23 | **Complexity**: Medium | **Team Size**: 2-3 devs
|
|
|
|
## Executive Summary
|
|
|
|
Phase 5 deepens viewer-creator connections through interactive features like polls, reactions, emotes, and channel points. Moderators gain tools to manage growing communities.
|
|
|
|
---
|
|
|
|
## Phase 5 Goals
|
|
|
|
- Live interactive features (polls, reactions)
|
|
- Emote system with custom channel emotes
|
|
- Channel currency (points/channel tokens)
|
|
- Advanced moderation tools
|
|
- Community channels and roles
|
|
|
|
---
|
|
|
|
## Key Features
|
|
|
|
### 1. Live Polls (30% implementation time)
|
|
```
|
|
During stream:
|
|
┌─────────────┐
|
|
│ Poll (2min) │
|
|
│─────────────│
|
|
│ ▢ Option A │
|
|
│ ▢ Option B │
|
|
│ ▢ Option C │
|
|
└─────────────┘
|
|
Results visible in real-time
|
|
```
|
|
|
|
### 2. Reactions & Emotes (30%)
|
|
```
|
|
Schema:
|
|
- GlobalEmotes (😀, 👍, ❤️, etc)
|
|
- ChannelEmotes (custom per channel)
|
|
- UserReaction timestamps
|
|
- Reaction counts per message
|
|
|
|
Features:
|
|
- Click emote to add reaction
|
|
- See who reacted
|
|
- Hover emote name
|
|
```
|
|
|
|
### 3. Channel Points (25%)
|
|
```
|
|
Viewers earn points:
|
|
- 1 point per minute watching
|
|
- Bonus for chat, follows
|
|
- Spend on channel rewards
|
|
|
|
Creator sets rewards:
|
|
- "Shoutout" - 500 points
|
|
- "Song request" - 1000 points
|
|
- "Color chat message" - 200 points
|
|
```
|
|
|
|
### 4. Moderation Tools (15%)
|
|
```
|
|
Features:
|
|
- Timeout users (1h, 1d, etc)
|
|
- Ban/unban users
|
|
- Delete messages batch
|
|
- Auto-mod profanity
|
|
- Mod dashboard
|
|
```
|
|
|
|
---
|
|
|
|
## Implementation Details
|
|
|
|
### Database Models
|
|
```prisma
|
|
model Poll {
|
|
id String @id
|
|
streamId String
|
|
question String
|
|
options String[] // [A, B, C ...]
|
|
votes Map<String, Int> // {optionId: count}
|
|
duration Int // minutes
|
|
active Boolean
|
|
createdAt DateTime
|
|
}
|
|
|
|
model Emote {
|
|
id String @id
|
|
name String
|
|
image String
|
|
isGlobal Boolean
|
|
channelId String?
|
|
|
|
byteSize Int // <100KB
|
|
uses Int
|
|
}
|
|
|
|
model ChannelPoints {
|
|
id String @id
|
|
userId String
|
|
channelId String
|
|
balance Int
|
|
|
|
@@unique([userId, channelId])
|
|
}
|
|
|
|
model ChannelReward {
|
|
id String @id
|
|
channelId String
|
|
name String
|
|
cost Int // points
|
|
active Boolean
|
|
}
|
|
|
|
model Moderation {
|
|
id String @id
|
|
channelId String
|
|
actionType String // TIMEOUT, BAN, DELETE, etc
|
|
targetUserId String
|
|
duration Int? // For timeouts
|
|
reason String?
|
|
moderatorId String
|
|
timestamp DateTime
|
|
}
|
|
```
|
|
|
|
### APIs
|
|
```
|
|
Polls:
|
|
- POST /api/streams/:id/poll (create)
|
|
- GET /api/streams/:id/poll (current)
|
|
- POST /api/polls/:id/vote
|
|
|
|
Emotes:
|
|
- GET /api/emotes (global)
|
|
- GET /api/channels/:id/emotes
|
|
- POST /api/channels/:id/emotes (upload)
|
|
- POST /api/messages/:id/reactions
|
|
|
|
Channel Points:
|
|
- GET /api/channels/:id/points (balance)
|
|
- GET /api/channels/:id/rewards (claim reward)
|
|
- POST /api/rewards/:id/claim
|
|
|
|
Moderation:
|
|
- POST /api/channels/:id/mod/timeout
|
|
- POST /api/channels/:id/mod/ban
|
|
- GET /api/channels/:id/mod/logs
|
|
```
|
|
|
|
---
|
|
|
|
## Success Metrics
|
|
|
|
- 80%+ streams use interactive features
|
|
- 1M+ emote reactions per month
|
|
- 50k+ channel point transactions
|
|
- 500k+ polls responses
|
|
- 95% moderation response time <10s
|
|
|
|
---
|
|
|
|
## Timeline
|
|
|
|
| Week | Tasks |
|
|
|------|-------|
|
|
| 20 | Polls, reactions |
|
|
| 21 | Emotes system |
|
|
| 22 | Channel points |
|
|
| 23 | Moderation tools, polish |
|
|
|
|
---
|
|
|
|
**Completion**: Week 23 (by June 6, 2025)
|
|
**Next**: Phase 6 - Gaming & Esports
|
|
|
|
See [PHASE_6_GAMING.md](PHASE_6_GAMING.md)
|