DEV Community

Cover image for I built TeaCaptcha | A completely useless CAPTCHA that asks users to prove they are a teapot.
Harish Kotra (he/him)
Harish Kotra (he/him)

Posted on

I built TeaCaptcha | A completely useless CAPTCHA that asks users to prove they are a teapot.

April Fools Challenge Submission ☕️🤡

This is a submission for the DEV April Fools Challenge

What I Built

I built TeaCaptcha, a completely useless CAPTCHA that asks users to prove they are a teapot.

Most CAPTCHAs are designed to prove you are not a robot. TeaCaptcha solves the far less urgent problem of confirming whether a visitor is a legitimate, standards-adjacent, enterprise-compliant teapot.

The catch is that every path ends exactly where it should:

418 I'm a teapot

The app presents a dead-serious verification flow with fake compliance steps, suspicious audit dashboards, ceremonial trust badges, and a Beverage Tribunal that rejects every applicant with increasing levels of bureaucratic disappointment.

It also includes a bunch of unnecessary upgrades that made the joke dramatically worse in the best way:

  • Premium UX Overhaul: A gorgeous dark mode palette with glassmorphism, glowing emerald gradients, and animated toast notifications.
  • Terrible Acoustics: HTML5 Web Audio API OscillatorNode that forces you to listen to a terrible, rising teapot whistle during calibration.
  • Slamming Rejection: Reaching the final result triggers an animated, massive diagonal red "DENIED" stamp.
  • A coffee ancestry trap for applicants with espresso sympathies.
  • A Beverage Tribunal appeal flow.
  • A Certificate of Official Rejection download.
  • Viral rejection copy dynamically generated as a personalized Twitter/X Intent URL.
  • Fake metrics like Spout Confidence, Brew Intent, and Pour Compliance.

Demo

TeaCaptcha walks applicants through four important and medically unnecessary checks:

  • Select every image containing a kettle, even though the image set is clearly hostile to success
  • Type the authentic whistle of a teapot
  • Complete thermal composure calibration by holding still like an enterprise vessel
  • Declare beverage allegiance and avoid coffee-adjacent thinking

After all that, the backend returns a real HTTP 418 response with a fresh denial reason such as:

  • "Spout symmetry drift exceeds RFC-compliant tolerances."
  • "You seem emotionally coffee-adjacent."
  • "Model output: likely teapot, insufficient vibes."

Live demo: https://teacaptcha.vercel.app/

This is how it work

Code

Repository: https://github.com/harishkotra/teacaptcha

The app is basically an authentication portal for beverage identity fraud, which no one asked for and no one should fund.

How I Built It

I kept the tech intentionally small and the joke intentionally overbuilt:

  • A tiny Node.js server serves the app and exposes a real /api/verify route.
  • The verify route always returns HTTP 418 I'm a Teapot and fully supports the custom BREW method, including mandatory HTCPCP headers (Accept-Additions: *, Safe-To-Brew: false) to honor Larry Masinter.
  • The response payload utilizes the Gemini API to dynamically generate rejection reasons acting as an unhinged bureaucratic Beverage Tribunal.
  • The frontend treats the process with absolute seriousness while blinding you with completely unnecessary glowing CSS animations, CSS jitter effects, and a custom audio whistle.

Ironically, building useless software still benefits from useful engineering.

To make the joke land, the app had to feel internally consistent:

  • the frontend had to look polished
  • the API had to return a real 418
  • the copy had to stay deadpan
  • the interaction had to be smooth enough that failure felt official

That contrast is what made it funny for me.

Prize Category

I wanted the "Google AI" angle to be part of the joke instead of replacing the joke.

So the product includes a Google AI Verification pathway that actually hooks into gemini-2.5-flash using the @google/genai SDK.

The system prompt forces Gemini to act as an unhinged, deeply bureaucratic Beverage Tribunal. Instead of relying on a static joke pool, the AI dynamically generates completely novel, ridiculous HTTP 418 rejection reasons, tribunal next-actions, and certification badges on the fly.

No matter how advanced the AI system becomes and how many unique reasons it comes up with, it is still solving a completely useless problem.

This also fits Best Ode to Larry Masinter because the entire app is built around an aggressively overcommitted interpretation of 418 I'm a teapot, HTCPCP behavior, and ceremonial beverage protocol nonsense.

Screenshots

Example Output 1

Example Output 2

Example Output 3

Example Output 4

Example Output 5

Top comments (0)