Skip to content

Latest commit

ย 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงฌ Cell Division Timer

A quantitative cell-cycle kinetics & biological data analysis platform

License Python FastAPI

Cell Division Timer is a biotechnology-focused software platform for recording, validating, analyzing, and interpreting cell division and cell-cycle kinetics data generated from time-lapse microscopy and laboratory experiments.

The platform combines cell biology, quantitative kinetics, database engineering, REST API development, statistical analysis, and biological quality control into a single application โ€” designed as a foundation for future integration with live-cell imaging systems, laboratory information management systems (LIMS), computational biology pipelines, and bioprocess analytics platforms.

This project is a production-oriented research prototype, not a validated clinical or diagnostic system โ€” see Scientific Disclaimer.


๐Ÿ› ๏ธ Recent Engineering Audit

This delivery is the result of a full backend audit and hardening pass. Highlights:

  • Fixed a scientific data-integrity gap: division_duration_minutes and growth_rate could previously be supplied directly on create, silently overriding what the timestamps / cell-cycle duration implied. They are now always calculated, with an explicit, reason-documented *_override / *_override_reason field pair for the rare case a manual correction is genuinely needed (DB-enforced: an override and its reason are always set, or cleared, together โ€” never one without the other).
  • Fixed a PATCH validation gap: updating only one of division_start_time / division_end_time is now validated against the merged final record, not just the fields present in that request, so a partial update can no longer produce an end-before-start record.
  • Removed the create_all() / Alembic inconsistency: schema management is now owned exclusively by Alembic migrations (alembic upgrade head) in both the API startup path and the seed script; Base.metadata.create_all() remains only inside the isolated in-memory test database.
  • NCBI client hardening: requests now reuse a single pooled httpx.AsyncClient instead of opening a new one per call, and HTTP 429 responses are retried a bounded number of times with backoff (honoring Retry-After) instead of failing immediately.
  • Docker/security hardening: added a .dockerignore, the container now runs as a non-root user, and a live NCBI API key that had been left in a local .env file (never committed to git) was removed from the delivered project โ€” rotate that key if you haven't already.
  • Corrected several README/reference-range numbers that had drifted from the actual app.utils.biology implementation, and added docs/database_er_diagram.png.

๐Ÿ“‘ Table of Contents


๐ŸŽฏ Why This Project?

Cell-division experiments can generate hundreds or thousands of observations across:

  • Different cell lines
  • Experimental conditions
  • Temperatures
  • Biological replicates
  • Generations
  • Experimental batches
  • Microscopy sessions

Manually organizing and analyzing these observations creates problems with data consistency, reproducibility, quality control, kinetic calculations, outlier identification, experimental comparison, and downstream export.

Cell Division Timer addresses this by providing a structured system for storing observations and automatically deriving biologically meaningful kinetic parameters.


๐Ÿ”ฌ Biological Problem

The platform focuses on quantitative measurements associated with cellular proliferation and division.

1. Division Duration

The active division/mitotic duration is calculated as:

$$ T_{div} = \frac{t_{end} - t_{start}}{60} $$

where:

  • $t_{start}$ = beginning of observed division
  • $t_{end}$ = completion of division
  • $T_{div}$ = division duration in minutes

2. Cell-Cycle / Generation Time

The system records $T_d$, the time required for a cell lineage to complete one generation. This provides a basis for comparing proliferation kinetics under different experimental conditions.

3. Specific Growth Rate

For an exponentially growing population:

$$ N(t) = N_0 e^{\mu t}, \qquad \mu = \frac{\ln(2)}{T_d} $$

where:

  • $N(t)$ = population at time $t$
  • $N_0$ = initial population
  • $\mu$ = specific growth rate
  • $T_d$ = doubling time

The API automatically derives $\mu$ from the recorded cell-cycle duration.


๐Ÿงช Biological Quality Control

The platform doesn't just store measurements โ€” it evaluates observations against biological plausibility rules.

QC capabilities:

  • Division-duration validation
  • Cell-cycle validation
  • Temperature validation
  • Biological outlier detection
  • Experimental-condition filtering
  • Batch-level analysis
  • Statistical summaries
  • Quality flags

Example quality states:

PASS
OUTLIER_DURATION_EXCESSIVE
OUTLIER_TEMPERATURE_EXTREME
SUSPECT_DIVISION_EXCEEDS_CYCLE

Reference ranges for representative biological systems:

Organism / Model Division Duration Cell Cycle Normal Temp.
S. cerevisiae 15โ€“55 min 1.0โ€“4.5 hr 18โ€“40 ยฐC
E. coli 8โ€“35 min 0.25โ€“2.5 hr 15โ€“44 ยฐC
S. pombe 15โ€“60 min 1.8โ€“5.0 hr 18โ€“38 ยฐC
Human / HeLa 35โ€“160 min 14โ€“40 hr 32โ€“41 ยฐC
Mouse / NIH-3T3 35โ€“150 min 12โ€“36 hr 32โ€“41 ยฐC

These are QC / reference-screening thresholds, not biological absolutes. app.utils.biology.BIOLOGICAL_REFERENCE_RANGES encodes reasonable domain heuristics used to flag implausible data entry (e.g. more than 2ร— outside the typical window for that organism), not peer-reviewed diagnostic cutoffs. They are not a substitute for laboratory-specific validated SOPs, and no literature citation is claimed for the exact numeric bounds โ€” treat them as an assumed/reference dataset, not a sourced one.


๐Ÿ—๏ธ System Architecture

System Architecture

Database ER Diagram

The backend follows a layered architecture that separates API handling, business logic, data access, and persistence.

                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   Client / Laboratory    โ”‚
                    โ”‚       Data Source        โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                           HTTP / JSON / CSV
                                 โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚       FastAPI API         โ”‚
                    โ”‚                           โ”‚
                    โ”‚ Cells                     โ”‚
                    โ”‚ Divisions                 โ”‚
                    โ”‚ Analytics                 โ”‚
                    โ”‚ Data Transfer             โ”‚
                    โ”‚ Health                    โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                           Service Layer
                                 โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚      Business Logic       โ”‚
                    โ”‚                           โ”‚
                    โ”‚ Cell Service              โ”‚
                    โ”‚ Division Service          โ”‚
                    โ”‚ Analytics Service         โ”‚
                    โ”‚ CSV Service               โ”‚
                    โ”‚ Biological Calculations   โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                         Repository Layer
                                 โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚       SQLAlchemy          โ”‚
                    โ”‚        ORM Layer          โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  PostgreSQL / SQLite      โ”‚
                    โ”‚                           โ”‚
                    โ”‚ Cells                     โ”‚
                    โ”‚ Division Records          โ”‚
                    โ”‚ Experimental Metadata     โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Implemented using FastAPI, SQLAlchemy 2.0, Pydantic v2, and Alembic, with PostgreSQL intended for production and SQLite available for development/testing.


โš™๏ธ Technology Stack

Backend

  • Python 3.12+
  • FastAPI
  • Pydantic v2
  • SQLAlchemy 2.0
  • Alembic
  • PostgreSQL / SQLite
  • HTTPX (async NCBI E-utilities client)
  • Standard library logging (structured console logging)

Data & Analytics

  • Statistical aggregation (mean, median, std dev, CV) via the standard library
  • Biological kinetic calculations
  • CSV/JSON data processing
  • PubMed literature evidence via NCBI E-utilities

Infrastructure

  • Docker & Docker Compose
  • Environment-based configuration

Testing

  • Pytest
  • FastAPI TestClient
  • In-memory SQLite test database
  • Biological formula tests
  • API validation tests

Frontend / Client

  • Vite-based JavaScript/TypeScript client for the biological data platform

๐Ÿ“‚ Project Structure

cell_division_timer/
โ”‚
โ”œโ”€โ”€ cell_division_timer_fastapi/
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ alembic/
โ”‚   โ”‚   โ””โ”€โ”€ versions/
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ api/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ routes/
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ analytics.py
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cells.py
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ data_transfer.py
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ divisions.py
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ health.py
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ literature.py
โ”‚   โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ deps.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ core/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ config.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ database.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ logging.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ middleware.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ base.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cell.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ division.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ repositories/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ base.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cell_repository.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ division_repository.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ schemas/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ analytics.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cell.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ common.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ division.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ literature.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ services/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ analytics_service.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cell_service.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ csv_service.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ division_service.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ncbi_service.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ utils/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ biology.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ pagination.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€ main.py
โ”‚   โ”‚   โ””โ”€โ”€ seed.py
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ synthetic_cell_divisions_100.csv
โ”‚   โ”‚   โ””โ”€โ”€ synthetic_cell_divisions_100.json
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ output/
โ”‚   โ”‚   โ””โ”€โ”€ cell_division_export.csv    
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ scripts/
โ”‚   โ”‚   โ”œโ”€โ”€ export_data.py
โ”‚   โ”‚   โ”œโ”€โ”€ seed.py
โ”‚   โ”‚   โ””โ”€โ”€ ncbi_manual_check.py
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ tests/
โ”‚   โ”‚   โ”œโ”€โ”€ conftest.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_analytics.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_biology.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_cells.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_csv.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_divisions.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_health.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_literature.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_ncbi_service.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_seed.py
โ”‚   โ”‚   โ”œโ”€โ”€ test_validation.py
โ”‚   โ”‚   โ””โ”€โ”€ test_versioning.py
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ docker-compose.yml
โ”‚   โ”œโ”€โ”€ pytest.ini
โ”‚   โ”œโ”€โ”€ requirements.txt
โ”‚   โ”œโ”€โ”€ .env.example
โ”‚   โ””โ”€โ”€ README.md
โ”‚
โ”œโ”€โ”€ data/
โ”œโ”€โ”€ output/
โ”œโ”€โ”€ public/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ lib/
โ”‚   โ”‚   โ””โ”€โ”€ api.ts        (typed client for the FastAPI backend, incl. literature search)
โ”‚   โ””โ”€โ”€ data/
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tsconfig.json
โ”œโ”€โ”€ vite.config.ts
โ””โ”€โ”€ README.md

The repository currently contains separate frontend and FastAPI backend components, along with synthetic data, database files, and configuration files.


๐Ÿ—„๏ธ Database Design

The core relational model contains two primary entities.

cells

Represents the biological cell line / specimen.

id
name
organism
cell_type
passage_number
source_line
description
created_at
updated_at

cell_division_records

Represents an individual cell-division observation.

id
cell_id
experimental_batch
replicate
experimental_condition
medium
temperature_celsius
generation
division_start_time
division_end_time
division_duration_minutes        # official value: calculated, or an explicit override
cell_cycle_duration_hours
growth_rate                      # official value: calculated, or an explicit override
duration_override_minutes        # nullable; must be paired with a reason
duration_override_reason         # nullable; required whenever an override is set
growth_rate_override             # nullable; must be paired with a reason
growth_rate_override_reason      # nullable; required whenever an override is set
is_outlier
quality_flag
notes
metadata_json
created_at
updated_at

division_duration_minutes and growth_rate are always derived from the source measurements (division_start_time/division_end_time and cell_cycle_duration_hours) unless a scientist explicitly sets one of the *_override fields together with its *_override_reason โ€” a CHECK constraint enforces that an override value and its reason are always set (or cleared) together, so a manual correction can never silently look like a raw calculation. The API always returns both the official value and the raw calculated_duration_minutes / calculated_growth_rate, so an active override is never invisible to a caller. See docs/database_er_diagram.png for the full schema, including indexes and constraints.

Relationship:

Cell
 โ”‚
 โ”œโ”€โ”€ Division Record 1
 โ”œโ”€โ”€ Division Record 2
 โ”œโ”€โ”€ Division Record 3
 โ””โ”€โ”€ ...

Foreign-key constraints and validation rules maintain data integrity.


๐Ÿงฌ Synthetic Benchmark Dataset

Real microscopy datasets are often proprietary or difficult to distribute, so the project ships a deterministic synthetic dataset with 100 observations.

Cell models

S. cerevisiae BY4741       โ†’ 25 observations
E. coli K-12 MG1655        โ†’ 25 observations
HeLa CCL-2                 โ†’ 25 observations
NIH/3T3 Fibroblast         โ†’ 25 observations

Experimental conditions

Control
Nutrient Depletion
Thermal Stress
Rapamycin Inhibition
Osmotic Stress

Additional metadata

  • Experimental batches
  • Replicates
  • Generations
  • Temperature
  • Cell-cycle duration
  • Division duration
  • Growth rate
  • QC classification

The dataset intentionally includes biologically characterized outliers to test the quality-control pipeline.


๐Ÿš€ API

RESTful endpoints exposed through FastAPI.

Health

GET /health

Checks application and database connectivity.

Cells

Method Endpoint Description
POST /api/v1/cells Create cell
GET /api/v1/cells List cells
GET /api/v1/cells/{id} Retrieve cell
PUT /api/v1/cells/{id} Update cell
DELETE /api/v1/cells/{id} Delete cell

Cell Division Records

Method Endpoint Description
POST /api/v1/divisions Create observation
GET /api/v1/divisions List observations
GET /api/v1/divisions/{id} Retrieve observation
PUT /api/v1/divisions/{id} Update observation
DELETE /api/v1/divisions/{id} Delete observation

The service layer automatically handles relevant biological calculations when observations are created or updated.


๐Ÿ“Š Analytics API

Endpoint Description
GET /api/v1/analytics/summary Overall kinetic statistics
GET /api/v1/analytics/by-cell-type Kinetics stratified by cell type
GET /api/v1/analytics/by-condition Comparison across experimental conditions
GET /api/v1/analytics/by-temperature Analysis of temperature-associated kinetics

๐Ÿ“– Literature Evidence (NCBI / PubMed)

Endpoint Description
GET /api/v1/literature/search?query=...&retmax=... Search PubMed via NCBI E-utilities and return normalized article metadata (PMID, title, authors, journal, date, DOI, abstract)

This integration is backend-only. The frontend's "Literature Evidence" tab calls this endpoint through src/lib/api.ts โ€” it never talks to NCBI directly and never sees an API key. Requires NCBI_API_KEY to be set in the backend's .env file; see the backend README for the full request/response shape and error-handling behavior.


๐Ÿ”„ CSV Data Transfer

Experimental datasets can be imported/exported through the API, enabling integration with Excel, Python analysis pipelines, R, MATLAB, laboratory databases, LIMS systems, and microscopy analysis software.

Microscopy Data
      โ†“
CSV
      โ†“
Cell Division Timer
      โ†“
Validation
      โ†“
Biological Calculations
      โ†“
QC / Outlier Detection
      โ†“
Database
      โ†“
Analytics
      โ†“
CSV / JSON Export

๐Ÿงช API Versioning

The project implements API versioning to support long-term evolution of the platform.

  • Stable API โ€” /api/v1/...
  • Beta API โ€” /api/v2/...

The backend also supports header-based and query-based version selection for compatible unversioned routes, e.g.:

X-API-Version: 2
/api/divisions?api-version=2

This lets new biological analytics capabilities be introduced without immediately breaking existing clients.


โšก Local Installation

1. Clone the repository

git clone https://github.com/sunilnarayan419-ui/cell_division_timer.git
cd cell_division_timer

2. Enter the FastAPI backend

cd cell_division_timer_fastapi

3. Create a virtual environment

Windows:

python -m venv .venv
.venv\Scripts\activate

Linux / macOS:

python3 -m venv .venv
source .venv/bin/activate

4. Install dependencies

pip install -r requirements.txt

5. Configure environment variables

Copy .env.example to .env, then configure the database and application settings. To enable the Literature Evidence feature, also add your own free NCBI API key (see the backend README) โ€” everything else works fine without it.


๐Ÿ—ƒ๏ธ Database Setup

Run Alembic migrations:

alembic upgrade head

The project uses Alembic for version-controlled database schema migrations.


๐ŸŒฑ Seed Synthetic Data

python -m app.seed

or, using the provided script:

python scripts/seed.py

This populates the database with the benchmark cell-division dataset.


โ–ถ๏ธ Start the API

uvicorn app.main:app --reload

The API will be available at http://localhost:8000.


๐Ÿ“š API Documentation

FastAPI automatically generates interactive API documentation:

  • Swagger UI โ€” http://localhost:8000/docs
  • ReDoc โ€” http://localhost:8000/redoc

These interfaces let developers and researchers interactively test the API without writing a separate client.


๐Ÿณ Docker

cd cell_division_timer_fastapi
cp .env.example .env   
docker compose up --build

Deploys the application and PostgreSQL database together. docker-compose.yml loads .env via env_file:, so it must exist before you run docker compose up.


๐Ÿงช Testing

Covers biological calculations, cell CRUD, division CRUD, analytics, CSV import/export, database health, synthetic data seeding, validation, API versioning, and the NCBI/PubMed literature integration (fully mocked โ€” no real NCBI API key or network access required to run the suite).

pytest

Verbose output:

pytest -v

๐Ÿ“ˆ Example Analytical Workflow

1. Register cell line
2. Record experimental condition
3. Record division start/end
4. Calculate division duration
5. Record cell-cycle duration
6. Calculate specific growth rate
7. Apply biological QC
8. Flag potential outliers
9. Aggregate observations
10. Compare experimental conditions
11. Export results

This makes the application useful not only as a timer but as a small experimental data-management and quantitative biology platform.


๐Ÿ”ฌ Potential Real-World Applications

Cell Biology

  • Cell-cycle analysis
  • Mitotic timing
  • Cell-line comparison
  • Drug-response experiments

Cancer Biology

  • Cell proliferation studies
  • Mitotic arrest analysis
  • Drug-induced cell-cycle perturbation
  • Treatment-condition comparison

Bioprocessing

  • Microbial growth kinetics
  • Fermentation monitoring
  • Temperature-stress analysis
  • Growth-rate comparison

Imaging & Microscopy (future integrations)

  • Time-lapse microscopy
  • Image segmentation pipelines
  • Cell tracking algorithms
  • Computer vision systems
  • Automated phenotype detection

๐Ÿ”ฎ Future Roadmap

  • Live-cell microscopy integration
  • Automated cell tracking
  • Computer-vision-based division detection
  • Cell lineage visualization
  • Growth curves
  • Kaplanโ€“Meier-style division analysis
  • Advanced statistical testing
  • Experimental batch comparison
  • Drug-response modeling
  • Dose-response analysis
  • LIMS integration
  • Authentication and role-based access control
  • PostgreSQL production deployment
  • Cloud deployment
  • Real-time experiment monitoring
  • Research dashboard
  • ML-based anomaly detection

๐Ÿ”’ Security & Dependencies

  • The NCBI API key lives only in the backend's .env file (never committed, never logged, never sent to the frontend). See Security Notes in the backend README for the full rundown.
  • The core application has no dependency on paid AI APIs. An earlier scaffold pulled in an unused @google/genai (Gemini) dependency and Express/dotenv/tsx tooling with zero actual usage in the codebase โ€” these have been removed. Literature evidence comes from the free NCBI E-utilities API, not from a generative AI model.

โš ๏ธ Scientific Disclaimer

This project is intended for software development, educational, computational biology, and research-prototyping purposes.

The biological reference ranges and QC rules included in the synthetic benchmark should not be interpreted as universal biological standards. For real laboratory use, reference ranges and QC thresholds should be validated against experimental protocol, cell line, organism, instrumentation, environmental conditions, laboratory SOPs, published literature, and experimental controls.


๐Ÿค Contributing

Contributions are welcome. Possible areas:

  • Biological models
  • Statistical analysis
  • API development
  • Database optimization
  • Visualization
  • Computer vision
  • Microscopy integration
  • Testing
  • Documentation

Workflow

git clone <repository>
git checkout -b feature/my-feature

# Make changes

git add .
git commit -m "Add: my feature"
git push origin feature/my-feature

Then open a Pull Request.


๐Ÿ“„ License

Licensed under the MIT License. See LICENSE for details.


๐Ÿ‘จโ€๐Ÿ’ป Author

Sunil Mandloi Biotechnology / Life-Sciences Technology

Interested in: Biotechnology ยท Computational Biology ยท Life-Science Data Analytics ยท Bioinformatics ยท Healthcare Technology ยท Scientific Software ยท Biotechnology Business & Strategy


๐Ÿงฌ Project Vision

Turn biological observations into structured, reproducible, and decision-ready data.

Cell Division Timer is intended to evolve from a laboratory timing utility into a broader computational life-sciences analytics platform, connecting experimental biology with software engineering, quantitative analysis, and ultimately real-world biotechnology workflows.


โญ If you find this project useful for learning, experimentation, or biotechnology software development, consider starring the repo: https://github.com/sunilnarayan419-ui/cell_division_timer

Releases

Packages

Contributors

Languages