tama.case
× Close window
js-os://work/tama

Tama

A pet on the desk, not another tab.

Project
I built a physical companion with the presence of an object and the intelligence of a computer.
Problem
A corner-of-the-screen assistant would eat the workspace it was supposed to help with.
What I did
I designed the behavior, the body, and the conversation loop so vision, voice, and face felt like one character.
  • Product Design
  • Interaction Design
  • Physical Computing
  • Voice UX

My role

Product design, interaction, industrial design, prototyping

Timeline

August 11 to 28, 2026 · Solo

Client

Independent project · CCA Hybrid Lab

Industry

Physical computing · Ambient interaction

Plays with sound when you reach it.

Tama responds to work in Adobe Illustrator

01 / 02

States and physical controls

Autoplays muted when visible. Unmute or scrub with the controls.

Idle / observing

Listening

Thinking

Speaking

Mute / sleep

Explore Tama

I included an exterior and a cutaway so you can rotate the product or inspect its internal construction.

Drag to rotate · Scroll or pinch to zoom

Plays with sound when you reach it.

First software test

Giving visual intelligence a body

I built Tama as an experiment in embodiment. I connected visual understanding, conversation, expression, and physical form so the intelligence felt like one character rather than a collection of features.

Presence cannot be pinned to a corner

I made Tama physical so its face could meet your gaze, its voice could come from a place in the room, and it could stay present when the screen changed. That spatial continuity made the exchange feel more personal than talking to another panel inside the computer.

Every state needed an answer

Behavior logic

I mapped every wait to a face. Observing and listening have their own. Transcribing through Gemini and Edge TTS share the thinking face. Speaking only starts once the clip is ready.

Observing

idle · then one of two listens

Observing face

hear Tama

Listening · Tama

silence after speech

hold space

Listening · PTT

space up

Listening face
Transcribing

local speech-to-text

Thinking
  1. 01Send the transcript, plus a screenshot or desk frame, to Gemini.
  2. 02Gemini writes the reply using the persona and speak style I set beforehand — short, out loud, thinking set to minimal.
  3. 03Send that text to Edge TTS to make the voice clip.

clip ready

Thinking facetranscribe · Gemini · Edge TTS
Speaking

done → back to observing

Speaking face

Timeout, no speechback to observing

Empty or failed replyback to observing

Press Qquit

I designed each expression in Figma and mapped it to a system state. I used an open-source robotics face framework as the animation foundation, then used AI-assisted coding to integrate the state logic into the working software.

Latency is part of the personality

What I did with the wait

I kept Tama present, then spoke only if the wait lasted longer than a glance.

0s

Thinking face

I switch the visor immediately

7s

Filler

I speak only if it crosses this

8–10s

First voice

I give the real answer

Concise · Personal · Expressive — I used BMO as the filter.

I made Tama acknowledge the wait instead of going silent. I constrained responses to stay concise, personal, and expressive, using BMO from Adventure Time as the personality reference: playful and emotionally present, but still useful.

Measured wait

What I measured

I timed the same image, then two voice turns, to see what my changes actually did.

0.00s

I started here

0.00s

I cut it to this

0.00s

Fastest first voice I got

0%

Result, same-day pair

I timed the first successful Gemini call at 9.97 seconds of model time. I set thinking to minimal on the same frame to cut that to 4.05 seconds — about 59% faster thinking, with thinner scene detail as the tradeoff.

I did not make the cloud faster by making Tama physical. I used trigger-only vision, a downscaled screenshot, local STT, and a face plus fillers so an 8–10 second wait felt like a creature thinking instead of a spinner.

API footprint

API footprint

I kept the cloud cheap so Tama could stay a prototype. 28 days, Gemini Robotics ER 2.

0

Requests I made

0%

Succeeded

$0.00

Charted cost

$0.00

Credit left

I kept the cloud cheap so Tama could stay a prototype. 40 requests over 28 days, every one succeeded, 9 cents on the chart.

Nine passes to make the form work

Designing from the inside out

I modeled every physical component at its real dimensions before printing so the display, Pico, speaker, controls, and wiring space became constraints inside the CAD model. I checked the real display against its digital stand-in before committing to the shell.

I turned the rear hatch into a removable access panel and a sticky-note holder so a maintenance requirement became part of the desk experience.

Autoplays muted when visible. Unmute or scrub with the controls.

Printing the enclosure

From model to first fit

I printed the enclosure, learned to solder at the CCA Hybrid Lab, assembled the electronics, and installed everything in the shell. The first full print fit correctly, which validated the component measurements and internal layout before final assembly.

Reflection

I had to make interaction design, industrial design, electronics, and conversation timing work as one system.

Next Steps

I want to compare Tama with a screen-based version to test whether physical form changes how people engage with the same intelligence.