← Back

Ship it: Little Deer ABC

April 2, 2026 · 4 min read

I’ve been vibe coding for over a year — most recently with OpenClaw, an AI coding team I built to go from prompts to working code faster. Demos, prototypes, internal tools — little things that solved little problems for exactly one user: me. I was building, but I wasn’t shipping. Not really. Everything stayed on my laptop.

小鹿ABC (Little Deer ABC) changed that. It’s a WeChat mini program that teaches kids English vocabulary, and it’s the first thing I’ve vibe-coded that actually made it to real users. Getting here was way harder than I expected — not because of the code, but because of everything that comes after.

What to Build?

When building is this easy, the interesting question becomes what to build. So I looked around my life.

My son Kankan is six. Like most kids his age in China, he goes to English classes to learn the basics. But what I actually wanted was simpler than what those classes offered — I just wanted him to pick up everyday vocabulary. Words he can see around the house, animals, food. Recognize them, get familiar, maybe say a few sentences. That’s it.

And I wanted it to be a WeChat mini program. Kankan’s grandparents have WeChat. His friends’ parents have WeChat. No download, no app store — just tap a link and you’re in. If a parent likes it, they share it in a group chat in two seconds. For someone trying to ship their first real product, that’s the lowest-friction distribution I could imagine.

93 Words in One Day

I looked at existing English learning apps for kids. They’re all basically cartoons — video-heavy, game-heavy, designed to entertain. Which is fine, but I didn’t want to build another one of those. I wanted something that actually got words into his head, without turning the whole thing into a video game.

But I also know my kid. He’s six. He’s not going to grind flashcards out of discipline.

Then I thought about what he is obsessed with: collecting cards. Blind boxes. He and every kid his age are absolute addicts for the “what will I get?” moment.

So I designed a mechanic: finish learning a word, pull a card. Rarities go from Normal to Legendary to Epic to Rainbow, based on word difficulty and how well the kid paid attention. You don’t just learn — you earn.

I didn’t know if it would work. I just knew my kid.

He learned 93 words on the first day. I had to take the phone away from him.

Nine Days of Building, Nine Days of Bureaucracy

The build took nine days. I’d describe a feature to my OpenClaw agents, review what came back, iterate, and move on. The real time went into product decisions no AI could make for me: which words first? How rare should Rainbow cards be? How long is too long for one session?

Then came the part I wasn’t prepared for.

WeChat mini programs don’t just go live when you’re ready. There’s a gauntlet. Content review. Code review. WeChat certification. MIIT filing. Each one with its own timeline, its own rejection reasons, its own resubmission loop.

I got rejected. Resubmitted. Got rejected again. Fixed things I didn’t even think were problems. Resubmitted again. It took over a week — just the approvals.

There were moments I almost walked away. Not because any single step was hard, but because the accumulation of small blockers felt endless. You fix one thing and another pops up. You think you’re done and there’s one more form.

But I kept telling myself: I’ve been building things for over a year that only I use. I didn’t build this one to let it die in a review queue.

So I kept pushing. One form at a time.

Sharing Something That Isn’t Ready

Even after approval, I hesitated. The UI had rough edges. Some word categories were thin. The animations weren’t as polished as I wanted.

Every instinct said: just one more week.

But that instinct is exactly why I’d spent a year building things that never shipped. “One more week” is how prototypes stay prototypes forever.

So I set a deadline. And I shipped on that date. Not when it was perfect — because it was never going to be perfect. I shipped when it was good enough, and committed to improving it in the open.

Hitting “share” on something you know could be better — that’s a different kind of hard than building. It’s uncomfortable in a way that writing code never is. But that discomfort is the whole point. That’s the line between tinkering and shipping.

Closing the Loop

小鹿ABC is live. It’s small, it’s rough around the edges, and someone else is using it.

Shipping at work and shipping solo are two completely different things. One has a team behind you. The other has your AI agents behind.

This is just a beginning. Let’s keep the ball rolling.

Me and Kankan