365videos - ((exclusive))
def check_streak(user, today): last_watch = user.last_watch_day if last_watch == today - timedelta(days=1): user.streak += 1 elif last_watch == today: pass # already watched today else: user.streak = 0 return user.streak This paper is released under CC BY-NC 4.0 for educational use.
| Component | Implementation | |-----------|----------------| | | Video N+1 becomes available only after watching video N (or at 00:00 UTC daily) | | Streak tracking | Redis or Firebase counter with grace periods (e.g., 24–48h skip forgiveness) | | Recommendation suppression | No algorithmic rabbit holes — only “today’s video” and “previous days” | | Cross-device sync | Web, mobile, TV — resume from last watched day | | Analytics | Daily active users (DAU) / stickiness, drop-off by day number, completion heatmaps | 365videos
“It feels like a morning ritual, not homework.” — Pilot participant 6. Challenges & Mitigations | Challenge | Mitigation Strategy | |-----------|---------------------| | Dropout around day 30–50 | Introduce “catch-up weekends” or skip bank (3 skips per month) | | Content fatigue | Vary format (talking head, animation, screencast, interview) | | Life events | Pause/resume functionality, streak freeze tokens | | Production cost | Use AI video generation or user-generated content for long tails | | Diminishing novelty | Thematic arcs (e.g., month 1: basics, month 2: advanced) | 7. Comparison with Existing Models | Model | Release cadence | Retention driver | Best for | |-------|----------------|------------------|-----------| | Netflix (binge) | All at once | Immediate gratification | Entertainment | | YouTube algorithmic | Continuous, chaotic | Novelty & recommendations | Discovery | | 365videos | Fixed daily | Habit + streak + anticipation | Behavior change, learning | | MOOCs (weekly) | Weekly modules | Deadline-driven | Academic credit | def check_streak(user, today): last_watch = user
