Full-Stack Solo Designer & Full-Stack Developer

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.

Seconds
To merge study waves that took hours by hand
1
Person: research, design, code, and deployment
3
Infra layers: Docker, Kubernetes, Jenkins CI/CD
In active use by Labcorp UX research team
The Problem

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.

Process

Designed and built by one person

1
Research and Problem Definition

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.

2
UX Design

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.

3
Frontend Build

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.

4
File Processing Logic

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.

5
Deployment

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.

Technical Stack

Full-stack from design to deployment

Frontend
Angular TypeScript Chart.js ExcelJS SCSS
Infrastructure
Docker Kubernetes Helm Jenkins CI/CD
wave-merger.service.ts — weighted average across study waves
mergeWaves(waves: WaveData[], weights: number[]): MergedResult { const totalWeight = weights.reduce((sum, w) => sum + w, 0); return waves[0].questions.map((question, qIndex) => { const weightedAvg = waves.reduce((sum, wave, wIndex) => { const score = wave.questions[qIndex].meanScore; return sum + (score * weights[wIndex]); }, 0) / totalWeight; return { questionId: question.id, questionText: question.text, weightedMean: Math.round(weightedAvg * 100) / 100, waveScores: waves.map(w => w.questions[qIndex].meanScore), }; }); }
Live Demo

Try the wave merger

A working recreation of UnifyUXR's core interaction, using fictional study data. Drag the wave weights and watch the weighted means recompute in real time — the same mergeWaves logic shown above.

Fictional data — the production app parses real Excel exports with ExcelJS and supports variable question sets between waves.

Outcome & Impact

Hours to seconds

Results
⏱️
Hours of manual work replaced

Researchers upload their files and the app returns combined results in seconds. The whole manual process — copying, calculating, formatting — is gone.

📊
Interactive visualizations included

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.

🚀
Deployed to production infrastructure

The app runs on Labcorp's Kubernetes cluster with a full Jenkins CI/CD pipeline. It gets updates like any other production service.

🎨
Designed and built by one person

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.

← Back to all work Back to first project Enterprise UX Design →