11:32 PM in the Rabat phytochemistry lab. One swapped UV absorbance in Excel, three lost days, ruined arnicaline standard. That night, I decided to learn Flutter.
It was 11:32 PM when I switched off the spectrophotometer. I remember the time because the buzzing clock in the corridor, the one that hums above the phytochemistry lab door, had just clicked over. I was in my first year of doctoral studies at the Faculty of Sciences in Rabat, and my day had started at 8 AM with arnica extract preparation. Fourteen hours later, I still had three columns of numbers to transcribe into Excel before I could go home.
The plate, the notebook, the doubt
On the bench, my transparent Greiner 96-well microplate was waiting for its fate. I was running a standard DPPH assay with ten concentrations in triplicate, plus blanks and trolox controls. The UV-1900 Shimadzu had just spat out its absorbance readings at 517 nm. I had written everything by hand in my bench notebook, in pencil, because that's what I had been taught to do.
Nobody tells phytochemistry PhD students that past 11 PM, after a day of pipetting HPLC-grade methanol, writing becomes mechanical. You copy. You stop really reading what you write. All you know is that you want to finish and go home for a shower.
The lab was empty. My thesis director, Prof. Lemhadri, had left at 7 PM. The fume hood fans were humming. Someone had left a radio on at the far end of the corridor, a Moroccan show on Médi 1, voice muted. I could hear my own mouse clicks as I typed numbers into the spreadsheet.
The morning after
I came back the next day at 9 AM, coffee in hand, ready to finalize my inhibition curve. I opened the file. The curve looked wrong. Instead of the usual sigmoid, I had a bump in the middle, as if the antioxidant activity had dropped between 50 and 100 µM before climbing back up. Biologically impossible. Not with pure arnicaline.
I reread the notebook. I reread Excel. I reread one more time. Somewhere between the two, I had swapped two values. My 25 µM had landed in the slot for 75 µM. A late-night attention slip at 11:40 PM that wrecked the whole IC50.
I called my supervisor. Her calm voice on the phone, no reproach, just a statement: you need to redo it. Three days to prepare a new arnicaline stock solution, redo the dilution series, run a fresh plate, read the spectro again. The arnicaline standard costs around 380 dirhams for 5 mg from our supplier, and I had burned a good half of it for nothing. Plus the lost time. Plus the inner shame of having let such a silly error contaminate three days of bench work.
The idea that grew on the taxi ride home
That evening, in the taxi back to Agdal, I kept turning the problem over. Why was I still transcribing numbers by hand when the spectro already knew what it had measured? Why did quality control land at the exact moment I was most tired, which is to say most exposed to error?
I had already cobbled together Excel macros to automate IC50 calculations, but the problem was not the calculation. The problem was data entry. The problem was that fatigue window, between the measurement and the spreadsheet, where human error sneaks in.
I needed a tool that captures the value straight from my fingers the moment I read it off the spectro screen, validates it immediately against expected bounds, and stores it with a timestamp. Not three hours later. Not after I finish the plate. Right then. The instant the absorbance shows up.
Learning Flutter under pressure
I was not a developer. I had taken two years of Python at university for my statistical analyses, and a bit of R for PCA. But a native mobile app sat well outside my scope.
The weekend that followed, I downloaded Flutter and the Android SDK. I picked Flutter because I wanted the app to run on Khadija's old Samsung as well as on Prof. Lemhadri's iPad. Dart came quickly, surprisingly so. The widget system makes sense when you come from a background where you think in molecular hierarchies.
The first version of PhytoNote shipped four months later. A clean input page, one field per well, 200-millisecond validation on each value (min/max bounds depending on the assay type), and a four-parameter non-linear regression IC50 calculation as soon as the plate is complete. No transcription. No double entry. No pencil-and-paper notebook at 11:32 PM.
What I did not see coming
What I had not anticipated is that other PhD students in the lab were going to ask for a copy. Then the master's students. Then a colleague from a neighbouring team working on antimicrobial activity in prickly pear extracts. Each one with her own protocol, her own constraints, her own bounds. PhytoNote had to become configurable. That is where the YAML layer was born, defining each assay and making the app usable beyond my single use case.
Today, I have lost count of how many IC50 values I owe to that November night. All I know is that I will never again transcribe absorbances by hand at 11:30 PM. Not for comfort. For scientific discipline. The data my bench work generates deserves better than my fatigue.
If you want to see what PhytoNote looks like today, the application page walks through the supported assays, the YAML validation layer, and how the offline mode behaves in real lab conditions. I also wrote a plain-language piece about its day-to-day role on the bench. For background on my research trajectory, my CV is online.