Master's thesis · Elisava Barcelona · 2026

Have you ever felt overwhelmed, stressed and nearly breaking down in a public space such as work, school or a hospital, with nowhere to go?

I designed a solution to help.

AuraPod AI

AuraPod AI hero screen: Multi-Sensory Reset, calibrated to your nervous system, across visual, audio, scent and breath

AI product designer and design engineer. I design AI people can trust, starting with one they hand their nervous system to: a booth that reads a short check in, resolves it to one of ten regulatory states, and runs five minutes of coordinated light, spatial sound, guided breathing and scent.

Samantha Lin · sole designer, developer and researcher · concept, affective model, evidence base, UX and design system, full stack build, hardware and live deployment. No team, no institutional partner. Before this: four to five years in behavioral therapy, crisis counseling and clinical support.
Email me LinkedIn Full thesis, demo video and code walkthrough available on request.
Ten regulatory statesEach with its own light, sound, breath and scent recipe
A check-in resolves to one state. Tap the band to explore.
40+First time visitors through live sessionsLive deployment
10Regulatory states, each a full recipe
140+Automated testspytest
104Peer reviewed sources behind the recipes

Built with

Gemini 2.5 Flash-LiteFastAPIWebSocketVanilla JSTailwindPolar H9 (designed)
Solo, end to end Research, affective model, UX, full stack, hardware, deployment. Self taught Python and FastAPI for this build; AI tools directed and verified, not autonomous.
The problem, framed as trust

A language model can misread a person

In most products, a wrong read is a bad autocomplete. In this one, the system acts on your nervous system, so a wrong read is a breach. That is the real design problem underneath the calm surface, and everything on this page is a response to it.

Acute stress hits hardest in the places least equipped for it: universities, hospitals, offices, crowded public space, with nowhere to go. The tools that exist hand you a menu: pick a meditation, a soundscape, a length. That request is hardest to satisfy at exactly the moment it matters, because dysregulation degrades the metacognition needed to choose well.

People in distress can usually describe what is happening to them. They cannot reliably select the intervention that would help.

That pattern is from my years in behavioral therapy and crisis contexts, and it is what AuraPod inverts. The person describes their state in their own words. The system does the selection, shows its interpretation, and asks permission before anything runs. It intervenes at the level of nervous system state, not generic wellness content.

Framing note: AuraPod is a self regulation and comfort tool. It is not a diagnostic, a therapeutic intervention, or a substitute for clinical care, and it was never positioned as one. That boundary comes directly from the clinical side of my background.
How it works

From a short check in to a running session

Every step below is implemented and ran live.

  1. Check in

    The person speaks or types a short check in on an iPad, alongside two plain language sliders for energy and sense of control. No clinical taxonomy to learn.

  2. Estimate affect

    Gemini 2.5 Flash-Lite performs zero shot estimation of the check in onto the Pleasure, Arousal, Dominance dimensional model. I chose PAD over Russell's two axis circumplex because Dominance carries the sense of agency, which separates states that otherwise collapse together.

  3. Resolve to a state

    A deterministic weighted Euclidean resolver maps those coordinates to the nearest of ten regulatory states, with Dominance down weighted relative to Valence and Arousal. The estimate is probabilistic; what happens next is not.

  4. Confirm and correct

    The system mirrors what it heard in plain language and asks: does this feel close? Nothing runs without a yes.

  5. Run the recipe

    Five minutes of coordinated light, spatial sound, paced breathing and a scent card, specific to the resolved state, projected and played through the booth. Pacing follows the music therapy iso principle: match the person where they are, move them gradually, then settle.

  6. Hand the session back

    A results screen shows what was read and what was sent, a short exit check in marks how it landed, and a QR hands the reading to the visitor. Nothing stays behind.

The estimate is probabilistic. What happens next is not.

The model places the check in inside PAD space. From there a deterministic resolver takes over, so a strange model output produces a slightly off session rather than an unpredictable one, and every session is auditable back to its coordinates. The person sees their own point in the space, in the product's plain language, not mine.

The tuned state coordinates and resolver constants stay private. The method does not.

AuraPod session card titled The Science: Anxious to Calm, showing the visitor's position inside a 3D PAD cube with Pleasure, Arousal and Dominance sliders
The in session science card: the visitor's own position in PAD space, explained in one sentence.

The pipeline, end to end

An iPad frontend in vanilla JavaScript and Tailwind, a MacBook running the FastAPI backend over WebSocket, driving a projector and four sensory outputs. Over 140 automated tests cover the pipeline, resolver and orchestration. I taught myself Python and FastAPI for this build; AI coding tools were directed and verified by me, not run autonomously.

iPad check in WebSocket FastAPI backend Gemini estimate resolver light spatial sound breath pacing scent card Deterministic downstream of the model · every channel degrades gracefully
The estimate is the only probabilistic step. Everything after the resolver is deterministic, and each output fails independently rather than collapsing the session.

Try the sensory logic

Ten named environments, each specifying light, sound, breath and scent, grounded in roughly 104 peer reviewed sources. Pick a state to compose its session live. Descriptions are qualitative; the tuned per state values stay private.

Breathe with the pacer

Neutral reset

LightSoft teal, low and even
SoundWide, slow, minimal
BreathBalanced, steady pacing
ScentClean, neutral
This is the real system logic, state to recipe, made interactive. It is not reading any biometrics; AuraPod composes from the resolved state, and so does this.
You're all set card listing a composed session: scenery backdrop, bergamot scent, rain on leaves sound
The composed session, stated before it runs.
Forest in soft rain card offering a choice between scenery footage and a color gradient
Choice preserved: footage or gradient.
Bergamot scent card noting the visitor can take any scent from the tray
Matched, never imposed.
Trust and control states

How a person stays in charge of an AI reading their emotions

This is the spine of the project. An AI that infers something as intimate as emotional state owes the person three things: to show its read, to accept correction, and to be honest about what it is and is not doing. Swipe through the shipped flow.

AuraPod welcome screen over a calm lake: AuraPod AI, tap to begin
Arrival. One tap, nothing to read, nothing to configure. The person may be at their worst moment of the day; the door has no handle to fumble.
Check in screen: How are you feeling, with free text or voice input and two plain language sliders for energy and sense of control. Microcopy states the check in is processed by AI and never stored
The check in. Voice or text, plus two plain language sliders for energy and sense of control. The microcopy states the deal in one line: processed by AI and never stored.
Confirmation screen: Here's what I'm hearing, a plain language mirror of the check in on an affect map, with Not quite and Yes, that fits buttons
The trust layer. The system mirrors its read in plain language, shows where that sits on the affect map, and asks: does this feel close? Not quite reroutes. Nothing runs without a yes.
Session preview carousel, Personalized to You, showing the science card with the visitor's PAD position before the session begins
The preview. Every element of the session is shown and explained before it happens, including the science card with the person's own PAD position. No black box between the yes and the lights.
Session complete screen showing the state shift anxious to calm, the recipe that ran, and biometrics panels honestly labeled In Development and Coming Soon
The honest results screen. What was read, what was sent, and the biometrics panels labeled In Development and Coming Soon, in the shipped UI, rather than faked with plausible numbers.
Before you go screen: exit check in sliders, an opt in toggle for anonymous results defaulting to off, a QR code to take the session summary, and a visible line to Spain's 024 crisis support service
The exit. A short check in on how it landed, an opt in for anonymous results that defaults to off, a QR that hands the reading to the visitor, and a visible line to free, confidential support on Spain's 024. A comfort tool in public space will sometimes meet someone who needs more than comfort.
Three decisions

How I worked when it got hard

It began as a synesthesia project. I killed that version.

The original concept translated emotion into cross modal sensory experience for its own sake. It was the idea I was most attached to, and I could not ground its mappings in an evidence base I trusted. So I narrowed it: from expressing emotion through the senses to regulating emotion through them, where decades of research on light, sound, breath and scent could actually carry the weight. Everything defensible about AuraPod exists because the charming version died.

Kills her own darling when the evidence does not hold.

The noisiest axis got two treatments, not one.

Dominance is the hardest PAD axis to infer from free text. Dropping it would collapse states that genuinely differ in sense of agency; trusting it fully would let a wobbly estimate cause misclassification. So it got a mechanism at both ends. In the resolver, it is down weighted so Valence and Arousal lead and Dominance breaks ties, with the weights kept as named tunable constants. And in the check in, it is asked for directly: a plain language slider, from out of my hands to something I can handle, gives the system a self report on exactly the axis it can least reliably infer. The exact values stay private.

Handles model uncertainty with mechanisms, not hope.

I designed for biometrics and shipped without them.

A Polar H9 heart rate integration over Web Bluetooth was specified and designed into the architecture. It was not reliably connected as demo day approached, and a half wired sensor on a live floor is worse than no sensor: it fails in front of people and contaminates whatever data it produces. I cut it, protected the core loop, and labeled the biometric panels In Development in the shipped interface rather than deleting them or faking them. The booth ran all day. The integration stays on the roadmap, where it belongs until it works.

Scope discipline under a real deadline, stated in the product itself.

Scope honesty

Built versus designed

I keep this distinction explicit because in health adjacent AI, overstating what a system does is a safety problem before it is a credibility problem.

Built, ran live, defensible

  • Gemini based PAD classification pipeline
  • Deterministic weighted Euclidean resolver
  • All four sensory modalities, coordinated
  • Human confirm and correct trust layer
  • Nothing stored: sessions processed in the moment, summary handed off by QR
  • Visible crisis support line (Spain's 024) in the exit flow
  • Graceful degradation across output channels
  • 140+ test pytest suite
  • Eight screen design system plus projector display

Designed, specified, not shipped

  • Polar H9 heart rate integration over Web Bluetooth
  • Opt in anonymous session logging behind the exit toggle
  • ML personalization loop (scaffolded, default off)
  • Custom trained classifier
  • EEG validation study
  • Live biometric readout during the session
  • Multi language support
  • Analytics dashboard
What happened when people used it

A formative evaluation, not a results claim

AuraPod ran live at the Elisava graduate show, where more than forty first time visitors moved through complete sessions. The run was designed to test three things about the loop outside a controlled build environment.

They spoke honestlyStrangers gave real check ins to a booth in a loud public room, which is the precondition for everything downstream.
It stayed coordinatedFour sensory channels held together across five minute sessions, all day, on real hardware.
They corrected it freelyVisitors used the "not quite" path without prompting, which is exactly the behavior the trust layer was built to invite.

The confirm and correct layer is built to turn that last question into data: every yes and every correction is a labeled point on classification accuracy. In this run, in line with the no storage stance, corrections were observed rather than persisted, so measuring resolver accuracy behind the opt in toggle is the first item on the roadmap. Visitor feedback was collected through a purpose built exit survey. The targets I set during design, including mood improvement figures and business model margins, are design goals, not validated outcomes. Nothing in this run was powered, controlled or blinded, and I do not present it as evidence of efficacy.

The AuraPod booth running live at the Elisava graduate show: desktop evidence display, iPad check in, scent tray, light sphere, Polar chest strap and contact card
The booth live at the Elisava graduate show, June 2026. Everything on the table ran, except the chest strap, and the interface says so.
Close view of the AuraPod station: evidence display with burnout research statistics and the 3D PAD cube, iPad check in screen, diffuser and Polar strap
The evidence display ran alongside the booth: burnout research, the live 3D PAD space, and the reasoning, on show next to the product.

What the room taught me

  • Determinism belongs downstream of the model. A strange model output produced a slightly off session, never an unpredictable one.
  • Confirmation is a feature, not friction. Strangers corrected the system without prompting, which is exactly the behavior the trust layer was designed to invite.
  • Clinical framing constrains scope in useful ways. Knowing where regulation support ends and clinical care begins kept the claims defensible and the 024 line on the screen.
  • Shipping hardware changes how you design. Graceful degradation stopped being a principle and became the reason the booth stayed running all day.
If this continued

Roadmap