Dynamic menu generator and order manager for your home bar.
There exist some features
A relational database is used to manage Users to support the login system. A logged in user can place orders without entering their email every time. Other users may be assigned as bartenders or owners and can manage those settings when logged in.
Ingredients come from a spreadsheet, but are loaded into a bar's database on the site.
Recipes are stored as a json file, with a base file providing a common set of recipes, and each bar being able to add custom recipes.
- User
- User is uniquely identified by email
- Some basic stats are kept on each user
- The user model has the required bookkeeping for authentication
- User may supply a nickname
- If user supplies they Venmo ID, confirmations sent to customers when they are a bartender will include a link to their venmo profile, for tips
- Role
- Customer - all users are customers
- Bartender - this user has been assigned as bartender at at least one bar
- Owner - this user has at least one bar
- Admin - admin user may modify any user, assign bars to users, modify the main recipe library, modify any bar
- Bar
- A bar represents a collection of ingredients
- May have up to one bartender on duty (this will be the email address orders are sent to)
- Has one owner
- Has a number of configuration values for how to display recipes and set optional prices
- Order
- An order is placed at a bar, by a user, served by a bartender once confirmed
- Ingredient
- An ingredient is defined with a Type and Bottle, where Type is something like "dry gin" or "bourbon whiskey", and Bottle is the specific brand and bottling, "Bombay Sapphire" or "Old Grand-Dad Bonded"
- An ingredient may only belong to one bar
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
A virtualenv is recommended for setting up this project.
pip install -r requirements.txt
Configuration for the flask app is contained in a config.py
and instance/config.py
. See the flask config docs
This repo includes an example instance/config_example.py, to be used for all the secret configuration.
For email notifications with the user system and order notifications, an email account with api access will be required. This is easy to do with gmail, and the base configuration assumes as much.
The original version of this site is running on PythonAnywhere, which is the author's recommended deployment solution.
- Flask - Web framework
- Flask-Security - For user login management
- Flask-SQLAlchemy - Manages SQL backend
- Flask-WTF - Better WTForms
- PyLaTeX - Generate TeX menu downloads from python
- Pendulum - Better time and date for python
- ERAlchemy - Generates the ER diagram used in this documentation
- Datatables - For the ingredient tables and displaying users, orders
- CellEdit - Basis for inline-editable ingredient datatable
Please feel free to check out the open issues and submit a PR!
This project uses Semantic Versioning for versioning. For the versions available, see the tags on this repository.
- Tim Schumacher - Core Author - twschum
See also the list of contributors who participated in this project.
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.