Imoutotv Hot -
To prevent outliers from exploding the list:
+-----------------+ +-------------------+ +-------------------+
| Event Streams | ---> | Hot Score Job | ---> | Redis SortedSet |
| (likes, watches,| | (Spark/Flink) | | hot:global |
| comments, etc) | +-------------------+ +-------------------+
| |
| v
| +-------------+
| | API Server |
| +-------------+
| |
| +----------------------+ |
+-> | Moderation Service | <---+ |
+----------------------+ | |
v
+---------------+
| Front‑end UI |
+---------------+
The Hot Score Job consumes the event stream, joins with the videos table (metadata + moderation status), applies the decay & weighting, writes the top‑N scores to Redis. The API Server reads from Redis, applies per‑creator caps, and returns JSON to the UI. imoutotv hot
| Platform | Layout | Key Elements |
|----------|--------|--------------|
| Mobile | Horizontal carousel (swipeable) + “Refresh” icon on the right. | • Large thumbnail (16:9).
• Small overlay badge: 🔥 1.2k
• Creator avatar in bottom‑left corner. |
| Desktop | 3‑column grid (responsive). | • Hover reveals play button & stats.
• Rank number in top‑left corner (1️⃣, 2️⃣…). |
| Personal Slice | Tabbed under “Hot” → “For You”. | Same layout, but badge color changes to blue to indicate personalization. |
| Accessibility | Alt text for thumbnails, focus order, ARIA labels for “Refresh”. | All interactive elements keyboard‑navigable. | The Hot Score Job consumes the event stream,
Design hand‑off: Export the above as a Figma file with two artboards (mobile & desktop). Use the existing ImoutoTV design system (primary color #FF3B30, secondary #1A1A1A). | Platform | Layout | Key Elements |
personalScore(v, u) = hotScore(v) * similarity(u, v)