Projects About Capabilities Get in Touch
Back to portfolio
Case Study

QuicLens

A full-stack research analytics platform that turns raw assay data into a guided workflow for upload, analysis, classification, review, and audit-ready results, with a React interface, FastAPI backend, and tenant-aware access throughout.

FrontendReact + TypeScript
BackendFastAPI + pytest
ProductMulti-tenant analytics
The source code is private. This case study covers the product workflow, application design, testing, authorization model, and the cloud architecture supporting it.
Research use only; not for diagnostic use. QuicLens is a laboratory analysis tool and does not provide medical diagnosis or clinical decisions.
QuicLens application interface

The problem

Research labs running RT-QuIC and similar fluorescence assays were stuck analyzing plate data in spreadsheets and one-off scripts; the process was slow, error-prone, and impossible to audit. Regulated science needs reproducible analysis, clear provenance, and multiple labs/teams working in isolation without stepping on each other's data.

QuicLens turns that workflow into a real application: researchers upload plate data, review analysis and classification results in the interface, work within organization and lab boundaries, and retain the provenance needed to reproduce and audit the work later.

What it does

Architecture

A serverless, single-region AWS stack defined entirely in infrastructure-as-code.

System architecture

Tenant scoped research analytics

Identity, authorization, analysis, and data access are separated into clear layers.

01

Experience

React + TypeScript
CloudFront
Private S3 origin

The browser receives a static frontend over HTTPS.

02

Application

API Gateway
Lambda
FastAPI container

The analysis API runs as a container image on Lambda through Mangum.

03

Authorization

WorkOS AuthKit
Org + lab membership
Role + resource checks

Identity is verified first, then tenant and resource access are resolved in the application.

04

Data

DynamoDB
S3 archive
Audit records

Tenant data and archived plate records remain isolated behind the authorization layer.

Platform foundation
InfrastructureAWS CDK v2
Analysispandas + NumPy + SciPy
ReportingReportLab + matplotlib
OperationsIAM + CloudWatch

The application keeps identity, authorization, analysis, and persistence separate. WorkOS establishes identity, the backend resolves organization and lab context, and every tenant-scoped operation is checked before DynamoDB or archived S3 data is accessed. The entire AWS platform is reproducible in CDK.

Infrastructure evolution

QuicLens did not start on its current AWS platform. The first hosted version used Vercel for the React frontend and Railway for the FastAPI backend. I later re-platformed the application onto AWS: the frontend moved to a private S3 origin behind CloudFront, while the API moved to a container-image Lambda behind API Gateway, with the platform defined in AWS CDK v2.

The migration removed the Vercel/Railway deployment dependency while preserving the application model and making the current infrastructure reproducible in code.

Engineering decisions & trade-offs

Why serverless (Lambda + API Gateway) over a long-running server?

Lab usage is bursty, with heavy activity during analysis runs and little activity otherwise. Serverless means no idle cost and no servers to patch, and the FastAPI app stays portable (it runs identically locally and in Lambda via Mangum).

Why DynamoDB over a relational database?

The workload is dominated by known, key-based access patterns across organizations, labs, projects, plates, and results. DynamoDB provides predictable performance, on-demand scaling, GSIs for targeted lookups, and point-in-time recovery. Tenant authorization is enforced in the application layer rather than delegated to IAM or a partition key.

Why a container image for the Lambda?

The analysis stack (pandas/NumPy/SciPy) exceeds the zipped-Lambda size limits and is far simpler to manage as a container.

Tenant isolation as a first-class concern

Identity and authorization are deliberately separated. WorkOS verifies the user; application-owned organization and lab memberships establish tenant context; role checks and resource-level access rules govern reads and writes, including cross-lab sharing. The development history also includes explicit hardening of auth and cross-tenant data paths surfaced during self-audits.

Testing & reliability

My role: Sole engineer and architect: product design, data modeling, backend, frontend, infrastructure-as-code, and deployment. Built on my own time and hardware.