Moonlight Build Log: Papa and I are building Moonlight with AI agents. I am the tech lead. I make the decisions and check the work. The agents write the code.
Anyone can open Moonlight now:
moonlight-1038733794937.asia-south1.run.app
It runs on Google’s computers in Mumbai. It is built but not checked yet. Tomorrow is checking day.
On Friday the Google screens beat me. Today I did it alone.
I chose “continuously deploy”. Now every time I merge, Google builds Moonlight again by itself. It is like a scoreboard that changes when a new time is recorded.
The search fix uses Gemini like a friend. You ask the friend, “what might this person mean?” Then Moonlight looks on the Open Targets map.
If Gemini says “dragon pox”, no button is shown. Gemini never creates a disease. I answered this wrong first. I thought the button showed Gemini’s word.
The results are now three tabs: Approved, In trials, New clues.
My decisions:
The last one is important. A grandmother takes a medicine because her doctor said so. If Moonlight says “Do not try it” next to her medicine, she might stop. That could hurt her. So the ending is only for clues.
On Friday I saw odd names on a page. Today an agent checked the real data. It was true. Medicines that were taken off the shelves were showing as new clues.
Think of a swimmer’s card. Moonlight only read the line “best race ever”, and that line said APPROVAL. Another line said “withdrawn”. Moonlight never read that line.
My decision: if any country took a medicine off the shelves, Moonlight leaves it out. It is counted, never named.
This changed my paper graph. Sitaxentan was on it as already approved, but it was withdrawn. My answer key was 16, 2, 6, 12. With the real data it is 16, 2, 5, 13.
The Approved tab has two doors: the proteins, and Open Targets’ own list. The first fix only put a guard on one door. Now both doors have a guard.
Asthma and migraine crashed the live site! Open Targets used two stage words Moonlight had never seen.
They go below phase 1 on my ladder. And if a new word ever comes, Moonlight does not crash. It treats the medicine as not approved and keeps going.
Asking permission is like sending in your entry form. Being in a trial is like being in the pool. The In trials tab is only for swimmers in the pool.
Moonlight has a guide now, called “How to use Moonlight”. It shows one real card, Doxapram, with gold letters A to H that explain each part.
My page has a rule: before a search, it names no medicine. The guide broke it. So the rule is now more exact. No names outside the guide, and only Doxapram inside it.
The draft had four sentences that were not true any more. The agent caught them and we fixed them.
At the bottom, in handwriting, it says “Made with care by a family in Kochi”. That was Papa’s idea.
Papa wanted a visitor counter. I said no. It is not useful right now, and my page loads nothing from outside.
A judge might ask, “Did you write this code yourself?” My answer: No. AI agents wrote it. But I decide how Moonlight behaves, and I do not merge anything until I understand it.
7edffbf Merge pull request #17: use-by date4f81ab7 Merge pull request #18: search that understands people36ee3c6 Ticket 5.3: three tabs, and approved medicines shown94ed454 Merge pull request #2093b75c5 Ticket 2.9: withdrawn medicines are left out067a636 Merge pull request #219b2abb2 Ticket 2.10: unclear link for IND, PRECLINICAL and unknown link wordse655bd8 Merge pull request #232dde798 Ticket 2.11: the list’s withdrawn medicines are left out and counted1a3111e Merge pull request #220371929 Ticket 5.4: the How to use Moonlight guide inside the page6149b38 Merge pull request #24Seven merges today. The tests went from 397 to 572, and they all pass.
Today I learned how to swim. Tomorrow I compete. I check five results and ten explanations by hand, Agastya tries to break it, and Mumma looks at the design.