Musclog

AI-powered fitness & nutrition tracking — free & open source.

Smart workout tracking
AI photo nutrition logging
Detailed progress charts
100% private & on-device
Try it live
AndroidiOSWeb
Download the AppGoogle Play Store QR CodeScan to download for Android

From the workshop

Musclog Blog

Notes on building a private, open-source fitness app — from product decisions to the technology behind it.

Engineering

Adding light mode exposed my fake theme system

Musclog already had a theme file. Then I added five selectable palettes and discovered that colors, NativeWind variables, system mode, camera overlays, and component decisions were all separate systems pretending to be one.

MusclogReact NativeExpoNativeWindTypeScriptDesign Systems
Read article
Engineering

My camera took 25 seconds to take a photo

A shutter stall that only existed in release builds, survived eight versions and four wrong root causes, and turned out to be one background thread shared by every Expo module in the app.

MusclogReact NativeExpoAndroidCameraXKotlinPerformanceDebugging
Read article
Retro

Breaking my data out of a Game Boy cartridge

I logged a few weeks of food on a 1998 cartridge and then realised it was stuck in there for life. So the Game Boy now beams its save into my phone as a stream of fountain-coded QR codes — no cable, no network, no handshake.

Game BoyGBDKCQR CodesRetroHomebrewOptical Transfer
Read article
Web development

This blog was built using Expo

The page you are reading is a statically exported Expo Router route. Here is how generateStaticParams turns a folder of Markdown into HTML — and the three-hunk patch to expo-router I needed to make catch-all routes work at all.

ExpoExpo RouterStatic SiteReact NativeTypeScript
Read article
Retro

Creating a calorie tracker for the Game Boy Color

I put Musclog on a 1998 cartridge — 517 foods in ROM, macro goals packed into 23 bytes of battery-backed SRAM, charts drawn with background tiles, and 291 free bytes in the one bank that cannot be paged out.

Game BoyGBDKCRetroHomebrewNutritionWasmBoy
Read article
Machine learning

I trained my own model to get rep insights

A €20 sensor, a RandomForest, and Claude writing the ML code because I have no idea what spectral entropy means.

MusclogReact NativeExpoMachine LearningPythonBLEBluetoothFitness3D PrintingTinkercadWitMotion
Read article
Product updates

Musclog version 2 is out!

Musclog started in 2024 as an app I built for myself. Version 2 is a full rewrite — new UI layer, one database instead of two, and a much clearer answer to the question of where your data lives.

ReleaseReact NativeRewritePrivacyTypeScript
Read article