We've all been there. Standup starts in 3 minutes. The bug is still there.
The deploy failed. The PR has been sitting unreviewed for two days.
And "I don't know" just isn't professional enough.
So I built Excusify. Pick your situation, pick your tone, get a believable excuse.
Copy it. Send it. Survive the standup.
Live at excusify.vercel.app - open source, MIT licensed.
Pick from 6 built-in engineering situations, choose a tone, and get a context-aware excuse
instantly. Every generated excuse gets its own shareable URL. There's an Excuse of the Day
that's seed-based — same excuse for everyone on the same date.
72 hand-written excuses across all situation + tone combinations. Plus AI generation for
anything custom via the Claude API.
6 built-in situations:
| Situation | For when... |
|---|---|
| Bug still exists | It was working on your machine |
| Missed deadline | Scope was definitely not creep |
| Production went down | It was like that when you got there |
| PR not reviewed | You've only pinged them 4 times |
| Deploy failed | CI/CD had other plans |
| Missed standup | You were "in deep focus work" |
4 tones:
| Option | How |
|---|---|
| Download PNG | |
Tweet-ready image card via html2canvas |
|
| Twitter / LinkedIn | |
| One-click native share compose | |
| Slack / WhatsApp | |
| Pre-formatted deep links | |
| Copy as Slack block | |
| Paste-ready bold + quoted format | |
| Shareable URL | |
| Unique link per excuse encoded in URL params |
The built-in 72 excuses cover the classics. But for truly unique situations —
the cursed legacy codebase, the third rebase in a day, the meeting that could have been
an email — there's a custom input that hits the Claude API and generates a fresh,
believable excuse on the spot.
Star your best excuses, they persist to localStorage
. History shows your last 10
with a "show all" toggle. Cap prevents localStorage bloat.
Space
to generate, C
to copy, F
to favorite, S
/T
to focus pickers,
?
to show the shortcuts overlay. Full keyboard flow if you never want to touch the mouse.
Subtle synthesized audio feedback on generate via the Web Audio API.
No external sound files — generated entirely in-browser.
Seed-based daily excuse — same one for every user on the same date.
Opens up a shared experience: "did you see today's excuse?"
Tracks total excuses generated across all sessions.
A completely useless metric that somehow feels important.
| Tool | Purpose |
|---|---|
| React + Vite | Component architecture and build tooling |
| Tailwind CSS | Utility-first styling, dark/light theme |
| html2canvas | DOM-to-PNG export for share cards |
| Web Audio API | Synthesized sound effects, no external files |
| Claude API | AI-powered custom excuse generation |
| Vercel | Deployment |
git clone https://github.com/byllzz/excusify.git
cd excusify
npm install
npm run dev
Got a better excuse? Found a tone that's missing? Open a PR.
Good first contributions:
situations.js
and excuses.js
tones.js
git checkout -b feat/your-feature
git commit -m "feat: your short description"
git push origin feat/your-feature
Keep PRs focused — one feature or fix per PR.
If Excusify saved your standup - a ⭐ on the GitHub repo
means a lot. Drop your favourite generated excuse in the comments below!