How it works
Ship code. Move your body. Same day, every day. Every number on the board is verified through GitHub and Strava. Nothing is typed in by hand.
A day
A day is a calendar date in your own timezone. You can change it in the dashboard, and the last 60 days are recomputed when you do.
Sweat Day
You moved. At least one Strava activity that day is:
- recorded by a device, a GPS track, or a trainer (not entered manually);
- at least 20 minutes of moving time;
- not flagged by Strava.
Any sport counts: walks, rides, yoga, lifting, swimming, whatever moves you.
Ship Day
You shipped. At least one of these happened that day:
- A push with commits authored by you that change at least 10 lines of real code. Docs, lockfiles, logs, env files, build output, generated and minified files don't count. One push counts once, however many commits it holds.
- A merged pull request you authored, any size.
- A published release you authored.
Commits are dated by the moment GitHub tells us about the push, never by the commit's own timestamp, which can be edited. Bots never count.
Which repositories count
- Public repositories count by default. Nothing to install and no access to your code: we read your public GitHub activity every 15 minutes.
- Private repositories are opt-in. Install the Ship & Sweat GitHub App and select only the repositories you want counted. GitHub grants us read access to the diffs of those repositories so we can count lines; we store the line counts and discard everything else. Private repository names stay hidden on your profile unless you turn them on. Uninstall at any time from your GitHub settings.
Double Day
A Sweat Day and a Ship Day on the same calendar day. That's the only thing we count.
Streaks and rest days
- Your streak is the number of consecutive Double Days. Today is in progress until your local midnight, so it never breaks a streak on its own.
- One missed day per week (Monday to Sunday) is a rest day: it shows in grey, isn't counted, and doesn't break the streak.
- A second miss in the same week breaks the streak. Two missed days in a row always break it, even across a week boundary.
- A streak can't start or end on a rest day.
Leaderboards
Streak ranks by current streak. This month ranks by Double Days in the current calendar month. All-time ranks by longest streak ever. Ties go to more Double Days this month, then more Double Days overall, then whoever joined first.
Anti-cheat
- Device-recorded activities only; manual entries are ignored.
- 20-minute minimum, and Strava-flagged activities are excluded.
- Commits are attributed to push time, not commit time.
- 10 real lines minimum, with docs, lockfiles and build output excluded.
- Bots and other people's commits never count toward your day.
- Every counted day shows its proof on your public profile. Anyone can report a profile.
Your Strava data
We show other people only whether you moved on a given day, and your streak counts. Distance, duration, pace, routes, sport, activity names and photos are never shown to anyone but you, never stored beyond what's needed to apply the rules above, and never sent to any AI system. Disconnecting Strava purges everything we derived from it within the hour.
Powered by Strava