Case study
From Messy Spreadsheets to Interactive Charts
A browser-based tool that turns raw CSV, Excel, and scientific data files into interactive D3.js charts — built for researchers, not developers.
- Client
- Independent / research clients
- Role
- Full-Stack Engineer
- Period
- 2024 – present
- Angular
- D3.js
- Web Workers
- CSV/XLSX parsing
- TypeScript
The problem
Researchers produce data faster than they can visualize it. The typical workflow — export from lab equipment, wrestle the file into Excel, screenshot a chart — loses fidelity at every step and breaks entirely on large or irregular files. The goal was a browser-based tool where a researcher drops in a raw file (CSV, TSV, Excel, and several scientific formats) and gets an interactive, explorable chart — with no developer in the loop and no data leaving their machine.
The hard part wasn't the charts. It was that real spreadsheets are messy in predictable ways: inconsistent headers, missing values, mixed types in a single column, and files big enough to freeze a naive parser.
The decisions
Design for the messy file, not the demo file. The import flow became a wizard — upload, map columns, preview, visualize — where every step assumes the data is imperfect. Column mapping shows the tool's guesses and lets the user correct them; the preview step surfaces missing values and type conflicts before they become a broken chart.
Heavy parsing off the main thread. Large files parse inside Web Workers, so a 10,000-row spreadsheet never freezes the UI. The interface stays responsive and shows real progress, which matters enormously for trust with non-technical users.
D3.js for the last mile, not the whole pipeline. D3 renders the interactive layer — hover tooltips, filtering, zooming — but chart-type selection is guided: the tool recommends chart forms based on the shape of the mapped data, because researchers shouldn't need visualization theory to avoid a misleading chart.
The outcome
Researchers visualize lab results entirely in the browser — no installs, no uploads to a third-party service, no waiting on a developer. The column-mapping wizard turned out to be the feature users mention most: it converts the moment the tool would normally fail (messy input) into the moment it earns trust. The project also became the source of much of my writing on data visualization UX and client-side performance.