For a long time the app only existed on my laptop. Getting it off my laptop meant two boring problems and one thing I did not expect.
Problem one: too heavy
The database of FDA labels I had been building against was 169 megabytes, most of it raw label text I did not need at lookup time. A web demo does not want to drag that around. So I built a slimmed copy that keeps the drug names and the label text a user actually reads, and drops everything else. It came out to 77 megabytes. Same answers, less than half the weight.
Problem two: thin brands
The second problem was that my data made household names look sad.
Type tylenol and you got exactly one product, Extra Strength, because my earlier ingest had saved a single label per brand. Real drugstore brands are not one product. Tylenol is a shelf. So I wrote a step that pulls up to twenty-five real labels per common consumer brand and folds them in. The corpus went from 1,742 labels to 2,419. Now advil leads with actual Advil and tylenol opens the whole shelf.
Then it went up on a Hugging Face Space, and it ran. The thing that had been a notebook was now a URL anyone could open. It lives here: huggingface.co/spaces/GPUburnout/fda-drug-lookup. If you want to test drive it, or try to break it the way I did in the last chapter, go ahead. The cocaine one still gets a firm no.
Keeping it fresh without a model
A drug database that never updates is a liability with a countdown on it. Labels change. Warnings get added. So the app has to stay current, and that raised the interesting question. How do you keep a medical database fresh without putting a model anywhere near it.
The answer is a small agent that runs every morning and contains no AI at all.
It asks the FDA’s open database one plain question: which labels changed in the last few days. It takes only the ones already in my corpus and rebuilds the slim database from them. It also watches one field in particular, the boxed warning, which is the most serious safety text a label can carry, and it flags any label where that text was added or changed. No model reads anything. It is a scheduled script doing deterministic bookkeeping, which is exactly what you want minding safety data.
I made one deliberate omission. Drug recalls live in a different FDA system, and I chose not to pull them in. A half-complete recall feed is worse than none, because it looks authoritative while quietly missing things. So instead of half-tracking recalls, the app says plainly that it does not track them and points you to the FDA. It also tells you, in the corner, the month its data is current as of. It is a snapshot, and it says so.
The part I did not expect
Here is the thing that surprised me. The boring architecture is not just safer to use. It is safer to own.
A tool that looks up FDA labels and shows you what they say is, in legal terms, a reference book. It sits in the same category as Drugs.com and the FDA’s own DailyMed, and that category has a twenty-five year track record of not getting sued into the ground. A tool that generates medical advice is a different animal, and that animal does not have a good survival rate. The graveyard is well populated.
Babylon Health had an AI symptom checker that dazzled politicians and a valuation in the billions. Then regulators started asking whether the symptom checker actually worked. By 2023 the company was in administration, and what was left of it sold for about half a million dollars. Which is a rounding error for a company once worth billions, and also more money than I have ever made in my life. For one shining afternoon I wondered whether the real play was to build something enormous and drive it into the ground exactly like this, because even the crater still sells for half a million. Then I remembered that you inherit the lawyers along with the logo.
Tessa was a chatbot the National Eating Disorders Association brought in to replace its human helpline staff, who had just unionized. Within days it was telling people with eating disorders to count calories and aim for a daily deficit. It was taken offline two days before it was supposed to replace the humans for good.
MD Anderson put IBM’s Watson to work recommending cancer treatments. Reviewers reportedly found some of the recommendations unsafe and incorrect, which, I have to say, sounds a lot like my model handing someone Ambien for their depression. The difference is that MD Anderson paid sixty-two million dollars for the privilege, and I managed it in an afternoon for free. The project was quietly benched.
You do not even have to be a medical app to get caught. Air Canada’s chatbot invented a refund policy that did not exist, and when the customer sued, the airline argued in court that the chatbot was a separate legal entity responsible for its own actions. The tribunal was not amused. Air Canada paid.
The line between those two fates is exactly the line I drew in chapter two. When there is zero AI-generated content on the path to the user, there is nothing to hallucinate and nothing for a regulator to reclassify as a medical device. The deterministic choice I made for safety turned out to be the same choice that keeps the whole thing a reference tool instead of an unlicensed doctor. I did not plan that. It fell out of the architecture.
What the whole thing taught me
I set out to build something really smart. Like, Dr. Sanjay Gupta smart. You know the one, the neurosurgeon from CNN. In the version in my head, I gave the conference talk, and there was a slide people photographed. The Wall Street Journal wanted to know how a solo developer beat companies with real funding, and in the interview I said something modest and profound. There was a feature with a headline like How One Person Built a Medical AI in a Spare Bedroom. I had the byline before I had a working app.
I shipped something boring instead, and the boring thing is the one that actually ships and does not keep me up at night. No calls from lawyers. No calls from angry doctors or pharmacists who trusted it and got burned. The doctor in the basement types a drug name and gets that drug, and the worst day she has is the one where she types it twice, or the one where the app politely says no match, please try again. Nobody has been handed Ambien for their depression. It turns out boring is just another word for nobody got hurt.
The lesson underneath it is not really about drugs or FDA labels. It is about where you let a probabilistic system make a decision. A language model is a wonderful reader and a dangerous authority. Point it at language, which is what it is for, and it earns its place. Point it at a decision that has to be right, and its confidence becomes the most dangerous thing in the room.
BioLlama, the bigger thing I wanted to build back in chapter one, is still parked. When it comes back, it comes back knowing where its own line goes. Deterministic where it must be. The model only where being wrong is survivable.
That is the whole season. I spent months learning it the expensive way, so the next thing I build starts already knowing it.
Thanks for reading.
