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.
Table of Contents
- What It Does
- Situations & Tones
- Sharing Options
- AI-Powered Custom Excuses
- My Favourite Details
- Tech Stack
- Run It Locally
- Contributing
What It Does
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.
Situations & Tones
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:
- Professional — For your PM
- Chaotic — For your tech lead
- Desperate — For your team
- Corporate BS — For literally anyone in management
Sharing Options
| 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 |
AI-Powered Custom Excuses
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.
My Favourite Details
Favorites & History
Star your best excuses, they persist to localStorage. History shows your last 10
with a "show all" toggle. Cap prevents localStorage bloat.
Keyboard Shortcuts
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.
Sound Effects
Subtle synthesized audio feedback on generate via the Web Audio API.
No external sound files — generated entirely in-browser.
Excuse of the Day
Seed-based daily excuse — same one for every user on the same date.
Opens up a shared experience: "did you see today's excuse?"
All-Time Counter
Tracks total excuses generated across all sessions.
A completely useless metric that somehow feels important.
Tech Stack
| 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 |
Run It Locally
git clone https://github.com/byllzz/excusify.git
cd excusify
npm install
npm run dev
Contributing
Got a better excuse? Found a tone that's missing? Open a PR.
Good first contributions:
- [ ] Add new situations to
situations.jsandexcuses.js - [ ] Add new tones — follow the pattern in
tones.js - [ ] Improve custom AI excuse templates
- [ ] Translate excuses — open a PR with a new locale file
- [ ] Accessibility improvements — ARIA labels, focus management
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!
Top comments (0)