szczupag

Software Engineer

โ† All projects

Low FODMAP

FODMAPs are short-chain carbohydrates that the gut doesn't always absorb well. The name stands for Fermentable Oligosaccharides, Disaccharides, Monosaccharides And Polyols, and in practice it comes down to six groups. A few examples of foods high in each:

I was advised to follow a low FODMAP diet for a few weeks. To check individual foods, I started with the official FODMAP app from Monash University, where the diet was developed. The app is great: every food in it has been tested in their lab, and it tells you plainly how much of it you can eat.

Monash FODMAP app: a list of vegetables, each with green, amber and red serving sizes in grams. Monash FODMAP app: strawberries, with a traffic light for each FODMAP group at a 75 g and a 65 g serving.
The Monash University FODMAP app: serving sizes for each food, and a breakdown by FODMAP group.

The problem starts when you combine foods. Each one can be fine on its own, but FODMAPs from the same group add up across a meal, and there's no easy way to tell whether, say, some oats and a spoon of peanut butter together go over the limit.

In the past I used Fitatu every now and then to track calories or protein. Honestly, the only thing missing for me was FODMAP tracking. With that, it would have been perfect.

Fitatu: a day's breakfast with calories, protein, fat and carbs for each product, and daily totals against goals.
Fitatu app: calories and macros for each meal, but nothing about FODMAPs.

So I decided to build an app for my own needs. I wrote down all my requirements and how I imagined it would work, and with Claude's help the app was ready in one evening. My part was mostly setting up and configuring a VPS to run it on.

What it does

Every product has its macros and FODMAP limits for each of the six groups. I copy the limits from the Monash app by hand, since they don't offer a public API, but I only have to do it once for each food. For every logged meal, the app adds up the load for each group and labels the meal as safe, caution or avoid, next to calories and macros against my daily goals. The meals themselves I don't type in at all; more on that below.

Today screen: calories left, protein, fat and carbs, and each meal with a FODMAP label. Month calendar with days coloured by how the FODMAP load went, plus monthly stats. Recipes grouped into breakfasts and lunches, each with calories and a FODMAP label.
Today's meals, a month at a glance, and recipes.

The calendar colours each day by how the FODMAP load went and marks whether I hit my calorie and protein goals, with a summary for the whole month. Recipes keep their ingredients and a FODMAP label per serving, can be logged to the diary in one go, and can send their ingredients straight to the shopping list.

There's also a PDF export. I pick a period and get a report with averages against my goals, a day-by-day overview, which FODMAP groups went over the limit and because of what, and every meal listed with grams. It's useful when I want to show my meals to a dietitian and make sure I'm doing everything right.

First page of a weekly PDF report: averages against goals, a day-by-day chart and FODMAP groups that went over the limit. A page of the report listing one day's meals with grams, calories and macros.
A weekly report: the summary page and one of the days.

With the free version of Fitatu I had to add every product by hand, every time. To avoid that in my app, I added a Claude connector, since I already have a Claude subscription anyway. Now I just tell Claude what I had for a meal, and it adds it to the app: it finds the products, creates the ones that are missing and logs the right amounts.

The app is just for my own private use, which is also why its interface is only in Polish.

Screenshots of my app show made-up demo data, including the FODMAP values.