Trying to diagnose myself with AI [Part 1]
For most of my life, I have experienced cramping stomach pain. It would be a flash of pain and then disappear for weeks or months. It's been such a normal part of my life, I've got used to it. However, after sharing with my partner, she was very clear that I should get tested.
Instead, I built a mobile app. Considering I don't think I am in any danger, I wanted to run an experiment. The goal: Successfully diagnose myself and then compare with a doctor's results. The plan: Collect as much data as I can (Food consumption, symptoms, stress levels, and my smartwatch's sleep, stress, and body battery statistics), then pass the data into an LLM to draw patterns and conclusions about what could be my trouble. Simple.
I gave myself rules to follow.
- 10s MAX to record any data.
- Learn to host an app myself on a VPS.
- Native development for iPhone
- Focus on minimal design
The first
*** I really wanted to pursue a path of never having to open the app. Placing widgets and using notifications as the main source of data gathering. However, I soon realised that it would cost $99 for an Apple Developer account to get access to those features. No, thanks. This also applied to the Apple Health app integration, so I had to find interesting ways to get around this.
Before starting the app, I researched what important information for a diagnosis was.
The first one was a unit-of-analysis insight. Logging "chicken curry" is useless. The trigger lives at the ingredient level and, more usefully, at the compound class level, so I built a pipeline that can efficiently take the ingredients down and break foods into their parts.
The second was the frequency of check-ins. Gastrointestinal symptoms appear 2-48 hours after the trigger. Once I finished the meal, I got a notification at 30/90/180 minutes after to check in.
Thirdly, Confounders are just as important as noting what I eat, apparently. I could have a bad gut due to stress or lack of sleep. That means setting up my smart watch to log my body battery, stress score, training load, overnight HRV, and sleep score. The last data point I capture is the Bristol Stool scale, as there is a lot of information that can be understood from this.
I began with the backend. I wanted to learn how to host on my own VPS. I have some experience with this, but I wanted to dive a little deeper. After some research, I chose to go with Hostinger, due to the service being price competitive, good support, and it will always be mine (I don't have to share the resource with anyone else). The backend will be responsible for storing collected data, running cron jobs, and handling calls between Openrouter. I also setup tailscale, a tunnel between my phone and VPS for security protection. I do not want any of my incredibly personal data getting leaked. No, thank you!
The research aided in writing the system prompt for the main diagnoses LLM, Opus 4.6. The role of Opus will be to consume the high amounts of data I create and start to find patterns. Opus has a tool that can write and store information in its local file system on the VPS. The goal here is to improve the KV Cache hit rate and save some money on credits. Opus is run on a cron job every night. It will categorise the information, build a picture and store its notes and early hypotheses.

It was time to design what I had in my head. Referring back to the rules, 10 seconds to input any information, minimal design, and IOS native app. Due to not being able to use widgets, I had to change my approach. To fit my goal, I wanted to remove anything that I wouldn't need on the app's home page. Looking at the screenshot, you can see that it's 6 hotkeys. They are everything I need to report. Clicking on the button, a modal pops up and allows me to input all the information, but after a day of using it, it was too long, and it can be much simpler. I settled on long press on the button and swiping to select, just like Apple's haptic touch. This massively increased the input time. [see video]
There is also a details panel, to give me more of a view of what is happening on the backend, like sync status between the app on the VPS, advice, the most recent hypothesis and a log of all my data input.
The meal button is doing most of the heavy lifting. I can take a picture of any food or drink, and then pass it through Gemini Flash 3 to quickly note and capture the data for me. I have also been able to take pictures of my food, and it's able to estimate/guess the ingredients, and I can amend and/or accept. So far, ar I am super impressed.

I spent last week running this app, and so far I am happy with it. I am giving myself 2-3 months to get a hypothesis. I will then book a doctor's appointment and get it correctly identified. I can cross-check with my own system. Also will be helpful to show the doctors when I am explaining my issue.
I hope you found this interesting. I will update in 2 months with the results and statistics.