← Back to work
01 / 03 — Capstone · Voice UI · CMU Portugal

Presence

My CMU capstone. The brief was “Cognitive Mobility” — how can a phone manage itself by context to cut digital friction and carbon? My answer became Presence: a voice-first onboarding companion where the conversation is the configuration. I designed and built it solo — and it took five visual phases to get there.

Role
Concept · Design · Build (solo)
Context
CMU Portugal capstone
Stack
React · OpenAI Realtime · PWA
Year
2026
01
The brief

A phone that manages itself

The capstone problem statement was Cognitive Mobility: how can a phone adapt to your real-world context — what you're doing, where you are, the time of day — to reduce digital friction and cut the carbon cost of background activity, without the user configuring anything?

The team's research framed the stakes: the average smartphone burns more than 21 GB a month, much of it background nobody asked for. Reduce that waste and you help the user and the planet.

02
Why voice-first

The configuration cost is the real barrier

Our research — Tiago's journey map and broader user interviews — showed why tools like iOS Focus Mode and Bixby fail: they front-load configuration, so people never get curious enough to explore the automations. Users weren't lazy; the setup cost was genuinely too high.

So I flipped it: the conversation becomes the onboarding. Presence asks for context progressively, only when it's earned — exactly where a screen-based form would add friction at the moment users are most overstimulated.

“Existing context-switching tools fail because they front-load configuration before delivering any value. The conversation is the onboarding, and it asks for context only when it's earned.”
03
The journey

Five phases, one conviction

The visual went through five phases — Galaxy, Tasting Field, Dust, Aura, Bloom — moving from drawing what the system does toward what it is. The hardest to kill was the Galaxy: that amber, almost bio-organic core circled by companion worlds. I was so invested I nearly renamed the whole project Symbiosis.

“Symbiosis implies two things merging, and that's not what this is. Presence is something you feel but don't operate. Once I understood that, the name — and the galaxy — had to go.”
Live 01 · The Galaxy — molten core, orbiting companions, soundwave · the phase I nearly kept
04
Ratatouille

Taste, rendered as colour

The second phase — Tasting Field — came straight from Ratatouille. I kept thinking about the way the film draws taste: the bursts of colour and shape that explode around Remy the moment food hits his tongue. That's synesthesia, and I wanted Presence to feel exactly like it — so every spoken phrase painted the dark with bursts of colour, each word its own hue, the field's breath riding the voice's volume.

It was, honestly, a screensaver that happened to talk — so I let the literal fireworks go. But it handed me the principle I carried all the way to Bloom: breath = voice.

“Tasting Field came from Ratatouille — taste drawn as bursts of colour. I made every phrase paint the dark. I dropped the fireworks, but kept the rule it taught me: breath equals voice.”
Live 02 · Tasting Field — synesthetic bursts, the Ratatouille moment · running
05
Aura

Someone is finally there

Through Dust and into Aura, the scattered motes gathered into a single luminous body — one warm core, breathing and drifting on slow organic paths. For the first time it felt less like weather around you and more like a presence with you. Beautiful — but still too nocturnal. One last flip remained.

Live 04 · Aura — one luminous body, breathing and drifting · running
06
The build

Debugging the audio loop by hand

I built it for real — React and the OpenAI Realtime API over WebRTC, deployed as a PWA. The deepest problem was the voice hearing itself through the speakers and retriggering, which made it loop.

To find the exact threshold, I sat there and manually repeated sounds during the intro until one made the model restart — basically binary-searching the trigger point by hand. Then I replaced the guesswork with a proper audio gate: the mic stays closed while Presence speaks and opens only when it finishes. Reliable on every device and in any room, not just a quiet one.

“The model was hearing itself and looping. I debugged it by repeating sounds until I found the exact trigger — then replaced it with a proper audio gate: mic closed during its speech, open only on completion.”
07
Testing & validation

A live product, not a mock-up

I deployed it as a PWA behind a QR code — a one-euro domain, a live server — so anyone could scan and use it. At the CMU evaluation, the room expected a Wizard-of-Oz prototype and got a functional, live product they could try themselves.

Real testing surfaced real behaviour: the model switched to Portuguese mid-session when I spoke Portuguese — emergent from its language detection. Honest scope: Presence proves the interaction concept; the real version needs OS-level network access a PWA can't provide — that's the next step, not a flaw.

“The room expected a Wizard-of-Oz prototype. It was a live product they could scan and use. That surprise told me something about the gap between what people expect from student work and what's actually possible.”
08
What's next

From companion to operating system

The hardest, most important next step is OS-level network access — what lets Presence actually manage the phone the way the brief intended, instead of just demonstrating the conversation. From there I'd evolve the interface into something adaptable that gives trust back: a menu that reshapes around you, and a small companion bubble that follows you through the operating system — present, but never in the way.

The result
Presence · live
Bloom

This is the one

Flipped to light: a motion-blurred bloom of warm light floating in a bright room, the name bold and still. Dead Space-minimal — only the name and a sliver of progress. The interface disappears and leaves only the being. Home.

Live Presence · the final flower — breathing, alive · running
← Previous
TrendWear
Next →
MediConnect

© 2026 Marcos Lourenço

UX & Service Design · Lisbon, Portugal