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.
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.
A serverless, single-region AWS stack defined entirely in infrastructure-as-code.
Identity, authorization, analysis, and data access are separated into clear layers.
The browser receives a static frontend over HTTPS.
The analysis API runs as a container image on Lambda through Mangum.
Identity is verified first, then tenant and resource access are resolved in the application.
Tenant data and archived plate records remain isolated behind the authorization layer.
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.
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.
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).
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.
The analysis stack (pandas/NumPy/SciPy) exceeds the zipped-Lambda size limits and is far simpler to manage as a container.
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.