D'où vient PhytoNote
Un soir de novembre, vers 23h30, je retranscrivais des absorbances UV dans un tableur Excel. Les valeurs sortaient du spectrophotomètre, je les notais sur papier, puis je les copiais ligne après ligne. Le matin suivant, une concentration était inversée — un point IC50 sur l'arnica, plaque 96 puits, refait deux fois. Le reviewer du Journal d'Ethnopharmacologie a fini par demander de quel lot venaient les standards, à quelle date, avec quel solvant. On ne pouvait pas répondre proprement.
PhytoNote part de là. C'est l'outil que j'aurais voulu avoir au début de ma thèse pour ne plus retranscrire à la main, ne plus perdre la provenance d'un standard, et garder la chaîne complète entre la plaque et le tableau du papier.
Ce que l'app couvre
Huit essais UV de routine sont intégrés : DPPH, ABTS, FRAP, Folin-Ciocâlteu pour les phénols totaux, le dosage des flavonoïdes au chlorure d'aluminium, la catalase, BSA pour les protéines, et le calcul direct d'IC50 sur courbe dose-réponse. À chaque mesure, le moteur de validation tourne en moins de 200 ms : il vérifie la linéarité de la courbe d'étalonnage, l'absence de saturation au-dessus de 1,2 d'absorbance, la cohérence des replicats, et la fraîcheur du standard saisi.
L'export Excel multi-feuilles sort tout ce que le reviewer demande : la matrice brute, les courbes, les IC50 calculés avec leur intervalle de confiance, et les métadonnées de provenance (lot, date d'ouverture, solvant, opérateur). Le fichier est signé en SHA-256 — si on en change une cellule, la signature ne suit plus.
Pensé pour le terrain marocain
Beaucoup de mes mesures se font sans connexion. Sud du pays, missions sur Artemisia herba-alba ou sur la lavande de l'Atlas, on travaille au campement avec un téléphone et un spectrophotomètre portable. PhytoNote est offline-first : tout passe en local SQLite, et la synchronisation se fait quand on rentre. Pas de cloud obligatoire, pas de compte, rien qui parte sur un serveur sans qu'on l'ait demandé.
L'interface est dessinée pour la paillasse : grands champs tactiles, validation par couleur (vert / orange / rouge), et un bouton "marquer ce puits comme aberrant" qui propage l'exclusion dans le calcul d'IC50 sans qu'on ait à toucher au tableur.
Architecture
Flutter pour la couche application (Android, iOS, Windows, Linux depuis la même base de code), SQLite pour le stockage local, et un moteur de validation en Dart pur qui charge ses règles depuis un fichier YAML — chaque protocole de labo peut donc ajouter ses propres seuils sans toucher au code. L'export OOXML utilise xlsx côté Dart, et la signature de session passe par BLAKE3 + SHA-256.
Installer
Les binaires des plateformes principales se trouvent dans la fiche ci-dessus. Le code source est sous GPL-3.0, accessible sur GitHub — n'hésitez pas à ouvrir une issue si un protocole vous manque, ou à proposer une PR. La compilation locale demande Flutter 3.16+ et un SDK Dart à jour ; les instructions sont dans le README du dépôt.
Pour aller plus loin
L'article académique qui décrit la validation contre une cohorte de 320 mesures faites au labo se trouve en lien à droite. On y montre l'écart médian PhytoNote / saisie manuelle, le taux de faux positifs du moteur de validation, et un retour de trois mois d'usage en M2 de phytochimie à l'université Mohammed V.