Drink spiking is a common route to drug-facilitated sexual assault, and it is badly under-reported. Part of the reason is chemistry. The drugs most often used, such as GHB and benzodiazepines like alprazolam and clonazepam, have almost no colour, smell or taste. By the time someone realises that something is wrong, the evidence is often gone.
Why existing tests fall short
Laboratories can detect these drugs reliably with GC-MS, but that takes expensive equipment and time. The test strips sold to the public are cheaper, but most pair one reagent with one drug, so a strip built for GHB says nothing about a benzodiazepine. Many also struggle in exactly the drinks where spiking happens: cocktails, citrus juices and other coloured or acidic mixtures.
I wanted to know whether a single cheap test could screen one drink for several classes of drug at once, including drugs it had not been designed for.
Finding the reagent on a computer
Before making anything, I used molecular docking to search for a reagent. Docking predicts how strongly two molecules bind by fitting one into the other in many orientations and scoring each fit. Using Smina, I docked five spiking drugs (GHB, alprazolam, clonazepam, diazepam and zolpidem) against five components commonly found in drinks (citric acid, cyanidin-3-glucoside, ethanol, ethyl acetate and gallic acid), then used SwissADME descriptors to explain the results.
One compound stood out. Cyanidin-3-glucoside, a natural anthocyanin pigment found in berries, bound all five drugs most strongly. It has many hydrogen-bonding groups, and its colour changes with pH, which is what you want in an indicator that will be read by eye or by camera. GHB bound most weakly of the five, which fits with how hard GHB is to detect in practice.

Reading a pattern instead of a spot
A single colour change is easy to fool. So I designed the indicator as a strip of 14 zones, each responding slightly differently, and trained a machine-learning model to read the pattern across all of them. In use, a phone camera would photograph the strip and the model would return “spiked” or “safe” within minutes.
To test the idea, I trained an XGBoost classifier on a multi-channel sensor-response dataset. Its features were the 14 zone responses together with the drink type, the drug and its concentration. The data were split 80:20 into training and test sets, with a separate validation set used to choose the decision threshold.
What it found, and its limits
On the test set, the model reached an AUROC of 0.950 and an accuracy of 88.2%. It correctly identified 488 of the 559 spiked samples and 394 of the 441 unspiked ones, giving a precision of 91.2%, a recall of 87.3% and an F1 score of 89.2%.
The limitations deserve the same attention as the results. Smina was designed for protein–ligand docking, so the affinities between two small molecules are best read as rankings rather than exact binding energies. The model did not include drink pH, which changes both the structure and the colour of cyanidin-3-glucoside, and anthocyanins already present in berry juices and red wine could interfere with the indicator. GHB bound weakly to everything, so it will probably need a separate detection method.
The next step is to make the strip: fix cyanidin-3-glucoside onto paper, test its response in real drinks by UV-Vis spectroscopy, measure detection limits at the doses seen in real spiking cases, and extend the screen to ketamine and scopolamine.
