Inspiration
Over half of American grandparents have at least one grandchild who lives more than 200 miles away, and distance is the number one reason they don't see them. Kids under ten don't have phones. Grandparents don't want another app. Deployed service members get a text at 3 AM their time. Every connection tool we have assumes both people are holding a screen, and one of them usually isn't.
We also watched what happened when Moxie, an $800 AI companion robot for kids, was bricked when its maker shut down in December 2024. Parents had to explain to crying children why their robot friend died. We didn't want to build a robot friend. We wanted to build a mailbox with a face.
What it does
Toonie is a small robot that receives what a person you love sends, and prints it.
A parent tells a story about their day into their phone, by voice or text. Toonie's server turns the recording into a comic script, draws three or four panels starring the parent's own cartoon avatar, and the child's Toonie prints it on a thermal printer as a sticker-sized comic they can hold, stick on the fridge, and keep. Touch Toonie's hand and it waves. Hold its hand and it raises its arm to reply: the child records a voice message that shows up in the parent's feed with the transcript and the original audio.
It works in both directions and across generations: grandparents to kids, kids to parents, and families to service members who can't be on a call. With explicit consent, a parent can clone their voice so their comics are read aloud to their child in their own voice, in the child's language.
Why AI is essential
Toonie doesn't use AI to decorate a message; it uses AI to translate one. A parent's forty-second rambling voice note is not something a six-year-old can absorb. Grok's models turn that note into a four-panel story with captions a kid can follow, drawn with an avatar that keeps the parent's face, skin tone and hair, so it's unmistakably "Mom." Speech-to-text makes it hands-free for a tired parent. Voice cloning (opt-in, consent-gated) means a bedtime story can arrive in the right voice even when the parent is on a night shift or a deployment. Remove the AI and Toonie is a receipt printer. With it, scattered updates become a shared story a child can hold.
How we built it
Hardware (Raaga). An Arduino Nano ESP32 runs Toonie's body: a capacitive foil pad in the hand triggers a servo wave on a tap and an arm raise on a hold, and it reports touch events over serial so a high-five becomes a read receipt in the parent's feed. The thermal printer sits on a custom PCB I designed in Flux AI and built in the HIVE makerspace, with the bulk capacitance a print head's 2 A bursts actually need. We were extremely limited on hardware and couldn't get a dedicated screen, so Toonie's face is a mounted phone for the demo. When the 3D print for the mount failed, I rebuilt it from scrap plastic salvaged from other parts and the magnetic section of a disassembled Goldman Sachs power bank, which doubles as a charger for the mounted phone. Working with what we had is the point of Toonie.
Parent app and database & Comic pipeline and child device (DJ & Anvii). The parent signs in with email and password, builds an avatar (pick features, or upload a photo and Grok's image model draws a cartoon that keeps their face), sets both languages, and can opt in to voice cloning. Pairing is one tap: a five-digit code the child types into their tablet. Codes are stored only as a hash, expire in ten minutes, are single-use and rate-limited. Comics generate in the background on the server with real per-panel progress, so a parent can close the app and come back; when it's ready they preview the color and black-and-white print versions, then send. The feed shows every comic sent and every reply received, live.
Everything runs on Supabase: Postgres, auth and private storage. The child's tablet uses anonymous sign-in, so a child never needs an email or password. Every table has row-level security, all writes go through our server after a permission check, files live in private buckets with hour-long signed links, and a comic is only marked sent once every file has uploaded. Schema changes are versioned migrations, and automated tests run against a real Postgres to prove one family can never read another family's comics and that codes can't be reused or guessed.
Challenges we ran into
The Nano ESP32 prints Arduino labels on the board but the servo and touch libraries expect the chip's internal GPIO numbers, so "D9" in code drove the pin labeled D6 and touching random pins triggered the arm. Hours went into that before we found the mapping in Arduino's docs. Our 3D print for the phone mount failed with no time to reprint, so the mount became a salvage job. On the software side, the hard part was making comic generation survive the app being closed, and making the database prove its own privacy guarantees with tests instead of promises.
Accomplishments that we're proud of
A physical thing prints in front of you. A high-five is a read receipt. A parent can send a bedtime story in their own voice from another time zone. And the whole system was built on scraps, a power bank we took apart, and a PCB designed at 5 AM.
What we learned
Hardware always takes three times longer than the plan, and the fix is usually a label, a loose jumper, or power, not code. Row-level security is worth writing tests for. And the most valuable feature of an AI product for kids is the one it refuses to have: Toonie never chats with the child; it only carries messages between people who love each other.
What's next for Toonie
A real screen for the face and a self-contained body. Grandparent mode with a single big button. Translation between the parent's and child's languages on every comic. A partnership pilot with a military family support organization. And a shipping version of the body PCB.
Built With
- 3d-printing
- arduino
- arduino-nano-esp32
- cursor
- elevenlabs
- esp32
- flux.ai
- grok
- next.js
- postgresql
- react
- row-level-security
- servo
- supabase
- thermal-printer
- typescript
- xai
Log in or sign up for Devpost to join the conversation.