A research-grade virtual reality app for youth stress regulation, built with consistency and reproducibility in mind.
user interface with butterflies and bubble breathing

A research-grade virtual reality app for youth stress regulation, built with consistency and reproducibility in mind.

I'm a Computer Science and Digital Media Studies major interested in what immersive experiences can do when you point them at real problems. This summer, I worked on EMDR-In-VR, a virtual reality application designed to help young people ages 10 to 14 who have experienced significant trauma regulate and recover from stress. The app pairs bubble breathing, or breathing along with an expanding bubble, with EMDR (Eye Movement Desensitization and Reprocessing), a structured therapy that uses guided left-to-right eye movement to help people work through stress and trauma.

I first learned about the project last spring through Tamuda Chimhanda '26, my Karp Library Fellow mentor. We met weekly to talk about my career and what I wanted to accomplish through my work. Tamuda had led the project’s first phase, and because he was graduating, he was looking for someone to carry it into Phase II. Once he understood what I was drawn to, he walked me through the project’s potential and his vision for its next phase, then asked whether I wanted to continue his work. It resonated right away. I have spent years working with kids, as a certified youth basketball coach and a teaching assistant, and in both roles, I watched them hit a wall of stress and struggle to calm back down. Some of them could not get there on their own. A research project aimed at exactly that was one I wanted to be part of.

I spent the summer as a Schwartz Discover Grant Scholar based in Studio X and collaborating with the Mt. Hope Family Center, part of the University of Rochester's Department of Psychology. Mt. Hope pairs research with clinical care for children and families facing abuse, neglect, and trauma. The study's principal investigator is Jennie Noll, and I worked directly with researchers Hannah Swerbenski and Katy Elliott, who own the protocol and decide what the study needs. The study asks a narrow question: do kids recover from stress better with bubble breathing alone or with bubble breathing plus EMDR techniques? My goal was to prepare the application so Mt. Hope research assistants could independently run data collection this fall.

Here's how the build came together:

From Prototype to Research Tool: Project Phases

1. Learning the System Before Changing It

EMDR-In-VR is really two applications: a Unity app written in C# that runs on the headset and a dashboard built in Next.js that researchers use to manage participants and watch sessions live. The two systems never talk to each other directly. Everything passes through a shared Firebase Realtime Database, so renaming a single field on one side silently breaks the other. Before I touched any code, I traced the full round trip between them, which saved me hours of debugging later.

user interface with participant selection screen
The participant selection screen in the headset, populated live from the dashboard's queue.

2. Visual Work

The calming phase happens in a park, where participants breathe along with an expanding bubble while a butterfly moves through the scene. What the butterfly does is the experimental variable: nothing, a smooth left-to-right sweep, alternating flashes, or random wandering. The butterfly originally crossed over the bubble and pulled focus off the breathing, so I raised it to fly above. For the distraction condition, I split the butterflies across both sides and let them wander independently, so there is no single thing to follow.

user interface with butterflies and bubble breathing
The calm park, with the breathing bubble centered and the butterflies above it.

 

3. Backend Work

This was the largest phase, and none of it is visible to a participant. Researchers assign a condition from the dashboard, and that value was reaching Firebase but nothing in the headset was reading it, so I built the path that applies it automatically. The math answers run through OpenAI's Whisper, which transcribes a spoken number and grades it against the expected answer. Whisper returned numbers like “1,009” and my parser split on the comma and read it as 1, marking correct answers wrong, so I rewrote it to strip punctuation first. I wired the headset to write event timestamps at every phase boundary so heart-rate data lines up with the session, and moved the whole session workflow onto the dashboard.

researcher dashboard
The researcher dashboard, showing the participant queue and a live session.

 

This phase focused on reshaping the experience around the experiment’s needs. Originally, the stressor continued until a participant counted down to a target number, meaning participants who completed the task more quickly were exposed to the stressor for less time than those who needed longer. I converted it to a flat five-minute timer. The calm scene had no ending at all, so I gave it a five-minute timer that pauses into a conclusion screen. I also built a baseline task that runs before the stressor: five minutes on a dark screen with a white crosshair, gently faded in and out to reduce the risk of motion sickness, giving researchers a resting measurement for comparison.

stressor task of a subtraction problem
The stressor task. A reverse subtraction problem answered out loud.

 

 

baseline text of a dark screen with a white crosshair
The baseline task. Five minutes on a dark field with a fixation crosshair before the stressor begins.

5. Making It Research-Grade

Getting the app working was one thing. Getting it consistent enough that a researcher can trust what comes out of it was another. The five-minute stressor wasn’t running as intended because the voice recording was interfering with Unity's own clock, so I switched to wall-clock time. Building to the headset surfaced problems the editor never showed, including a default VR rig that let someone press the wrong button and end up on the roof. Participants wear a heart-rate ring, and a hand gripping a controller moves enough to skew the readings, so I made either trigger record an answer and kept one hand free. The briefing in the RA guide is written as a script so every participant hears the same words. Building for research means a feature isn't done when it works. It's done when it works the same way every time.

completed sessions in researcher dashboard
Completed sessions in the dashboard's History tab, ready for CSV export.

 

Video Playthrough

What I Learned

The mistakes that cost me the most time came from building before asking. Early on, I spent days engineering a solution for the distraction condition before I checked with the researchers and found out the real requirement was far simpler than what I was building. Game bugs can wait. A wrong assumption about the protocol cannot, because it ends up in the data and nobody catches it until analysis.

The technical side stretched me in directions I did not expect. I came in knowing Unity and C# and left having learned Next.js and React well enough to rebuild the researcher dashboard, deployed it on Vercel, and worked with Firebase as the connective layer holding two applications in sync. I also integrated AI into a live application for the first time, and most of that work was not the API call. It was parsing what came back, since Whisper returns human speech as text and human speech does not arrive in the shape your code expects.

What's Next

The app is in final testing now. A round of sessions with research assistants confirmed the workflow holds up when someone else is running it. Data collection begins this fall, and the research assistants will run it without me in the room, which was the point from the start.

Acknowledgments

Thank you to Jennie Noll, the study's principal investigator, for the opportunity to contribute to this research. Thank you to Hannah Swerbenski and Katy Elliott at Mt. Hope Family Center, who answered a steady stream of questions about what the study needed and caught the assumptions I would have gotten wrong on my own. Thank you to Meg Moody and Yvie Zhang at Studio X for supervising the work and talking through the hard architectural calls with me, and to Tamuda Chimhanda, my Karp Library Fellow mentor, who built the first version of EMDR-In-VR and handed it off with the documentation to understand it. Thank you to the Office of Undergraduate Research, whose funding made this summer possible.

About this Author

Ray Watkins, XR Specialist & Coding Team Lead