It’s always nice to have a homecooked meal that is authentic and made in your own kitchen. Chef's Menu is a marketplace where customers can book a chef in their area based on cuisine type and availability.
Gabriel Atienza, Moshe Siegel, Kareem Sakr
- React
- Material UI
- Python
- Flask
- Postgres SQL
- Amazon S3
- SocketIO
- Stripe
Rename .env.template
under both the root and client
folders to .env
and update the values/settings to your own.
- Download Postgres
- Create new database using any SQL client such as pgAdmin.
- Update root
.env
with your database name, user, password, and url. - Set up your database tables by running
python init_db.py
- Add sample customers, chefs, and cuisines by running
python db_seeder.py
- Open a terminal. Make sure you have pipenv installed (
pip install pipenv
) - Install the dependencies with
pipenv install
. This also creates a virtual environment, if there isn't one already. - Activate the virtual environment with
pipenv shell
- Start the app with
flask run
- Open a terminal and go to the client folder
- Install the dependencies with
npm install
- Launch the app on http://localhost:3000 with
npm start
After changing any database models, you'll need to update your SQL tables by going to your server folder and running:
python manage.py db init
to create a "migrations" folder in the project directory (only needs to be done once)python manage.py db migrate
to populate our "migrations" folder with the updated tablespython manage.py db upgrade
to apply the changes to the database
Pipfile includes the python library eventlet, an optimized engine for running web sockets in production. eventlet
will be frustrating for local development as it disables automatic reloading of server. For local development, run pipenv uninstall eventlet
but do not commit that change when pushing to Github.
- Authentication
- Searching by distance
- Shopping cart
- Checkout
- Payments with Stripe
- Live notifications
- Meal creation
- Profile pages
- Alerts
-
Authentication: Uses cookies for access, refresh, and csrf tokens. React Context passes the users's logged in state throughout the app.
-
Searching: Customers can filter chefs based on cuisines and distance from an address
-
Shopping cart: Customers can add meals to their cart for one chef at a time. If they try adding meals for multiple chefs, they will be prompted to empty their cart.
-
Checkout: Customer chooses an availability that works for them, confirms their cart items, and enters their payment details.
-
Payments: Payments are made using Stripe.
-
Live notifications: Chefs are notified via web sockets when they receive an order via Stripe. All notifications start off as "unread" and change to "read" when a chef opens them.
-
Profile Pages: All users can add profile images, cuisines, and an address. Chefs can add meals. General address locations are shown via Google Maps.
-
Meal Creation: Chefs can create and edit meals to include relevant info such as images, pricing, and ingredients.
-
Alerts: Front end alerts are shown whenever a server request returns an error, such as for incorrect logins or an invalid address.