██████╗ ███████╗██╗ ██╗ ███████╗██╗ ██╗ ██████╗██╗ ██╗███████╗███████╗
██╔══██╗██╔════╝██║ ██║ ██╔════╝╚██╗██╔╝██╔════╝██║ ██║██╔════╝██╔════╝
██║ ██║█████╗ ██║ ██║ █████╗ ╚███╔╝ ██║ ██║ ██║███████╗█████╗
██║ ██║██╔══╝ ╚██╗ ██╔╝ ██╔══╝ ██╔██╗ ██║ ██║ ██║╚════██║██╔══╝
██████╔╝███████╗ ╚████╔╝ ███████╗██╔╝ ██╗╚██████╗╚██████╔╝███████║███████╗
╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝
A P I — "The deployment was imminent when I wrote this."
Zero-dependency Node.js CLI that generates developer excuses calibrated to the situation. Because the bug was already there. You just made it visible.
# Run instantly with npx (no install needed)
npx dev-excuse-api
# Or install globally
npm install -g dev-excuse-apinpx dev-excuse-api
# DNS propagation.npx dev-excuse-api --for "missed deadline"
# The estimation was based on the wrong Fibonacci number.
npx dev-excuse-api --for "bug in production"
# It worked in staging. Staging is a liar.
npx dev-excuse-api --for "build failing"
# A cosmic ray flipped a bit in the CI server.
npx dev-excuse-api --for "late to standup"
# I was in a deep merge conflict with my alarm clock.
npx dev-excuse-api --for "code review feedback"
# That complexity is load-bearing.
npx dev-excuse-api --for "pr not reviewed"
# The diff is only 2000 lines. It's really just one logical change.npx dev-excuse-api --for "missed deadline" --formal
# Due to unforeseen technical circumstances beyond our immediate control,
# the estimation was based on the wrong fibonacci number. We are actively
# investigating and expect resolution by EOD. We apologize for any
# inconvenience this may have caused and appreciate your continued patience.npx dev-excuse-api --for "build failing" --slack
# hey so a cosmic ray flipped a bit in the ci server :shrug:npx dev-excuse-api --git
# chore: delay explained — dns propagation
npx dev-excuse-api --for "late to standup" --git
# fix: late because i was in a deep merge conflict with my alarm clocknpx dev-excuse-api --count 3
# 1. DNS propagation.
# 2. Caching issue.
# 3. The database was being 'creative'.
npx dev-excuse-api --for "bug in production" --slack --count 2
# 1. hey so it worked in staging. staging is a liar :computer:
# 2. fyi qa approved it. in their defense, it was friday :fire:--for value |
Excuse pool |
|---|---|
missed deadline |
16 excuses |
bug in production |
16 excuses |
build failing |
16 excuses |
late to standup |
14 excuses |
code review feedback |
14 excuses |
pr not reviewed |
11 excuses |
| (anything else) | 18 general excuses |
Fuzzy matching — "the build is broken" matches build failing, etc.
| Flag | Description |
|---|---|
--for "situation" |
Situation-specific excuse |
--formal |
Corporate email format |
--slack |
Casual Slack message format |
--git |
Git commit message format |
--count N |
Generate N excuses (max 50) |
--help, -h |
Show help |
- Zero dependencies — single
index.jswith shebang - Node.js 14+ compatible
- Under 300 lines
- github.com/NickCirv — more tools that solve problems nobody asked about but everybody needs
"The feature works in my time zone."
PRs welcome! If you have a funny idea or improvement:
- Fork the repo
- Create your feature branch (
git checkout -b feature/amazing-idea) - Commit your changes
- Push to the branch (
git push origin feature/amazing-idea) - Open a Pull Request
Found a bug? Open an issue.
If this made you mass-exhale through your nose, mass-hit that star button.