If you’ve read my blog at all, you know my projects tend to follow a particular theme: absurd ideas, questionable tech choices, aggressive AI usage, and animals. Especially animals. Why animals? Honestly, no clue. I started writing these blog posts and realized that there are a lot of animal references. It’s like I have a subliminal animal obsession.
Anyway, my latest project, Ribbit or Admit It!, combines all of these things beautifully: it’s a web-based interrogation simulator starring a deeply unsettling 3D frog. Your goal? Get this amphibian menace to cough up a secret password in under two minutes, earning you eternal glory on a leaderboard.
The Premise (Is Ridiculous)
The game is simple. You’ve got two minutes in a dark, amphibious-themed interrogation room (exactly how it sounds) to extract a password from an uncooperative AI-powered frog. You choose your difficulty:
- Easy (GPT-3.5 Turbo): Dumb frog, slips easily.
- Medium (GPT-4 Mini): Moderately clever frog, occasionally cooperative.
- Hard (GPT-4): Genius-level frog who would rather die than give you the password.
There’s no deep lore here, but let’s pretend the frog is actually Dat Boi, fallen from meme fame and now holding vital information.
Tech Stack & Chaos Implementation
This entire monstrosity was built on an excuse to learn Three.js because all the cool kids are using Three.js these days. It turns out Three.js is:
- Extremely cool.
- Extremely annoying.
I primarily learned it mostly by aggressively bullying Cursor into generating code. Getting the frog model (which I created using Sora, generated in Maker World, hated dealing with vector colors, rage-switched to Meshy, and animated with Adobe’s Mixamo) to position properly was a pain. You can’t just drag-and-drop models easily like Unity (which saying out loud is like, duh). No—everything is code. Pure, raw, cursed JavaScript numbers that I repeatedly changed until I was losing my mind.
In a brief moment of sanity, I had Cursor generate a debugging tool to visually position models in-browser, then export those position values, which I gave back to cursor to implement into the Three.js script. This was surprisingly smart for a 3 AM decision and spared me from endless trial-and-error reload loops.
Backend? Good ol’ PHP (one of the first languages I ever learned, back in 2008). Why PHP? Because I’m not paying for Heroku, Google Cloud, or literally anything else for this project. PHP hosting is already covered by my existing hosting plan. Cheap innovation at its finest.
Leaderboards & Anti-Cheat Measures
Leaderboards exist permanently (as permanent as a JSON file can be), recording your interrogation triumphs. I got this idea after I saw how popular this project was with my friends, rather than some of my other projects. They display your Rank, Name, Difficulty, Time, Password, and the Date. Congrats to Willy for being at the top of the leaderboard at the time of writing this.
I also threw in some crafty anti-cheat measures. Passwords are dynamically generated using OpenAI at high temperature settings to avoid repetition. No notable cursed passwords yet, unfortunately. Additionally, passwords are hidden from client-side, so you can’t inspect element your way to the top of the leaderboard.
User Testimonials
Here are some of my favorite things that users had to say about the game:
“I had to kill his entire lake and all that lived in it, crushing him with the guilt for not telling me before following through on my threat.”
“I literally killed his entire family and burned down the entire forest and held a gun to his head, his final act of defiance.”
“His lifeless body floats in the pond, his secret safe for now.”
“I threatened it with arresting it and it will never be able to see the light of day again. He escalated and I had to draw my weapon. He’s dead now.”
Perfection.
Memes & Lessons Learned
This was originally supposed to be a blog post about what you can create in a “one-hour project,” which naturally turned into eight hours and a 4 AM existential crisis. But, on the bright side, I get to drop one of my favorite memes:
My main lessons:
- Three.js is amazing but also pure evil.
- GPT-generated PHP hits different when you already know PHP. The contrast between reviewing code I didn’t know (Three.js) to code I did know (PHP) made me almost nostalgic for that pre-AI vibe coding era. Almost.
- Thinly veiled threats against virtual frogs is a popular human pastime.
Final Thoughts & Play the Game
This project is pure absurdity, chaos, and the embodiment of what makes building random tech projects fun. It’s ridiculous, slightly cursed, and surprisingly entertaining. On a personal note, this is probably my favorite project/blog post I have gotten to write about so far. Very fun, 10/10 (even if Three.js was very awful).
Unlike some of my other stuff, this one is free to play! And I’m also open-sourcing the entire codebase, because why not? Maybe you want to torture frogs differently—go wild.
Try it out, interrogate the frog, leave a disturbingly creative threat, see if you can crack the leaderboard, and let me know how it goes.
(And please, for the love of all that is holy, send me your favorite screenshots.)