I shipped 888 commits last year. My GitHub profile showed 0.
Not because I wasn't coding. I was writing code every single day, reviewing PRs, closing issues, shipping features. But all of it went to private repos. And GitHub doesn't count private repo activity on your public profile.
For almost 4 years, my contribution graph was a graveyard of gray squares.
Why this matters
Recruiters spend about 6 seconds on a GitHub profile. Gray squares = "doesn't code." Green squares = "active developer." It's shallow, but it's real. I've had recruiters literally ask me why my profile looked inactive.
GitHub does have a "show private contributions" toggle in settings. But all it does is show anonymous green squares. No repo names, no PRs, no context. And if your company uses a separate org account (like mine does), those contributions don't show up on your personal profile at all.
What I built
I wrote a bash CLI called greens that mirrors your private work activity to a public repo without exposing any code.
Here's what it does:
- Scans your work repos locally (never modifies them)
- Extracts commit timestamps for your email
- Creates empty commits with matching timestamps in a public mirror repo
- Pushes to GitHub
That's it. No code leaves your machine. The mirror repo contains empty commits with only timestamps.
If you have gh CLI set up, it also picks up PRs, reviews, and issues.
Install
brew install yuvrajangadsingh/greens/greens
Run greens and the setup wizard walks you through configuration. Takes about 2 minutes.
How it works under the hood
The key insight is that GitHub's contribution graph only cares about commit timestamps, not content. So greens creates a bare cache of each repo (no working tree, no blobs), extracts dates where your email authored a commit, and creates empty commits with those exact timestamps in the mirror.
Your Work Repos → Bare Cache → Public Mirror
(untouched) (no blobs) (empty commits with your dates)
Your source repos can be on GitHub, GitLab, Bitbucket, or self-hosted. greens scans the local clone, not the remote.
My results
After setting it up:
- 11 repos tracked
- 888 commits mirrored
- 158 active days visible on my graph
- Auto-syncs daily via launchd
Before: dead profile that made me look like I stopped coding in 2022.
After: an accurate picture of my actual work.
"Isn't this gaming the system?"
Fair question. I'm not faking open source contributions. The mirror repo clearly says what it is. I'm just making private work volume visible on a platform that ignores it by default.
If your company has a policy against this, check before using it. But most devs I've talked to have the same frustration: their profile doesn't reflect their actual output.
Set up automation
Once greens is working, automate it. On macOS, a launchd plist that runs greens daily at midnight keeps everything in sync without thinking about it. On Linux, a cron job does the same thing.
# cron example
0 0 * * * /usr/local/bin/greens
Try it
brew install yuvrajangadsingh/greens/greens
greens
Or clone manually:
git clone https://github.com/yuvrajangadsingh/greens.git
cd greens && bash setup.sh
GitHub repo: github.com/yuvrajangadsingh/greens
Star it if you find it useful. Issues and PRs welcome.
I'm Yuvraj, building AI systems at August. I write about dev tools and open source when I'm not debugging LLM pipelines at 2 AM.
Top comments (0)