Skip to content

ArticlesAnalysis

Peemail Is Live: We Built a 3D Game for Dogs With Claude, and It Actually Worked

Peemail is a postal service for dogs: tap one button when your dog marks a spot, see every dog that marked the same pole before you. We built the whole 3D PWA with Claude Code, 17,000 lines, 124 tests, five parallel agents for the art, live at peemail.app. Here is the full build story and what it proves about AI building games.

Peemail Is Live: We Built a 3D Game for Dogs With Claude, and It Actually Worked
On this page
  1. What Peemail is, and why dog walkers get it instantly
  2. How we built it with Claude
  3. The hair story: five agents, 54 minutes, one straight answer
  4. The stack: a 3D multiplayer world on the cheapest hosting that works
  5. Privacy came first, before any code
  6. Listening to the first testers
  7. What we learned building a game with Claude
  8. Try it, and bring your dogs

Last Updated: 12 October 2026

Your dog has been leaving messages for years. Every pole, tree and hydrant on your walk is covered in them. Until recently there was no way to read them. Now there is, and the funny part is how little it took: Claude can now plan, code, test, screenshot and deploy a whole product, and that is all this idea needed. We gave Claude Code a plain-language brief for a game-shaped social app called Peemail, then spent the whole project giving feedback in one-line messages. It is live today at peemail.app.

Key takeaways
  • Peemail is a postal service for dogs: tap one button when your dog marks a spot, and see every dog that marked the same pole before you.
  • We built it end to end with Claude Code: about 17,000 lines of TypeScript and CSS, 124 automated tests, a 3D world on MapLibre and three.js, hosted on Cloudflare.
  • The hardest visual problem, five dog coat types, was solved by five Claude agents working in parallel for about 54 minutes.
  • Short, honest feedback was the whole method: "the hair looks bad" produced a better result than a detailed spec would have.
  • Privacy rules were decided before any code: home zones stay on the phone, pins show the pole not the person, photos lose their location twice.
  • It is a PWA: no app store, no install friction, add it to your home screen and walk.
Peemail hero: a street map of peemail pins beside a card counting the multi-agent dog coat build
A peemail map on the left, the multi-agent build result on the right: 17,000 lines, 124 tests, live at peemail.app.

What Peemail is, and why dog walkers get it instantly

Peemail is the postal service for dogs, and the name is exactly as mature as it sounds. When your dog marks a spot on a walk, you tap one big yellow button and post a peemail. The app pins that exact pole or tree on the map, and you see every other dog that has marked the same spot before you. That is the whole loop, and it turns out to be a surprisingly good way to meet the dogs in your neighbourhood.

The social layer grew from that one mechanic. Sniffing another dog's peemail works like a like. Sniffing back, by posting at a spot where another dog has already been, sends them a notification like a reply. Dogs you keep crossing paths with go into your pack, and the ones you actually meet at the park become friends. There are stamps, daily quests and levels to keep the loop moving. Every dog is a little 3D character you build yourself, with breed, colours, ears, snout, tail, size and coat, walking a 3D map of your real streets, doing tricks like sit, paw, play bow, jump and roll over, and playing fetch with a ball or a stick.

Peemail flow infographic: dog marks a spot, one tap posts it, other dogs show up, sniff and pack up
How it works: four taps from a marked pole to a neighbourhood pack, with the stack Claude built behind it.

Why build something like this at Flowtivity? Because our actual work, agent pipelines, local-first inference stacks and ops tooling, is serious, and the best way to find out what Claude can really do is to hand it something joyful where quality is visible to a five-year-old. A poodle with a topknot either looks right or it does not. Games are honest test beds: there is nowhere for a mediocre result to hide.

How we built it with Claude

The method never changed from the first day. We described what we wanted in plain words, and Claude wrote the code, ran the tests, took screenshots to check how things looked, and put it live. Many of our requests were one line long:

  • "Deploy it to peemail.app, as cheap as possible."
  • "Can we add tricks and a ball game?"
  • "I don't see the stick."
  • "Can we add hair types, like curly, long and shaggy?"
  • "Hmm, the hair looks bad. Can we improve it?"

That last line is our favourite example of how agent development actually goes, so here is the full story.

The hair story: five agents, 54 minutes, one straight answer

The first version of the hair was a pile of small blobs stuck onto the dog, each with its own outline. It looked bad, and we said so. Claude rewrote it so each hair type reshapes the dog's own body instead of adding pieces on top. Better, but still not great, so we asked it to make it better again.

For the third attempt, Claude split the work between five agents running in parallel, one per hair type: long, curly, shaggy, wiry and fluffy. Each agent rendered its dogs from several angles, in the middle of a trick, and at the small size you see on the map. The run took about 54 minutes. Then Claude reviewed every type on several dogs itself before putting it live.

Before and after infographic: one generic blobby dog coat versus five types reworked by five parallel agents
How it works: one coat that fits no dog, versus long, curly, shaggy, wiry and fluffy reworked in parallel.

Now curly is a poodle with a topknot and pom-poms, shaggy has bangs that part around the eyes, and wiry has schnauzer eyebrows and a beard. Just as important, Claude was honest about what was still weak: long hair is still the subtlest from the front, and white details on white dogs do not stand out much. We liked getting a straight answer rather than "it's perfect now". If you use agents, ask what is still weak. It is the most useful part of every update.

The stack: a 3D multiplayer world on the cheapest hosting that works

Peemail is a mobile-first web app. There is no app store, no install screen with a star-rating interrupt, nothing to wait for: you open the link and add it to your home screen.

  • Front end: Preact and TypeScript. The 3D world is MapLibre with OpenFreeMap tiles for the streets and buildings, plus three.js for the dogs, the spots and the trees, all in a cel-shaded cartoon style.
  • Back end: Cloudflare Workers with Hono for the API, D1 (SQLite at the edge) for the data, and R2 for photos.
  • Hosting: everything runs on Cloudflare, chosen because it is cheap to run at this size. At launch scale the paid tier costs about five dollars a month, and the free tiers of Workers, D1 and R2 cover most of the traffic before that.
  • Admin: a separate dashboard on its own subdomain for the growth numbers.
Stat grid: 17,000 lines of TypeScript and CSS, 124 automated tests, 5 parallel agents, 54 minute agent run
At a glance: the whole app in four numbers, all from the build log.

The codebase is about 17,000 lines of TypeScript and CSS with 124 automated tests. That is not a prototype number: it is a small production app, built conversationally. The browser is the runtime, the map is real, and the dogs are real 3D meshes with five coat systems on top.

Privacy came first, before any code

An app about where you walk your dog is also an app about where you are. So the privacy rules were decided before any code was written, and each one is built into the app:

Privacy infographic: home zone stays on the phone, pins show the pole not the person, photos stripped twice, no passwords
How it works: four risks of a location app, and the safeguard built in for each.
  • Your home stays private. You draw a home zone during setup. It is stored only on your phone and never sent to our servers. Anything your dog marks inside it stays in a private diary.
  • Pins show the pole, not the person. A peemail is pinned to the spot, not to you. Nobody maps your habits, however much they would like to.
  • No live tracking. Peemails are delayed by default, so nobody can see where you are right now.
  • Photos lose their location. Location data is stripped on your phone, and again on the server.
  • Delete means delete. "Delete everything" removes your dogs, your peemails and your photos from our servers.

There are no passwords at all. During setup you get a recovery code: 16 random characters that bring your dog back if you lose your phone. We only store a hash of the code, so we cannot see it. If someone else uses your code, your phone gets signed out, so you would notice straight away.

Listening to the first testers

The most useful thing so far has been watching real people try it. One early tester said, simply: "I don't understand how it works." Fair enough. The welcome screen was charming but vague, and people who arrived from an invite link got no explanation at all. So we added a short "How Peemail works" screen to setup: walk your dog, post a peemail, see who has been there, and your home stays private. It is also in the Me tab for anyone who has signed up already.

Two more fixes came from the same round of testing. Saving your recovery code is now part of setup, because the codes were added after the setup flow was built and new owners never saw them. And shared links explain themselves now: when you invite a friend, the message says what Peemail is, and the link shows a preview card with the logo and some dogs, so your friend does not need you to explain it. Every one of those fixes came from a one-line observation, "this confuses people", and Claude turned each into a shipped change.

What we learned building a game with Claude

We run agents on real production work every week, and this project sharpened five habits worth keeping whatever you build:

  • Short, honest feedback works. "The hair looks bad" was enough to start from. Saying exactly what was wrong, "I don't see the stick", got faster fixes than a spec would have.
  • Let it check its own work. Tests and screenshots meant Claude could see when something was broken or ugly before we did.
  • Use several agents when you need them, not by default. Five agents in parallel produced the best hair, but those runs are slow. For most changes, one session working step by step was quicker.
  • Ask what is still weak. The list of things that are still not right is the most valuable output of each update, and you only get it if you ask.
  • Games make good test beds. Serious software hides mediocrity behind requirements documents. A cartoon poodle cannot hide anything.

Try it, and bring your dogs

Peemail is live at peemail.app. Set up your dog, take them for a walk, and post your first peemail. Then send an invite to the dogs you meet at the park: the link explains itself. We are a small team shipping playful experiments like this alongside the serious agent work, and Peemail is our favourite so far. If something does not make sense, tell AJ on X at @ajfires or through flowtivity.ai. That is how this whole thing got better.

  • claude code
  • AI app development
  • PWA
  • indie games
  • Cloudflare
  • vibe coding

One email a month, no noise

Practical AI notes for Australian businesses. Unsubscribe anytime.

One good place to start

What would you like to take off your plate?

Bring a process that feels repetitive or harder than it needs to be. We’ll help you find a practical first step.

Book a free consult

A free 1-hour conversation with AJ. No pressure, no pitch.