Skip to content
All projects
Live · Beta

buddy-chat

A one-on-one messenger with a small pixel creature living between the two of you. Chat, feed it, clean up after it, and watch it grow.

buddy-chat in a desktop browser: the chat with the buddy on a small stage above it
What
iPhone + web app · KO / JA / EN
Since
2026
Role
Solo
Runs on
Azure Container Apps, Japan East

About

buddy-chat is a messenger for exactly two people — and a tiny creature that lives between them. It gets hungry, makes a mess, and grows the more you talk. No AI prompts, no daily missions: just something small to look after together.

Start as a guest with just a name, then invite one friend with an eight-character code. The same Expo app runs on iPhone and on the web. The 40-second demo shows an egg growing up without signing in.

What it does

Real-time chat
Reconnects and fills in missed messages; resends are delivered once. Typing, read and online indicators.
A buddy to raise
Egg to baby to kid to adult. It gets hungry and poops over time, and never dies if you forget it for a few days.
Just the two of you
Start without signing up, link Google later. One invite code, two people per room.
Anywhere
iPhone first, the same app on the web. Korean, Japanese and English, light and dark.
A new room: the buddy has hatched and there is a button to invite a friend
An eight-character invite code
Chat with buddy events mixed into the conversation
Buddy details: experience, fullness, cleanliness, feed and clean buttons

How it’s built

App
Expo (React Native) · TypeScript · Expo Router — iPhone and web from one codebase
Server
Java 25 · Spring Boot 4 · WebFlux · WebSocket
Data
Azure DocumentDB (MongoDB-compatible)
Auth · Push
Firebase Authentication · Expo push
Infra
Azure Container Apps · Static Web Apps · Terraform · GitHub Actions (OIDC)

Notes

The buddy is computed when you look

Hunger and poop aren't stored or ticked by a scheduler. They're derived from the last feed and clean time whenever someone opens the room.

Once, without transactions

A unique index on the client's message id makes resends return the same message, and conditional updates mean two people tapping Feed at once count once.

Push by what you've read

A push goes out only if the message is still unread after three seconds. That one rule covers backgrounded apps, hidden tabs and phones that just went to sleep.