Back to Projects

Home Cooking Platform

A full-stack recipe platform with real multi-constraint search, not a toy CRUD demo.

FlaskPostgreSQLSQLAlchemySQL

The Problem

Recipe apps often ignore practical constraints — what ingredients you actually have on hand, or real dietary restrictions — and just return anything that loosely matches a search term.

The Approach

Built a full-stack Flask + PostgreSQL application around a real 10-table relational schema, with search logic that dynamically builds parameterized SQL to match ALL of a user's selected ingredients and dietary restrictions at once — not just any of them — plus session-based auth and a live-updating review/rating system.

Home Cooking Helper search interface with ingredient, cuisine, and dietary restriction filters
The multi-constraint search interface — filters combine via SQL GROUP BY/HAVING to require all selected constraints match.
Entity-relationship diagram of the 10-table database schema
The underlying 10-table relational schema.
  • Schema: Users, Recipes (with FKs to NutritionalInfo and FlavorProfiles), Ingredients, Contains (recipe↔ingredient join), DietaryRestrictions + CompatibleWith (recipe↔restriction join), Saves, Reviews — indexed on UserID, CuisineType, and AverageRating
  • Search query joins Contains→Ingredients and CompatibleWith→DietaryRestrictions, groups by recipe, and uses HAVING COUNT(...) to require that a recipe matches every requested ingredient/restriction — the correct SQL pattern for "match all" filtering, as opposed to a naive WHERE...IN that would under-constrain results

Highlights

  • 10-table relational schema (users, recipes, ingredients, dietary restrictions, nutrition, flavor profiles, saves, reviews) with real indexes on the columns actually queried
  • Search correctly enforces "match every selected filter" using SQL GROUP BY + HAVING, rather than the common mistake of loosely matching any of them
  • Session-based auth with UUID primary keys and password-length validation
  • Posting a review updates the recipe's running average rating in the same transaction
  • Built with the Flask application-factory pattern and Blueprints, split cleanly into main/auth/recipe/user route modules
View on GitHub