DEV Community

Ado Daniel Nj
Ado Daniel Nj

Posted on

418: I'm a Teapot

April Fools Challenge Submission ☕️🤡

This is a submission for the DEV April Fools Challenge

What I Built

418: I'm a Teapot (and You're a Bad Gamer)

A high performance, SEO-optimized, AI integrated gaming platform built solely to ensure the player
never wins.

You control a teapot. You run. You jump. You die. On every death, Gemini analyzes your failure and
adjusts the physics to be slightly more insulting next time. There is no finish line. There never was.

Key features:

  • Endless Runner — one button to jump. Except it's not always that button.
  • Rotating Controls — the jump key silently changes every run. The HUD shows last run's key. This is documented nowhere.
  • Input Gaslighting — every ~10th jump has a 200ms delay. Wall contact permanently degrades your grip. Mash the keyboard and gravity drops to near zero — the teapot floats away.
  • AI Vibe Check — on every death, your stats (jumps, wall hugs, rage mashes) are sent to Gemini. It returns new physics values and a personalized roast. Gets meaner over time.
  • Global Loss Leaderboard — powered by Firebase. Tracks deaths, not wins. "You are ranked #3 most pathetic globally."
  • Fake Patch Notes — v2.4.1 changelog includes "Fixed bug where player could win (unintended)" and "Removed finish line (was causing confusion)."
  • Fake Loading Tips — "Tip: There is no finish line. There never was."
  • Broken Controls Page — /controls documents the controls incorrectly. Never acknowledged.
  • Support Ticket System — after 5 deaths a "Report a Bug" button appears. Submit a complaint, receive HTTP 418 and a Gemini-generated gaslighting response.
  • Share Your Shame — one click shares your death count and AI roast to X, Facebook, WhatsApp, Telegram, Reddit, or LinkedIn.
  • 418 Redirect — survive 90 seconds and get redirected to /418: {"status": 418, "message": "I'm a Teapot", "reason": "Server is currently brewing. Your victory has been lost in transit."}

Demo

Run here

Code

GitHub repo

How I Built It

Stack:

  • Next.js 16 — frontend + API routes. The game UI and the AI backend live in the same codebase, deployed as a single container.
  • Phaser 3 — 2D game engine running in a dynamically imported client component (no SSR). Handles physics, collision, procedural obstacle generation, and all the gaslighting mechanics.
  • Gemini 1.5 Flash (primary) + Groq / Llama 3.3 70B (fallback) — on every death, player action data is POSTed to /api/judge. The AI returns a JSON payload with new physics values (gravity, speed, jumpForce, mass, drag, delayEvery) and a personalized roast. The prompt explicitly instructs it to get meaner with each death.
  • Firebase Firestore — global leaderboard. Every death writes a record. Rank is calculated by counting sessions with fewer deaths.
  • Google Cloud Run — the entire app is Dockerized and deployed as a single container. Because some problems deserve enterprise-grade infrastructure.

The physics are real. jumpForce / mass determines jump height. drag affects mid-air deceleration.
Gemini can increase your mass to make your jumps pathetically short, or drop gravity to 50 so the
teapot floats off screen. The game is genuinely engineered to be bad.

The support ticket endpoint returns HTTP 418 by design. This is not a bug. It is the only honest thing
in the entire codebase.

Prize Category

Best Ode to Larry Masinter, The player character is a teapot. The win condition redirects to a raw
418 JSON response. The support system returns 418. The game is named after RFC 2324. Larry Masinter
wrote a joke in 1998 that has never been removed from the spec. This game is its spiritual successor.
It is completely useless. It took real engineering to make it this bad.

Best Google AI Usage. Gemini is not a hint system or a chatbot, it is a passive-aggressive game
designer that watches you fail and makes the next run worse. It also generates your death roast and
your support ticket rejection. Every interaction with the AI is designed to make you feel worse about
yourself. This is the correct use of AI.

Top comments (0)