How scoring works
The short version: you're scored against your own baseline, not raw totals โ so everyone's starting fitness level and schedule is accounted for.
1. Consistency โ the main score
You earn 1 point per day you log at least 20 minutes of any activity. That's it โ the primary score is just "did you show up," not how hard or how long.
Consistency score = qualifying days ร (1 + streak multiplier)
2. The streak multiplier โ two rest requirements, not one
On top of the base score, each qualifying day in a row adds +10% to your multiplier. Two separate rules keep that from just rewarding never stopping:
๐ฅ Day streak, capped at 4. Go more than 4 days in a row without a rest day (any day under 20 minutes), and the multiplier doesn't just stop climbing โ it locks at 0. You can keep logging workouts just fine, they just won't earn a streak bonus until you actually take a rest day. One rest day clears it and a fresh streak starts building from your next qualifying day.
๐ชซ Deload gate, every 3 weeks. A "deload week" is a completed week with fewer than 4 active days. Go more than 3 weeks in a row without one, and the multiplier is forced to 0 regardless of your day-to-day rest habits โ even a perfect day streak won't score โ until you take an actual lighter week.
The leaderboard shows which state you're in: a streak count with its bonus %, or "๐ด rest needed" / "๐ชซ deload needed" if a gate has closed.
3. Bonus โ your adaptive personal target, per activity
You can log workouts in whatever unit fits the activity โ minutes, miles, or sessions, chosen per entry, not locked to one thing for your whole account. Each unit you use gets its own adaptive target, tracked separately:
target = max(your floor, 1.05 ร your average over the last 3 weeks in that unit)
So if you've been averaging 100 minutes/week, next week's minutes target is about 105 โ a small, steady push rather than a fixed goal that's either too easy or too hard. The floor only applies to your default unit (set at signup, changeable by the admin) โ any other unit you try starts adapting from scratch. A unit you only try once doesn't keep dragging your average down after you stop using it; each unit's tracking just stops where your use of it stops.
Each week scores up to 150 points per unit: hitting exactly 100% of target = 100 points, capped at 1.5ร target = 150 points so one huge week can't carry your whole season. Your overall bonus score is the average across every (week, unit) combination you've been active in โ not a running total โ so joining partway through, or trying a second activity, doesn't put you at a disadvantage.
4. ๐ญ Hot dog equivalents โ just for fun
Your logged minutes are converted to a rough calorie estimate (~7 kcal/minute) and then to "hot dogs" (250 kcal each). This is display only โ it doesn't affect your score at all. It's also a rough estimate, not a real measurement โ different activities burn calories at very different rates.
Total score
Total = consistency score + bonus score
Consistency is the primary driver and grows the longer you participate; the bonus is a smaller weekly modifier layered on top. That weighting is deliberate โ showing up matters more than hitting an exact number.
This is a first pass at the streak/rest rules and still being tuned โ if something about it feels off in practice, that's useful signal, not a bug report. See the full project spec in SPEC.md if you want the original brief this was built from.