Back to projects

MealPlanner

An Android app I built to plan my meals around what is already in the fridge, and to shop only for what is missing.

Role
Solo: planning, design, code and testing on my own phone
When
2026, still in use and in development
Size
10 screens, 150 built-in recipes, 1,829 more collected by my scraper
Tools
  • TypeScript
  • React Native
  • Expo
  • SQLite
  • AsyncStorage
  • Node.js
  • Python
Links

What it does

  • Today's plan: breakfast, lunch, dinner and snack slots, a daily calorie goal and a view of the week.
  • Browse: recipes filtered by meal time and tags such as vegetarian, high-protein or quick.
  • Fridge: a list of what I have. The Cook tab then shows the recipes I can make right now, and the ones missing three ingredients or fewer.
  • Voice input: I can say "I have eggs and milk but I ran out of flour" and the fridge list is updated in both directions.
  • Shopping list: the missing ingredients for the meals I planned.
  • Cook mode: step by step, split into preparing, cooking and assembling.
MealPlanner home screen: calories eaten today, the week, and empty meal slots for breakfast, lunch, dinner and snack.
The home screen on my phone.

How it works

Matching recipes to the fridge

Ingredient names never match exactly ("fresh chopped parsley" against "parsley"), so the matcher strips filler words and compares the remaining core words. Substitution groups let one ingredient stand in for another, for example different oils, pastas or stocks. Basic seasoning and baking staples are assumed to be in every kitchen, so a recipe is not blocked by a missing pinch of salt.

Voice input

The phone's speech recognition gives a sentence. My parser splits it into add and remove actions by looking for phrases like "I've got" and "ran out of", so one sentence can do both.

Recipe scraper

A separate Node.js tool collects recipes from three recipe sites into a SQLite database, and Python scripts clean up the images. It has collected 1,829 recipes so far.

App structure

React Native with TypeScript on Expo, bottom-tab and stack navigation, shared state in React context, and data saved on the phone with AsyncStorage.

What is not finished

The app still uses the 150 built-in recipes. Moving it to the scraped SQLite database is half done: the loading code exists but is not connected yet. The database is not in the public repository, because the recipes belong to the sites they came from. The account and community screens are placeholders.

How I used AI

I used Claude Code as a coding assistant for parts of the implementation. I decided what to build, tested every feature on my own phone, and changed it based on what I needed when I actually cooked.