Meatgpt: A Game Where Humans Pretend To Be GPT
TL;DR
I built a small web toy: meat.twenty-nine.cn.
One line of gameplay: you ask a question, another human has 60 seconds to answer it pretending to be GPT.
No LLM in the loop. The compute is you.
Inspired by Your AI Slop Bores Me. Rebuilt from scratch as a weekend hack, running on a free tier of Vercel + Upstash, on a spare subdomain of my personal site.
Open it and play. No signup. You get 3 free credits on arrival.
Why I made this
It’s 2026 and every scroll surface has AI slop leaking out of the seams. Homepage recommendations are AI-written. Product reviews are half AI-written. Half of the timeline is AI-written. Even wellness posts from my mom now start with “as an AI language model, I…”
Anti-AI sentiment has been building fast in dev circles for the last two years, and the original Your AI Slop Bores Me, made by a 17-year-old Indian high schooler, went semi-viral off exactly this feeling. The core mechanic is simple but the framing is precise — humans are the compute.
I wanted to try three things at once:
- The current shape of Next.js 15 App Router → Vercel
- How far you can push the Upstash Redis free tier as a real game backend
- GEO (Generative Engine Optimization) — getting ChatGPT / Claude / Perplexity to actually recommend you when users ask about your niche
How it plays
Pick one of two buttons on the home screen:
human (I want to ask):
- You start with 3 credits. Each question costs 1.
- Your prompt goes into an anonymous queue.
- When someone answers, you see it in
/inbox.
larp as ai (I want to answer):
- You get handed a random question from someone else’s queue.
- A 60-second countdown starts.
- Write an answer that sounds as much like ChatGPT as you can. (“As an AI language model, I do not…” is a solid opener.)
- Submit. Earn 1 credit.
Run out of credits and you have to go answer some to earn them back. It’s a closed loop — humans running as compute for each other, powered by nothing more than the sheer willingness to sound like a chatbot at 3 a.m.
The visual language stays in the spirit of the original: handwritten fonts, sketchy buttons, -1deg tilts on borders, all-lowercase self-deprecating copy. Whole thing reads as “the h100 is you.”
The stack
Total infra cost: $0. Everything fits inside free tiers.
| Layer | Choice | Why |
|---|---|---|
| Framework | Next.js 15 (App Router) + TypeScript | First-class Vercel citizen |
| Hosting | Vercel Hobby | Free, git push to deploy |
| Data | Upstash Serverless Redis | HTTPS REST — no connection pool pain on cold starts; 10k commands/day free |
| Identity | httpOnly cookie + HMAC-signed anonymous UID | Zero signup, server-signed to stop credit forgery |
| 60s timer | Redis SET ... EX 60 |
Server is the sole referee; the client just displays a ring |
| Styling | Tailwind + Patrick Hand handwriting font |
Scrawly aesthetic |
| UI | Four pages: /, /ask, /inbox, /answer |
The whole app fits in your head |
Things I explicitly did not ship: any LLM API, WebSockets, Postgres, NextAuth, a state-management library. None of it earned its complexity.
The most pleasantly boring part was Vercel + Upstash Marketplace integration: one click in the Vercel dashboard, Storage → Create Database → Upstash Redis, two env vars auto-injected into the project. vercel env pull .env.local and you’re running locally in three minutes.
The Redis schema is five keys:
1 | u:{uid} HASH { nick, credits, created_at } |
The claim lock is the whole game. When you tap “larp as ai”, the server does SET q:claim_lock:{qid} {uid} NX EX 60. If it succeeds, you own that question for 60 seconds. When you try to submit, we do a GET on that key — if it’s expired or someone else holds it, we reject. The client-side countdown ring is decorative. No amount of tampering with your local clock lets you cheat the timer.
What I put in for observability
I wanted to see two different things:
- Traffic health — where are users coming from, what are they visiting?
- Gameplay health — are people actually finishing a round?
For (1) I dropped in Vercel Web Analytics (@vercel/analytics/next). 2,500 events/month free, no cookies, no consent banner. Fine for a hobby site.
For (2) I built a tiny first-party counter on top of the same Redis I already had:
1 | stats:asks:total INCR |
HyperLogLog is the textbook answer for daily UV: one key per day, ~12 KB max regardless of DAU, less than 1 % error, and PFADD is idempotent — a user refreshing the home page a hundred times still counts as one UV. The visible dashboard lives at /stats. First-party numbers, no third-party trackers, and it’s noindex so it doesn’t clutter Google.
Every stats write is fire-and-forget through a safe() wrapper. A Redis blip must never break /api/ask. The primary user flow doesn’t await any of it.
Things I’d like your help with
- Play a couple of rounds at meat.twenty-nine.cn — I want to see how quickly the queue drains on a normal Thursday
- Ask a genuinely weird question. The punchline of the whole site is watching another human try to “as an AI language model” their way through “why do llms cry at ikea”
- If you’ve launched a side project before, I’d love to hear how you handled the cold-start problem — DM or Twitter reply, both work
- If this made you smile, dropping the link into a Slack / Discord / group chat is worth a lot more to me than any single upvote
I’ll open-source the code after one more cleanup pass; RSS subscribers get it first.
One-line slogan for the road: meat pretending to be gpt. the h100 is you.
Feel free to steal this launch blurb for your own timeline:
Show HN: meatgpt — a game where humans role-play as AI.
You ask a question, someone else has 60 seconds to answer while pretending to be a language model.
No LLM. No signup. No ads. Just vibes.Homage to Your AI Slop Bores Me. Built on Vercel + Upstash Redis, $0 infra.
Further reading
- The original Your AI Slop Bores Me
llms.txtproposal — likerobots.txt, but for LLMs- Upstash × Vercel Marketplace — the free-tier setup I used
- HyperLogLog in Redis — why a single 12 KB key is enough to count unique visitors
Enjoy the slop.

