96-Well Plate Analyzer - Architecture
Inputs stay separate
The plate map contains sample IDs. The reading grids contain numbers. Keeping them separate lets me reuse the layout without rewriting the measurements, and inspect each before analysis.
React holds the working state. The analysis functions receive a snapshot, validate it, and return a result. Changing a map, group, reading, standard, or dilution clears the old result.
Two calculation paths
| Stage | Group comparison | ELISA quantification |
|---|---|---|
| Input | Sample map, groups, signal, optional reference | The same inputs plus standard levels and sample dilutions |
| Repeat handling | Average corrected readings within sample ID | Average standard and unknown OD within ID |
| Calculation | Summarize sample values by group | Fit increasing 4PL, interpolate unknown means, apply dilution |
| Output | Bars, sample circles, statistics, heatmap, well records | Curve diagnostics, concentrations, range flags, and group charts |
The UI lives in React components; parsing, statistics, and ELISA fitting are separate modules. Chart.js draws the plots. Existing numerical libraries do the statistical and optimization work.
A standalone app inside the portfolio
The analyzer is hosted on GitHub Pages. The portfolio embeds it only when a visitor selects Run demo, with a separate full-screen link.
The demo is a separate browser app, embedded in a sandboxed cross-origin frame rather than run as an assistant tool. Plate inputs and calculations stay in the browser and are not sent to an analysis API. There is no saved analysis session; refreshing or closing the demo clears its working state.
How I checked it
The project includes parser and calculation tests plus production browser checks of both workflows at desktop and phone-sized widths. The technical notes describe the numerical fixtures, calculation boundaries, and scientific assumptions.
These are software and synthetic-data checks, not a claim of assay validation. The repository architecture includes the module map and hosting setup.