Skip to content
PhytoNote — logo

PhytoNote

The offline-first Flutter app to record, validate, and compute routine UV assays in phytochemistry.

v1.0.1 GPL-3.0 DOI: 10.5281/zenodo.20376869

Where PhytoNote came from

One night in November, around 11:30 p.m., I was copying UV absorbance values into a spreadsheet. The numbers came out of the spectrophotometer, I wrote them on paper, then transcribed them into Excel line by line. The next morning, one concentration was inverted — an IC50 point on arnica, 96-well plate, redone twice. The reviewer at the Journal of Ethnopharmacology eventually asked which lot the standards came from, when they were opened, which solvent. We couldn't answer cleanly.

PhytoNote starts from there. It's the tool I wish I'd had at the beginning of my PhD: no more manual transcription, no more lost provenance on a standard, and a chain of custody preserved from the plate to the table in the manuscript.

What the app covers

Eight routine UV assays are built in: DPPH, ABTS, FRAP, Folin-Ciocalteu for total phenolics, the aluminium-chloride flavonoid assay, catalase, BSA protein quantification, and direct IC50 computation on dose-response curves. With every measurement, the validation engine runs in under 200 ms: it checks the calibration linearity, flags absorbance saturation above 1.2, looks at replicate coherence, and verifies the freshness of the standard you entered.

The multi-sheet Excel export carries everything a reviewer asks for: the raw matrix, the curves, the IC50 values with their confidence intervals, and the provenance metadata (lot, opening date, solvent, operator). The file is SHA-256 signed — change a single cell and the signature stops matching.

Built for fieldwork in Morocco

A lot of my measurements happen with no network. In the south of the country, on Artemisia herba-alba missions or on Atlas-mountain lavender campaigns, we work from a base camp with one phone and a portable spectrophotometer. PhytoNote is offline-first: everything lives in a local SQLite store, and sync only runs when we're back. No mandatory cloud, no account, nothing leaves the device unless you ask.

The interface is designed for the bench: large touch targets, traffic-light validation (green / amber / red), and a "mark this well as outlier" button that propagates the exclusion into the IC50 calculation without having to touch the spreadsheet.

Architecture

Flutter handles the application layer (Android, iOS, Windows, Linux from a single codebase), SQLite stores everything locally, and a pure-Dart validation engine loads its rules from a YAML file — each lab protocol can add its own thresholds without touching the code. The OOXML export uses the xlsx Dart package, and session signing combines BLAKE3 with SHA-256.

Install

Binaries for the main platforms are listed in the fact sheet above. The source code is GPL-3.0 on GitHub — open an issue if a protocol you need is missing, or send a PR. Building locally requires Flutter 3.16+ and a current Dart SDK; the README in the repository covers the rest.

Further reading

The peer-reviewed article that describes the validation against 320 lab-bench measurements is linked on the right. It reports the median deviation between PhytoNote and manual entry, the false-positive rate of the validation engine, and three months of feedback from M2 phytochemistry students at Mohammed V University in Rabat.

PhytoNote — Plaque 96 puits
Plaque 96 puits
PhytoNote — Mesures
Mesures
PhytoNote — Calibration
Calibration
PhytoNote — Validation
Validation