It worked on my machine. Now what?
cli.fail started as a small museum of developer disasters: Friday deployment confidence, a missing environment file, an unreasonable dependency tree. The terminal animations turn familiar moments into short, shareable performances.
The daily challenge adds a different reason to visit. A visitor reads a broken workflow, chooses a command, and gets an explanation of what the tool is actually doing. The joke opens the door; the useful detail gives it somewhere to go.
One problem. A few plausible commands.
The initial collection contains eleven authored scenarios spanning Git, npm, Docker and Bash tools. Each states the relevant environment and gives four choices. The answer explains the underlying behavior, with official documentation available for a closer look.
The scenario constraints matter. A Git question distinguishes staged changes from working files; a shell question explains when a wildcard expands. A correct answer should follow from the information on the page, rather than from guessing what an invisible environment contains.
A shared day, without a shared database.
The daily selection follows UTC and a versioned challenge bank. Local results belong to that date and version, while practice remains available separately. A visitor can return to the day’s result without a user account.
The score is a personal record in the browser, not a verified global ranking. Sharing leaves out the answer so another person can take the same challenge. Those choices keep a small static project useful without adding a service it does not need.
A terminal interface with no terminal behind it.
Commands are displayed as text; the browser never runs them in a shell. Static challenge pages make the scenario and its explanation available at ordinary URLs, while client-side state handles selection, feedback and the daily result.
The authored content is separate from the interaction logic. That makes a new scenario reviewable as a question, four choices, a correct answer and an explanation, instead of burying the teaching material inside the animation code.
Let people operate the experience.
The interface uses ordinary controls with visible states and feedback. Practice gives people room to learn after the daily attempt. The disaster museum retains pause and replay controls, with reduced-motion preferences revealing the complete joke without a wait.
Clipboard support is a convenience rather than the only way to share. The responsive layout keeps the command choices readable on a phone, and the result remains useful even when someone does not want an animation.
A small piece of the web worth returning to.
The project combines a playful surface with an intentionally limited system: authored questions, a deterministic day, browser-local results and static pages. There is no account wall or invented leaderboard behind the score.
I like how the writing and engineering meet here. A precise command-line question, a fair explanation and a complete interaction can make a very small product feel considered.