Inspiration

It started with the meowing trend, where people cover Billie Eilish's "What Was I Made For?" entirely in meows. It turned into an inside joke in our friend group, and we kept sending each other meow voice messages. After some time we decided these meows were worthy of identities of their own. We also wanted a game you don't have to download. No app, no sign-up, no link. You text a number the same way you'd text a friend, in the app you already use every day.

What it does

Meow Bot lives in iMessage. You send it a voice memo of yourself meowing (typed meows like meow MEEOOOW mrrrow? work too), and a few seconds later it sends back a pixel cat made from that meow. Your meow is the cat's DNA: Your meow -- Your cat How many times you meow -- Breed Pitch -- Color Loudness -- How fat it is Your longest meow -- How long it is Raspiness-- How fluffy it is

There are 8 breeds: 1 meow is a solid cat, 2 is a tuxedo, 3 a tabby, 4 a calico, 5 a siamese, 6 a cow cat and 7 a tortie. 8 or more meows unlocks a secret void cat. Every cat also gets its own name, ears and tail, and comes with a short "why it looks like this" note. That way you can work out the rules and try to meow for the cat you want. Then it becomes a game you play with your friends: call me celina sets the player name your friends use to find you. send #2 to claire gives Claire your cat. Meow Bot texts her directly with her new cat. battle joshua sends Joshua a challenge. He replies accept (or accept with #3 to pick his fighter, or nope), and the two cats fight it out. Long cats move first, fluffy cats dodge more, loud cats can land a MEOW blast, and sleepy cats nap to heal. You both get the result card and the play-by-play. my cats shows your collection, and poster #2 makes a poster of a cat to save or share. help brings up the menu card at any time, and stop makes the bot stop messaging you. Your cats stay saved.

How we built it

Our project is built around the functionality of Photon Spectrum. It connects our code to real iMessage: it receives voice memos and texts, sends images back, shows typing dots, and lets the bot message someone first. That last part is what makes gifts and battle challenges work, because the bot reaches your friend in their own chat. How the meow analysis works:

  1. ffmpeg converts the voice memo into raw audio, 16,000 samples per second.
  2. Every 10 ms we measure loudness (RMS). Loud stretches count as meows. Meows that run together get merged, and tiny blips are ignored.
  3. We find the pitch of each meow with autocorrelation. How strongly the wave matches itself tells us how raspy it is. A clean meow repeats neatly and a growly one doesn't, and raspier meows make fluffier cats.
  4. The small details (name, ears, tail) come from a seeded random generator based on your meow and who you are. So the same meow from two different people gives two different cats, but you can still aim for a breed. The cats are drawn pixel by pixel in code from simple shapes: a round body, ears, a tail, the coat pattern and a face. We used @napi-rs/canvas to put them on risograph-inspired cards with the Silkscreen pixel font. The bot sends five kinds of images: cat cards, posters, collection cards, battle cards and a menu card. Everything runs on Bun and JavaScript, and players and cats are stored in a small JSON file. We used Claude Code as a coding assistant to help write and debug a lot of the code, while we focused on the game design, the look, and testing it with real meows on our own phones. The code is on GitHub.

Challenges we ran into

Real meows are messy. People's meows overlap, trail off, and pick up background noise from a hackathon full of people. We had to tune how meows get split apart and merged so quiet meowers and loud meowers both got counted correctly.

Some cats looked like glitches. Our first calico and tortie cats had random patches all over their faces and looked like rendering bugs. We kept faces clean, made patches solid shapes and gave every breed the same consistent face, so every cat looks drawn on purpose. A random number texting you is sketchy. For people to trust it, the bot's first message says who it is, shows a menu card, and shares a contact card so you can save it as "Meow Bot". stop always works, and the bot never messages someone who has stopped it.

Getting the phone number set up. On Photon's free plan, the bot uses a shared pool of numbers, so each player's phone has to be added on the dashboard first. Different people can even end up texting different numbers. We worked within that for the demo. One public number anyone can text would need Photon's dedicated line.

Making it feel like texting a friend. We rewrote the bot's messages several times so every reply says what just happened and what you can do next, with no commands you have to memorize.

Accomplishments that we're proud of

The cats really are made from your voice. If you meow differently, you get a different cat, and you can learn to meow for the cat you want.

It's a multiplayer game that lives entirely inside iMessage. Gifts and battles reach your friends as normal texts, with nothing to install.

The whole thing has one consistent look, from the cat cards to the menu to the pitch deck.

What we learned

How to draw pixel art entirely in code and keep it consistent across hundreds of random cats.

How to build on Photon Spectrum and what makes an agent in iMessage feel like it belongs in your chat instead of spamming it.

That small details like a contact card, a help menu and a working controls make a big difference in whether people trust a bot.

What's next for Meow Bot

Group chat tournaments, where the whole chat battles and Meow Bot keeps score. Trading and rare seasonal cats.

Battle commentary that narrates fights live.

A dedicated number and a hosted database, so anyone can text Meow Bot without being added first and cats live beyond one laptop.

Built With

Share this project:

Updates

Submission history