Skip to content
SoftwareData

FlavorFinder

Recipe search over 13,500 recipes, filtered by what is in your fridge and your kitchen.

CS50 final project · 2024

Screenshot of the FlavorFinder web application showing a search for squash and three matching recipe cards with photographs, above pagination running to 563 pages.
Searching 13,500 recipes for squash. Filters for ingredients, dietary restrictions and missing equipment sit behind the search box.

The problem

Recipe sites are built around the recipe, not around your kitchen. You find something you want to cook, and then discover it needs three things you do not have and a stand mixer you have never owned.

FlavorFinder inverts that. You tell it what is in your fridge, what you cannot eat, and what equipment you do not have, and it only shows you recipes you can actually make tonight.

What I built

A Flask application over a SQLite database of more than 13,500 recipes, with Bootstrap on the front end.

  • Ingredient filtering by ingredient, quantity and unit, so half an onion is not treated the same as three onions.
  • Dietary restrictions that exclude recipes outright rather than flagging them, because a vegan user does not want to scroll past meat.
  • Equipment exclusion, which is the filter I have never seen elsewhere and the one I use most.
  • Accounts and saved favourites, with registration, login and validation that reports its own errors rather than failing silently.
  • Pagination, because 13,500 results in one page helps nobody.
13,500+
Recipes in the searchable database
3
Filter dimensions: ingredients, diet, equipment

What I took from it

This was my CS50 final project. Most of the work was not the search. It was everything around it: validating input that arrives in the wrong unit, telling a user what went wrong in a way they can act on, and keeping a large result set navigable.

It is also where I learned that a schema decision made in the first hour will shape every query you write afterwards.

Stack

Python, Flask, SQLite, Jinja templates, Bootstrap and session-based authentication.

Source on GitHub · Demo video