Recipe search app where you input what ingredients you have, and it searches for recipes you can make with them.
Uses Bootstrap & Mako for frontend, and Flask & PostgreSQL for backend.
Uni project for COMP4920 "Management and Ethics"
Search for recipes based on what ingredients you have and refine your search with (optional) filters
Browse through results displaying the recipes' like rate, preparation time & difficulty, and any tags
Users can create an account on the site to get access to extra features like...
A virtual pantry where you can record what ingredients you have at home (for expediant searching)
Ability to like/dislike/favourite recipes, and remove its ingredients from your pantry (or add them to your virtual shopping list)
(le Virtual Shopping List)
And logged-in users can submit their own recipes to the site!
User settings can be changed on the profile page
The wingredient directory is our main Python package. This is strucured like a very basic Flask app for now.
- Make sure you have Python 3.7 installed. On Debian/Ubuntu, you'll need the
python3.7-venvpackage as well. If you're on an Ubuntu version lower than 18.04, add the deadsnakes apt repository. - Create a Python virtual environment
- simply run the
make newenvcommand.
- simply run the
- Activate the virtual environment - do this first when developing/testing/running/tooling (you'll see
(.venv)on your console prompt if you're activated)- from the project root directory, run
source .venv/bin/activateon Mac/Linux or.\.venv\Scripts\activateon Windows.
- from the project root directory, run
- Set up your editor/IDE if you're using one, so that it uses your virtual environment. In VS Code and PyCharm (and possibly other editors), this means you don't have to activate your virtual environment all the time, as long as you use the integrated terminal.
- Visual Studio Code: In workspace settings, set the
python.pythonPathsetting to${workspaceFolder}/.venv/bin/pythonon Mac/Linux or${workspaceFolder}/.venv/Scripts/python.exeon Windows. - PyCharm: Go to File -> Settings -> Project -> Project Interpreter, add a Python interpreter, select Existing environment, and set the path to the python executable as above, in the VS Code instructions, where
${workspaceFolder}is the project root directory. - Other editors: Probably a similar process to above, you simply need to tell the editor where to find the Python interpreter executable for this project.
- Visual Studio Code: In workspace settings, set the
In the project root:
makemake newenvsource .venv/bin/activatewingredient-initdb(make sure your user was added to the DB beforehand)wingredient
source .venv/bin/activate and wingredient are sufficient.
Make sure your user account has privileges on the database you're connecting to.
On Linux (replace with your Linux username):
$ sudo -u postgres psql
postgres=# DROP DATABASE IF EXISTS wingredient;
postgres=# CREATE DATABASE wingredient;
postgres=# CREATE USER <username>;
postgres=# GRANT ALL PRIVILEGES ON DATABASE wingredient TO <username>;Now, set up the config file. Whilst in the project root directory:
$ cp config_template.yml wingredient.ymlThen, edit wingredient.yml to change to the correct configuration. All you should need to do is uncomment the dbname: wingredient line.
Now, populate the database with the command:
$ wingredient-initdbIf the command isn't found, run make syncenv again.
Provided that you set up as described above, can simply run the web app with the wingredient command, in an activated terminal. At the moment it just runs on localhost:5000, but this will probably change at some point.
If you get an error along the lines of pg_config executable not found, you need to install the postgresql package (which contains it).
This can be installed on Debian/Ubuntu with sudo apt install postgresql (StackOverflow thread on the error).
If you then get an error along the lines of fatal error: libpq-fe.h: No such file or directory #include <libpq-fe.h>, it can be found in the libpq-dev package, which can be installed with sudo apt install libpq-dev (StackOverflow thread on the error).
