Skip to content

Case study · Lab operations

Anha Labs

Internal lab operations platform for PCR and toxicology workflows, focused on reliable batch processing, QC visibility, and faster data entry.

Role
Frontend architecture
Scope
PCR, toxicology, QC analytics
Users
Internal lab operators
Anha Labs toxicology entry table and PCR history dashboard

Overview

The problem

PCR and toxicology operations depended on manual spreadsheet handling and fragmented QC review paths, which slowed turnaround and made tracking harder.

My role

Designed and implemented the frontend application architecture, including multi-step entry flows, API integrations, state persistence, and QC analytics views.

Constraints

  1. 01

    Integrate with existing lab APIs—batch submit, history, QC endpoints, ZIP generation—without changing upstream systems.

  2. 02

    Handle inconsistent Excel input formats and preserve progress through long, multi-step workflows.

Decisions

  1. 01

    Separate but consistent stepper workflows for PCR and toxicology, with review-before-submit gates.

  2. 02

    TanStack Store + localStorage persistence so in-progress entries survive refreshes and prefill last-used values.

  3. 03

    A shared API service layer with TanStack Query caching for history and QC data.

Impact

  1. 01

    One authenticated app for PCR entry and history, toxicology entry and history, and processed QC analysis.

  2. 02

    Automated file generation on submission, plus filtered QC insights: violations, unaddressed items, sample and component breakdowns.

  3. 03

    Less re-entry work for operators when they get interrupted.

Stack

  • TypeScript
  • React 19
  • TanStack Start · Router, Query, Store
  • Tailwind CSS 4
  • Supabase Auth
  • Framer Motion
  • XLSX / JSZip
  • Vite

Lessons

  1. 01

    Operational tooling needs resilient import pipelines and explicit review checkpoints before irreversible actions.

  2. 02

    Persisted workflow state and reusable defaults materially speed up repetitive lab work.

Next