Skip to content
DOI: 10.5281/zenodo.20376869 October 22, 2025

PhytoNote: offline-first application for validated UV spectrophotometry in phytochemistry

Saliha BOUAOUDA*

Abstract

PhytoNote came out of a bench observation. Most UV data-entry tools are Excel sheets, and they fall apart the moment you lose connection or put on gloves. I wrote it in Flutter, offline by default, with buttons of at least 72 dp so you can hit them without ungloving. Eight assays are built in. DPPH, ABTS, FRAP. CAT for total antioxidant capacity via molybdenum. TPC and TFC for total polyphenols and flavonoids. ANTIBAC and ANTIINF in series, on 96-well plates. Calibration runs live, visual indicators flag points falling outside the model, and IC50 regression happens on the spot. The editable catalog (plants, extracts, standards, bacteria, enzymes) lets you carry the lab's conventions through without rewriting at every assay. Export is a multi-sheet Excel workbook with raw data and calibration. That's deliberate. If a regulatory decision or a reviewer ends up looking at the numbers, the chain stays traceable.
AntibacterialAntifungalAntioxidant

1 Introduction

On a single-cuvette UV spectrophotometer, in a lab with no network and nitrile gloves, the standard cycle looks like this. You read the absorbance. You write on paper. Weeks later you transcribe into Excel and notice one point sits at 4.2 OD (saturated, therefore false), but the run was three weeks ago and the tubes are long gone. That silent loop costs time, sample, and sometimes publications. PhytoNote replaces it with immediate entry and visual validation in 200 ms. If a tube falls outside the acceptable range, the app flags it red while the cuvette is still on the bench. You redo it, you keep going. The need is not exotic. Routine UV assays in phytochemistry (DPPH, ABTS, FRAP, Folin-Ciocalteu, aluminium chloride, antibacterial microdilution) are among the most common manipulations in any lab working on plant extracts. Friction shows up elsewhere: transcribing values correctly, catching early when a calibration is drifting, and keeping records that hold up months later. PhytoNote targets those three specifically.

2 Materials & Methods

PhytoNote is a Flutter 3.5 / Dart 3.5 application, designed to run 100% offline. Storage is fully local via SQLite (sqflite package). No network call leaves the device for core operations: data entry, validation, IC50 calculation, Excel export. Target platforms: Android (split APKs arm64-v8a, armeabi-v7a, x86_64) and Linux desktop (.deb for Ubuntu 22.04+ / Debian 11+). Around 8 MB per binary. Windows and macOS builds are wired into the infrastructure but not yet distributed. The data model is deliberately minimal:
Catalog (plants, extracts, standards, bacteria, enzymes)
   ↓
Calibration (curve for one test/standard/lot combination)
   ↓
Session (measurements, live validation, calculations)
   ↓
Measurement (1 OD + 🟢🟡🔴 validation status)
Deleted records are archived via an is_archived flag rather than purged, preserving the audit trail.

The eight built-in assays

AcronymMeasuresStandardλ (nm)Output
DPPHAntioxidant activity (radical scavenging)Ascorbic acid / Trolox517IC50 (µg/mL)
ABTSAntioxidant activity (cation radical)Trolox / Ascorbic acid734IC50 (µg/mL)
FRAPReducing power Fe³⁺ → Fe²⁺Ascorbic acid700mg AAeq/mL
CAT (TAC)Total antioxidant capacity (molybdenum)BHT / AA / Trolox695mg STDeq/mL
TPCTotal phenolic content (Folin-Ciocalteu)Gallic acid765mg GAE/mL
TFCTotal flavonoid content (AlCl₃)Quercetin415mg QUEeq/mL
ANTIBACMIC / MBC by microdilution (CLSI M07-A11)Ciprofloxacin / Gentamicin600 nm or resazurine visualµL/mL
ANTIINFBSA denaturationDiclofenac / ASA / Indomethacin660IC50 (µg/mL)
ANTIBAC runs on a 96-well plate with a fixed layout: 8 extract dilutions across 8 replicates, plus T+ (growth) and T− (sterility) controls that must validate visually before the run is accepted. The other seven assays run in 1 mL cuvettes on a single-cuvette UV spectrophotometer. For inhibition assays (DPPH, ABTS, ANTIINF), a control is entered at the start of the session; its expected OD is set by default but editable per reagent lot.

3 Results & Discussion

Live validation

Every entered OD is checked immediately against the physical range (0 to 4 OD), saturation thresholds (above 3.5), and the deviation from expected control for inhibition assays:
  • 🟢 Green: OD between 0.1 and 3.5, no contextual warning.
  • 🟡 Yellow: OD equal to 0 (suspicious read), near saturation, or control deviation between 0.05 and 0.15.
  • 🔴 Red: physically impossible OD (below 0 or above 4), or control deviation above 0.15.
No "OK" button. The value is committed on entry; the color changes in under 200 ms. That delay is what makes correction possible: the tube is still in hand, the pipetting can be redone before the cuvette is rinsed.

Regression and IC50

Ordinary least squares linear regression. Linearity criterion displayed live: R² ≥ 0.97. For inhibition assays (DPPH, ABTS, ANTIINF):
IC50 = (50 − intercept) / slope
For direct-absorbance assays (FRAP, CAT, TPC, TFC):
equivalent = (OD − intercept) / slope
No non-linear model (4-PL, log-logistic) so far. That's a deliberate choice: linear regression stays visually interpretable and is sufficient for the default concentration range. Inhibition assays generate their acquisition plan automatically: 8 dilutions in halving series from 1000 µg/mL for DPPH and ABTS, from 200 µg/mL for ANTIINF. Direct-absorbance assays scale their concentrations to the extract type: 8 dilutions /2 from 1 mg/mL for regular extracts, from 100 mg/mL for essential oils in FRAP. TAC, TPC, and TFC are single-point assays at fixed concentration.

Live results banner

Under the app bar, a banner refreshes key statistics on every entry: IC50 or equivalent in mg standard/mL, R², and warnings (missing calibration, control out of range, excluded points). The user doesn't have to wait for the end of the session to see whether the curve is usable.

4 Discussion & Conclusion

Editable catalog and reproducibility

Five entities are managed in the local catalog: plants, extracts, standards, bacteria, enzymes. The catalog starts empty. Users either import JSON Starter Packs (common solvents, antioxidant standards, CLSI antibacterial panel) or create entries manually, with an optional anonymous code and arbitrary metadata. Each session records an immutable snapshot of the plant code and extract name at startup time. If the catalog is later edited (renaming an extract, archiving a plant, fixing a typo), historical sessions keep their original labels. That's what makes the history citable and resilient to catalog refactors.

Excel export

Export produces a multi-sheet workbook (.xlsx): a cover sheet (session metadata), a Calibration sheet (slope, intercept, R², lot opening date), a Raw measurements sheet (OD per concentration and replicate with validation status), a Calculations sheet (means, % inhibition, points retained for fit), and a Sample regression sheet (equation, IC50 or equivalents, warnings). The format is deliberately verbose. If a regulatory decision, a reviewer, or an audit comes back to the data years later, the chain stays traceable without having to reopen the app.

Session recovery

Interrupted sessions keep their active status and can be resumed at any time from the history screen. Auto-commit guarantees no entry is lost, even if the app is closed abruptly.

Distribution

All binaries are published on GitHub Releases: github.com/Saliha-BOUAOUDA/PhytoNote.
PlatformFileSizeTarget
Android arm64-v8aapp-arm64-v8a-release.apk8.0 MBSnapdragon 8xx, Exynos 9xx+, Dimensity
Android armeabi-v7aapp-armeabi-v7a-release.apk7.6 MBAndroid 7+, Snapdragon 400-600
Android x86_64app-x86_64-release.apk8.1 MBEmulators / Intel tablets
Linuxphytonote_1.0.1_amd64.deb8.3 MBUbuntu 22.04+ / Debian 11+
Linux dependencies: libgtk-3-0, libglib2.0-0, libstdc++6 — pre-installed on standard Ubuntu LTS.

Limitations and roadmap

PhytoNote does not drive the spectrophotometer. Entry stays manual even though evaluation is automated. Direct USB or Bluetooth integration could be added but is not in version 1.0. Non-linear regression (4-PL, log-logistic for sigmoidal dose-response curves) is not implemented. For the default concentration range, linear regression is sufficient; to extend toward strong inhibitors or very high concentrations, that will need revisiting. Internationalization: the interface is French at v1.0.1, with English and Arabic tabs marked "coming soon" in Settings.

References

  1. Brand-Williams, W., Cuvelier, M. E., & Berset, C. (1995). Use of a free radical method to evaluate antioxidant activity. LWT - Food Science and Technology, 28(1), 25-30. DOI: 10.1016/S0023-6438(95)80008-5
  2. Re, R., Pellegrini, N., Proteggente, A., Pannala, A., Yang, M., & Rice-Evans, C. (1999). Antioxidant activity applying an improved ABTS radical cation decolorization assay. Free Radical Biology and Medicine, 26(9-10), 1231-1237. DOI: 10.1016/S0891-5849(98)00315-3
  3. Benzie, I. F., & Strain, J. J. (1996). The ferric reducing ability of plasma (FRAP) as a measure of antioxidant power: the FRAP assay. Analytical Biochemistry, 239(1), 70-76. DOI: 10.1006/abio.1996.0292
  4. Singleton, V. L., & Rossi, J. A. (1965). Colorimetry of total phenolics with phosphomolybdic-phosphotungstic acid reagents. American Journal of Enology and Viticulture, 16(3), 144-158.
  5. Zhishen, J., Mengcheng, T., & Jianming, W. (1999). The determination of flavonoid contents in mulberry and their scavenging effects on superoxide radicals. Food Chemistry, 64(4), 555-559.
  6. Prieto, P., Pineda, M., & Aguilar, M. (1999). Spectrophotometric quantitation of antioxidant capacity through the formation of a phosphomolybdenum complex. Analytical Biochemistry, 269(2), 337-341.
  7. Clinical and Laboratory Standards Institute. (2018). Methods for dilution antimicrobial susceptibility tests for bacteria that grow aerobically (CLSI standard M07, 11th ed.).
  8. Bouaouda, S. (2026). PhytoNote (version 1.0.1) [Computer software]. Zenodo. DOI: 10.5281/zenodo.20376869