Inspiration

Loneliness and mental health struggles are widespread and sometimes, the hardest part is just feeling like someone is there. We wanted to build a companion that felt genuinely warm and familiar, not cold or robotic. Winnie-the-Pooh was a natural fit. Winnie gentle, gender-neutral, universally beloved, and carries decades of emotional resonance. Our goal was to bring that same comforting presence into a physical, always-available device that could sit on your desk and actually be there for you.

What it does

Pooh Virtual Companion is a locally-run AI friend that lives on a Raspberry Pi with a touchscreen display. You talk to Pooh by typing into the terminal, and he responds with warmth and personality both in text and through an animated face that reacts in real time. The face shifts between states: waiting patiently, thinking, and speaking, with animation timing that mirrors natural conversation rhythm. Pooh also remembers you. Conversations persist across sessions so he builds context over time. He can check the current time, search the web, and even see through the Pi camera if you want to show him something. And if you've been quiet for a while, he'll check in on his own just a little nudge to let you know he's still there.

How we built it

The brain is GPT (via the OpenAI API), which handles all conversation, personality, and action triggering. The front end is a Tkinter GUI designed for an 800×480 Pi touchscreen, displaying PNG frame animations organized by state (idle, listening, thinking, speaking, error). Frames cycle at 2 FPS normally and jump randomly at 20 FPS during speaking to give Pooh a lively, organic feel. GPT triggers special actions by returning structured JSON and we support get_time, search_web (via DuckDuckGo), and capture_image (via the Pi camera). Conversation history is saved to memory.json and reloaded on startup. A background timer fires proactive check-ins every 30 minutes when the bot is idle. Everything is configured through config.json and .env.

Challenges we ran into

Getting the face animations to feel alive rather than mechanical took more iteration than expected timing, frame rate, and randomness all needed tuning. Streaming Claude's response sentence-by-sentence while keeping the GUI responsive required careful threading. We also ran into hardware issues with the microphone and speaker that we weren't able to resolve in time, so interaction currently happens through the terminal and on-screen text rather than voice. We also had to design the action system so Claude could trigger side effects (web search, camera) naturally within conversation flow without breaking the dialogue. Running everything on a Pi meant being mindful of performance constraints throughout.

Accomplishments that we're proud of

The face really works. Watching Pooh's expression shift from idle to listening to thinking to speaking in sync with actual conversation makes the interaction feel surprisingly alive. We're also proud of the memory system: the fact that Pooh remembers you across sessions changes the emotional tone of the whole experience. And the proactive check-ins add something genuinely touching it feels less like a chatbot and more like something that notices when you're gone.

What we learned

Personality is a design problem as much as a technical one. Getting Pooh to feel warm and consistent required as much thought about the system prompt and interaction model as it did about the code. We also learned a lot about building responsive GUIs on constrained hardware, and about how small details such as animation speed, check-in timing, memory combine to create something that feels emotionally present.

What's next for Pooh-Virtual-Companion

The most immediate next step is getting voice working, resolving the hardware issues with the microphone and speaker so you can actually speak to Pooh and hear him respond. That shift from typing to talking would transform the experience and bring it much closer to the vision of a true companion. Beyond that, we'd love to add reminders, mood tracking over time, and calendar integration to make Pooh genuinely useful day-to-day. We're also interested in more expressive face assets and a polished enclosure to make the hardware feel as warm as the software.

Built With

  • anthropic
  • bamboolabs
  • chatgpt-api
  • elevenlabs
  • open-wakeword-github
  • whisper.cpp
Share this project:

Updates