Skip to content

Turning down 50,000 dirhams: why PhytoNote stays GPL even when Arganor Labs writes the cheque

schedule 6 min read calendar_today Jul 22, 2026

A Casablanca cosmetics lab offered me 5,000 euros a year for a closed PhytoNote edition. I said no, and here is the compromise we found instead.

The LinkedIn message landed on a Tuesday afternoon in November 2025. I was on the tram heading back to Agdal, my phone battery at 7%, and I read it as we passed the Hassan tower stop. "Hello Saliha, we've been following your work on PhytoNote. Could you spare thirty minutes for a call this week? We have a QC problem we'd been stuck on for eight months."

The sender signed on behalf of Arganor Labs, a small Casablanca-based cosmetics R&D company specialised in rectified argan oils and a handful of Atlas essential oils (cedar, camphor rosemary, thyme thymol). I'd never heard of them but their website looked serious: ISO 22716 certification, two patents filed on deodorisation processes. I replied that same evening.

The problem: 18% variance between morning and afternoon

The call happened the following Thursday. Rabia, their QC director, walked me through the situation without preamble. They run total phenolic content (TPC, Folin-Ciocalteu method) on every batch of rectified argan oil leaving their line. It's the marker they use to grade premium cosmetic lots. The problem: two operators, on the same sample, six hours apart, were finding values that varied by a median of 18%. On the worst days, the gap climbed to 27%. Unacceptable for a German client who required a certificate of analysis on every shipment.

They had already audited the hardware. UV-1900 Shimadzu spectrophotometer calibrated the previous month, fresh transparent Greiner plates, Sigma Folin-Ciocalteu 2N reagent rotated every six weeks, 7.5% sodium carbonate, gallic acid standards prepared fresh daily. The calibration curve held its r² above 0.998. Nothing wrong with the instrument.

But when I asked to see their lab notebooks, I understood within two pages. Operators were recording their dilutions after the spectrophotometric read. Sometimes thirty minutes after. Someone would write "1/10 dilution" by hand, then their afternoon colleague would remember doing 1/8 "because the sample looked dark". No timestamp, no photo of the tube, no record of who prepared the blank.

Four tablets and one YAML

I proposed a three-week pilot deployment. Four Samsung Tab A8 tablets (theirs, already purchased for an aborted ERP project), one per QC bench. PhytoNote installed in kiosk mode, with a YAML protocol I wrote the following weekend: arganor_tpc_v2.yaml.

The YAML enforced constraints their paper workflow could never reach. Dilutions had to be entered at the moment of pipetting, with exact volume in µL and the pipette used. The app refused to save a spectro read if the blank absorbance exceeded 0.05. The day's calibration curve needed r² > 0.998 or the measurement was blocked. Each tube carried a QR code generated by PhytoNote, scanned before each manipulation, time-stamped into the tablet's local SQLite database.

I spent two days on site, in Aïn Sebaâ, training the six technicians and the QC head. November in Casablanca is unexpectedly humid, I had forgotten the climate of the coast. On day two I let Rabia run the training session alone while I observed from the back. That's how I gauge whether a procedure will survive my departure.

Three weeks later

On 12 December, Rabia sent me the consolidated CSV export. 342 measurements across 47 distinct batches, controlled by the six rotating operators. The median inter-operator variance had dropped to 4.1%. For premium lots, where they systematically duplicate the analysis, the variance sat at 2.8%. The German client signed off the January certificate of analysis without comment.

A week later the general manager called me again. He wanted an annual professional licensing contract. 50,000 dirhams per year, roughly 5,000 euros, for an "Arganor edition" of PhytoNote with two days of my technical support per quarter. For a PhD student self-funding her thesis through part-time teaching, that figure is not negligible. I teach 96 hours per year of organic chemistry tutorials at the university, which pays me the equivalent of 1,800 euros across the academic year. The Arganor contract would have nearly tripled my side income.

Why I said no

I took four days to answer. I wanted my decision to be honest, not a militant pose. The truth is more measured than that.

PhytoNote has been GPL-3.0 from its first line of code, because I wrote it to fix my doctoral chaos, with other Moroccan PhD students in mind, those of us juggling absurdly tight lab budgets. Had I agreed to maintain a closed "pro edition" for Arganor, I would have ended up running a private fork, prioritising their feature requests, slowly drifting into a model where the public development becomes a side concern. I've seen that scenario play out among friends who launched open source tools. Three years later, the public repo sits frozen.

I wrote back to Rabia and the GM with a counter-offer. Arganor could fund the development of industrial QC features (certified PDF export, electronic signature compliant with Moroccan law 09-08, LIMS integration via webhook) by sponsoring the public repo through a monthly GitHub sponsorship. Every feature developed would stay GPL and therefore usable by any other company. In exchange, I guaranteed roadmap priority on their tickets plus two days of support per quarter, billed at standard Moroccan freelance rates.

They accepted. It's less money than the original 50k DH, but it aligns with what I want to leave behind when I defend my thesis in 2027. A tool that serves labs other than my own, without me drowning in private technical debt that no one sees.

Do I regret it sometimes? Honestly, yes. The month my father had his cardiac scare in Salé, 50,000 dirhams in one shot would have helped more than a sponsorship spread across twelve months. GPL doesn't pay for medical care. But it pays for something else, more diffuse, that I'm still trying to articulate properly.

The Arganor industrial QC code lives in the cq-industrial branch of the PhytoNote repo. The arganor_tpc_v2.yaml sits in the protocols/ folder, depersonalised of course (the company is named with their consent, but no client data appears). The discipline Arganor pushed for — hard bounds, validation at the moment of the gesture — actually came from an earlier episode with a quercetin vial I had let slip during my PhD; I told that one in the vial-opened-in-November story.

I wish I could say the decision was easy. It wasn't. But it is made, and the branch is running.