blame-me
v1.0.0
Published
A fun CLI tool that analyzes your Git repo and tells you who is responsible for the mess π¬
Maintainers
Readme
blame-me π¬
A fun CLI tool that analyzes your Git repository and tells you who is responsible for the mess.
Features
| Feature | What it does |
|---|---|
| π Commit overview | Total commits + per-author breakdown with progress bars |
| π₯ Top 3 contributors | Ranked leaderboard with medals π₯π₯π₯ |
| π¬ Message quality | Detects lazy commit messages (fix, temp, final, etc.) |
| π₯ --roast flag | Personalised humorous commentary on your contribution |
| --dir <path> | Point at any repo, not just cwd |
Build & Install
1. Install dependencies
npm install2. Compile TypeScript β JavaScript
npm run buildThis runs tsc and emits compiled files to dist/.
3. Test locally with npm link
npm linkThis creates a global symlink so you can run blame-me from any directory:
blame-me # analyse the current repo
blame-me --roast # adds a humorous personal roast
blame-me --dir ~/my-project # analyse a different repo
blame-me --version # print version
blame-me --help # usage info4. Unlink when done
npm unlink -g blame-meProject Structure
blame-me/
βββ src/
β βββ index.ts # CLI entry point (commander wiring + display)
β βββ git.ts # Git command helpers (spawnSync wrappers)
β βββ analyzer.ts # Pure data analysis (no I/O, no side-effects)
β βββ utils.ts # Display helpers (progress bar, roast generator)
βββ dist/ # Compiled JS output (after npm run build)
βββ package.json
βββ tsconfig.jsonDesign decisions
- Synchronous (
spawnSync) git execution β this is a one-shot interactive CLI, so blocking is fine and makes the code much simpler than async chains. - chalk v4 β used because chalk v5 is ESM-only, incompatible with
"module": "commonjs"in tsconfig. - Zero business logic in
index.tsβ all data crunching lives inanalyzer.ts(pure functions), display utilities inutils.ts. Easy to test independently.
Example Output
π blame-me Β· Git Responsibility Analyzer
ββββββββββββββββββββββββββββββββββββββββββββ
π Commit Overview
Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
Total commits : 238
π¬ You wrote 52% of this repo
ββββββββββββββββββββ 124 commits
π₯ Top Contributors
Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
π₯ Yash (you) 52% 124 commits
ββββββββββββββββββββ
π₯ Alice 31% 74 commits
ββββββββββββββββββββ
π₯ Bob 17% 40 commits
ββββββββββββββββββββ
π¬ Commit Message Quality
Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·
π Worst commit message : "final final fix"
π© Lazy commits found : 17 / 238 total
ββββββββββββββββββββββββββββββββββββββββββββ
π₯ ROAST MODE
Archaeology called β they found your 'final final fix' commit and they're confused too π¦
ββββββββββββββββββββββββββββββββββββββββββββ
blame-me v1.0.0 Β· no blame, just data π