Research Data
Automation
Tool
UX researchers at Labcorp were spending hours manually merging Excel exports from multiple study waves. I saw the problem, designed the solution from scratch, and built UnifyUXR — a full-stack Angular app that handles the whole process. Researchers upload their files and get the combined results in seconds.
- Role
- Solo — research, design, code, and deployment
- Timeline
- Built 2024 – 2025 · still in regular use
- Users
- 5 UX researchers, plus additional designers
- Stack
- Angular · TypeScript · ExcelJS · Docker · K8s · Jenkins
A multi-hour manual process for a solvable problem
Labcorp's UX research team runs studies in multiple waves. Each wave produces an Excel export. Combining those exports into a single set of results required manually copying data across spreadsheets, applying weighted average calculations by hand, and then formatting everything for presentation. It took hours and was prone to error.
This is exactly the kind of task that software should handle. The logic is well-defined, the inputs are consistent, and the output format is always the same. I asked if anyone had tried to automate it. Nobody had.
I volunteered to build it.
Watch three mismatched exports become one answer
The hard part was never the arithmetic — it was that no two exports line up. Questions get renamed between waves, a question gets dropped, and every wave has a different number of respondents. That's what made this a multi-hour job with a real chance of a copy-paste error.
Below are three exports with exactly those problems. Hit merge and watch the app resolve them.
- Ease of completing core task
- Clarity of results screen
- Confidence in the data
- Navigation findability
- Overall satisfaction
- Ease of completing core task
- Clarity of results screen
- — question not asked —
- Navigation findability
- Overall satisfaction
- Task ease
- Clarity of results screen
- Confidence in the data
- Findability
- Overall satisfaction
- Parse workbooks
- Normalize question labels
- Align across waves
- Weight by respondent count
| Question | W1 n=42 | W2 n=38 | W3 n=51 | Combined |
|---|
Fictional study data, but the mismatches are the real ones: renamed questions, dropped questions, and uneven sample sizes. The production app parses actual Excel exports with ExcelJS.
Designed and built by one person
I sat with UX researchers and watched them do the manual process. I asked questions about edge cases, which study configurations they used most, and what the output needed to look like. The goal was to understand the real problem before writing a single line of code.
I designed the interface in Figma before building anything. The main question was how to make file upload and configuration feel simple for researchers who do not have a technical background. The answer was a three-step flow: upload files, configure wave weights, get results.
I built the Angular frontend following the Figma designs. The app uses reactive forms for the configuration step and Chart.js to render the combined results as interactive visualizations that researchers can explore.
I used ExcelJS to parse the uploaded files, extract the response data, and apply weighted average calculations across waves. The logic handles variable question sets between waves and multiple response scale formats.
I containerized the app with Docker and deployed it to Labcorp's Kubernetes infrastructure using Helm charts and a Jenkins CI/CD pipeline. The same pipeline handles updates — I push a change and it deploys automatically.
Full-stack from design to deployment
Hours to seconds
Researchers upload their files and the app returns combined results in seconds. The whole manual process — copying, calculating, formatting — is gone.
The results don't just appear as a table. Chart.js renders interactive bar charts that researchers can explore before exporting, which makes the analysis step faster too.
The app runs on Labcorp's Kubernetes cluster with a full Jenkins CI/CD pipeline. It gets updates like any other production service.
From the first conversation with researchers through to the deployed app, this was a solo project. Design, frontend, processing logic, containerization, deployment — all of it.