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.
daily video, habit formation, microlearning, retention, video streaming, spaced repetition, engagement metrics 1. Introduction Video dominates internet traffic (82% by 2025, Cisco-style estimates), yet most video courses suffer from the “syllabus drop-off”: 70–90% of learners never finish a multi-hour course. The 365videos model inverts traditional design by imposing daily atomic units — each video is 3–15 minutes, released exactly once per day for 365 consecutive days. 365videos
| 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 | def check_streak(user, today): last_watch = user