init 2
46
docs/docs/1.0 - getting-started.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
# Getting Started
|
||||
To deploy docker on your local network it is highly recommended to use docker to deploy the image straight from dockerhub. Using the docker-compose below you should be able to get a stack up and running easily by changing a few default values and deploying.
|
||||
|
||||
Alternatively, this project is run in python. If you are deadset on deploying on a linux machine you can run this in an python enviromnet with a dedicated MongoDatabase. Provided that you know thats how you want to host the application, I'll assume you know how to do that.
|
||||
|
||||
[Get Docker](https://docs.docker.com/get-docker/)
|
||||
|
||||
### Installation - Docker
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: "3.1"
|
||||
services:
|
||||
mealie:
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: Dockerfile
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
- 9000:9000
|
||||
environment:
|
||||
db_username: root # Your Mongo DB Username - Please Change
|
||||
db_password: example # Your Mongo DB Password - Please Change
|
||||
db_host: mongo
|
||||
db_port: 27017 # The Default port for Mongo DB
|
||||
volumes:
|
||||
- ./mealie/data/img:/app/data/img
|
||||
- ./mealie/data/backups:/app/data/backups
|
||||
|
||||
mongo:
|
||||
image: mongo
|
||||
restart: always
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: root # Change!
|
||||
MONGO_INITDB_ROOT_PASSWORD: example # Change!
|
||||
|
||||
mongo-express: # Optional Mongo GUI
|
||||
image: mongo-express
|
||||
restart: always
|
||||
ports:
|
||||
- 9091:8081
|
||||
environment:
|
||||
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
||||
ME_CONFIG_MONGODB_ADMINPASSWORD: example
|
||||
```
|
95
docs/docs/1.1 - recipes.md
Normal file
|
@ -0,0 +1,95 @@
|
|||
# Recipes
|
||||
|
||||
## URL Import
|
||||
Adding a recipe can be as easy as copying the recipe URL into mealie and letting the web scrapper try to pull down the information. Currently this scraper is implemented with [scrape-schema-recipe package](https://pypi.org/project/scrape-schema-recipe/). You may have mixed results on some websites, especially with blogs or non specific recipe websites. See the bulk import Option below for another a convient way to add blog style recipes into Mealie.
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
## Recipe Editor
|
||||
Recipes can be edited and created via the UI. This is done with both a form based approach where you have a UI to work with as well as with a in browser JSON Editor. The JSON editor allows you to easily copy and paste data from other sources.
|
||||
|
||||
You can also add a custom recipe with the UI editor built into the web view. After logging in as a user you'll have access to the editor to make changes to all the content in the recipe.
|
||||
|
||||

|
||||
|
||||
## Bulk Import
|
||||
Mealie also supports bulk import of recipe instructions and ingredients. Select "Bulk Add" in the editor and paste in your plain text data to be parsed. Each line is treated as one entry and will be appended to the existing ingredients or instructions if they exist. Empty lines will be stripped from the text.
|
||||
|
||||

|
||||
|
||||
## Schema
|
||||
Recipes are stored in the json-like format in mongoDB and then sent and edited in json format on the frontend. Each recipes uses [Recipe Schema](https://schema.org/Recipe) as a general guide with some additional properties specific to Mealie.
|
||||
|
||||
### Example
|
||||
```json
|
||||
{
|
||||
_id: ObjectId('5fcdc3d715f131e8b191f642'),
|
||||
name: 'Oat and Pecan Brittle Cookies',
|
||||
description: 'A gorgeously textured cookie with crispy-edges, a chewy center, toasty pecans, and tiny crispy pecan brittle bits throughout.',
|
||||
image: 'oat-and-pecan-brittle-cookies.jpg',
|
||||
recipeYield: 'Makes about 18',
|
||||
recipeIngredient: [
|
||||
'1¼ cups (142 g) coarsely chopped pecans',
|
||||
'¾ cup (150 g) granulated sugar',
|
||||
'4 Tbsp. (½ stick) unsalted butter',
|
||||
'½ tsp. baking soda',
|
||||
'½ tsp. Diamond Crystal or ¼ tsp. Morton kosher salt',
|
||||
'1 cup (2 sticks) unsalted butter, cut into 16 pieces, divided',
|
||||
'1⅓ cups (173 g) all-purpose flour',
|
||||
'2 tsp. Diamond Crystal or 1 tsp. Morton kosher salt',
|
||||
'1 tsp. baking soda',
|
||||
'2 cups (200 g) old-fashioned oats, divided',
|
||||
'¾ cup (packed; 150 g) dark brown sugar',
|
||||
'½ cup (100 g) granulated sugar',
|
||||
'2 large eggs',
|
||||
'1 Tbsp. vanilla extract'
|
||||
],
|
||||
recipeInstructions: [
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Place a rack in middle of oven; preheat to 350°. Toast pecans on a small rimmed baking sheet, tossing halfway through, until slightly darkened and fragrant, 8–10 minutes. Let cool.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Line another small rimmed baking sheet with a Silpat baking mat. Cook granulated sugar, butter, and 2 Tbsp. water in a small saucepan over medium-low heat, stirring gently with a heatproof rubber spatula, until sugar is dissolved. Increase heat to medium and bring syrup to a rapid simmer. Cook, without stirring, swirling pan often, until syrup turns a deep amber color, 8–10 minutes. Immediately remove saucepan from heat and stir in pecans. Once pecans are well coated, add baking soda and salt and stir to incorporate (mixture will foam and sputter as baking soda aerates caramel). Working quickly (it will harden fast), scrape mixture onto prepared baking sheet and spread into a thin layer. Let cool completely, 5–10 minutes. Chop into pea-size pieces; set aside.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Place half of butter (½ cup) in the bowl of a stand mixer. Bring remaining butter to a boil in a small saucepan over medium-low heat, stirring often with a heatproof rubber spatula. Cook, scraping bottom and sides of pan constantly, until butter sputters, foams, and, eventually, you see browned bits floating on the surface, 5–7 minutes. Pour brown butter over butter in stand mixer bowl, making sure to scrape in all the browned bits. Let sit until butter begins to resolidify, about 30 minutes.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Pulse flour, salt, and baking soda in a food processor to combine. Add half of reserved pecan brittle and 1 cup oats; process in long pulses until oats and brittle are finely ground.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Add brown sugar and granulated sugar to butter and beat with paddle attachment on medium speed until light and smooth but not fluffy, about 2 minutes. Scrape down sides of bowl and add eggs and vanilla. Beat until very light and satiny, about 1 minute. Scrape down sides of bowl and add flour mixture; beat on low speed until no dry spots remain and you have a soft, evenly mixed dough. Add remaining half of brittle and remaining 1 cup oats; mix on low speed just to distribute. Fold batter several times with a spatula to ensure everything is evenly mixed.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Using a 2-oz. scoop or ¼-cup measuring cup, scoop level portions of dough to make 18 cookies. Place on a parchment-lined baking sheet, spacing as close together as possible (you’ll space them out before baking). Cover tightly with plastic wrap and chill at least 12 hours and up to 2 days. (If you’re pressed for time, a couple hours will do; cookies just won’t be as chewy.)'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'When ready to bake, place racks in upper and lower thirds of oven; preheat to 350°. Line 2 large rimmed baking sheets with parchment paper. Arrange 6 cookies on each prepared baking sheet, spacing at least 3" apart.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Bake cookies, rotating baking sheets top to bottom and front to back after 12 minutes, until dark golden brown around the edges, 16–20 minutes. Let cookies cool 5 minutes on baking sheets, then transfer cookies to a wire rack with a spatula and let cool completely.'
|
||||
},
|
||||
{
|
||||
'@type': 'HowToStep',
|
||||
text: 'Carefully move a rack to middle of oven. Arrange remaining dough on one of the baking sheets (it’s okay if it’s still warm). Bake as before (this batch might go a bit faster).\nDo ahead: Dough can be formed 2 months ahead; chill dough balls at least 2 hours before transferring to freezer. Once frozen solid, store in resealable plastic freezer bags and keep frozen. No need to thaw before baking, but you may need to add a minute or two to the baking time. Cookies can be baked 5 days ahead; store airtight at room temperature.'
|
||||
}
|
||||
],
|
||||
slug: 'oat-and-pecan-brittle-cookies',
|
||||
tags: [],
|
||||
categories: [],
|
||||
dateAdded: ISODate('2020-12-07T05:55:35.434Z'),
|
||||
notes: [],
|
||||
orgURL: 'https://www.bonappetit.com/recipe/oat-and-pecan-brittle-cookies',
|
||||
rating: 3
|
||||
}
|
||||
```
|
11
docs/docs/1.2 - meal-planner.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Meal Planner
|
||||
|
||||
## Working with Meal Plans
|
||||
In Mealie you can create a mealplan based off the calendar inputs on the meal planner page. There is no limit to how long or how short a meal plan is. You may also create duplicate meal plans for the same date range. After selecting your date range, click on the card for each day and seach through recipes to find your choice. After selecting a recipe for all meals save the plan.
|
||||
|
||||
To edit the meal in a meal plan simply select the edit button on the card in the timeline. Similiarly, to delete a mealplan click the delete button on the card in the timeline. Currently there is no support to change the date range in a meal plan.
|
||||
|
||||
!!! warning
|
||||
In coming a future release recipes for meals will be restricted to specific categories.
|
||||
|
||||

|
26
docs/docs/1.3 - admin-panel.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Admin Panel
|
||||
!!! danger
|
||||
As this is still a **BETA** It is reccomended that you backup your data often and store in more than one place. Adhear to backup best practies with the [3-2-1 Backup Rule](https://en.wikipedia.org/wiki/Backup)
|
||||
|
||||
|
||||
### Theme Settings
|
||||

|
||||
|
||||
|
||||
## Backup and Export
|
||||
All recipe data can be imported and exported as necessary from the UI. Under the admin page you'll find the section for using Backups and Exports.
|
||||
|
||||
To create an export simple add the tag and the markdown template and click Backup Recipes and your backup will be created on the server. The backup is a standard zipfile containing all the images, json files, and rendered markdown files for each recipe. Markdown files are rendered from jinja2 templates. Adding your own markdown file into the templates folder will automatically show up as an option to select when creating a backup.
|
||||
|
||||
To import a backup it must be in your backups folder. If it is in the backup folder it will automatically show up as an source to restore from. Selected the desired backup and import the backup file.
|
||||
|
||||

|
||||
|
||||
## Meal Planner Webhooks
|
||||
In the webhooks section you can find a list of all your endpoint URLs that are used as part of the meal planner
|
||||
|
||||

|
||||
|
||||
## SFTP Settings - Target Release 1.0
|
||||
|
||||
## User Settings - Target Release 1.0
|
BIN
docs/docs/gifs/bulk-add-demo.gif
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
docs/docs/gifs/editor-demo.gif
Normal file
After Width: | Height: | Size: 30 MiB |
BIN
docs/docs/gifs/meal-plan-demo.gif
Normal file
After Width: | Height: | Size: 14 MiB |
BIN
docs/docs/gifs/url-demo.gif
Normal file
After Width: | Height: | Size: 35 MiB |
BIN
docs/docs/img/admin-backup.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
docs/docs/img/admin-theme.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/docs/img/admin-webhooks.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
docs/docs/img/home_screenshot.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
110
docs/docs/index.md
Normal file
|
@ -0,0 +1,110 @@
|
|||
# About The Project
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/hay-kot/mealie">
|
||||
</a>
|
||||
<p align="center">
|
||||
<a href="https://github.com/hay-kot/mealie/issues">Report Bug</a>
|
||||
·
|
||||
<a href="https://github.com/hay-kot/mealie/issues">Request Feature</a>
|
||||
</p>
|
||||
</p>
|
||||
|
||||
<!-- ABOUT THE PROJECT -->
|
||||
|
||||
![Product Name Screen Shot][product-screenshot]
|
||||
|
||||
**Mealie** is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relavent data or add a family recipe with the UI editor.
|
||||
|
||||
Melaie also provides a secure API for interactions from 3rd party applications. **Why does my recipe manager need an API?** An API allows integration into applications like [Home Assistant](https://www.home-assistant.io/) that can act as notification engines to provide custom notifications based of Meal Plan data to remind you to defrost the chicken, marinade the steak, or start the CrockPot. Additionally, you can access any avaiable API from the backend server. To explore the API spin up your server and navigate to http://yourserver.com/docs for interactive API documentation.
|
||||
|
||||
!!! note
|
||||
In some of the demo gifs the styling may be different than the finale application. demos were done during development prior to finale styling.
|
||||
|
||||
!!! warning
|
||||
Note that this is a **BETA** release and that means things may break and or change down the line. I'll do my best to make sure that any API changes are thoughtful and necessary in order not to break things. Additionally, I'll do my best to provide a migration path if the database schema ever changes. That said, one of the nice things about MongoDB is that it's flexible!
|
||||
|
||||
|
||||
|
||||
### Main Features
|
||||
#### Recipes
|
||||
- Automatic web scrapping for common recipe platforms
|
||||
- Interactive API Documentation thanks to [FastAPI](https://fastapi.tiangolo.com/) and [Swagger](https://petstore.swagger.io/)
|
||||
- UI Recipe Editor
|
||||
- JSON Recipe Editor in browser
|
||||
- Custom tags and categories
|
||||
- Rate recipes
|
||||
- Add notes to recipes
|
||||
#### Meal Planner
|
||||
- Random Meal plan generation based off categories
|
||||
- Expose notes in the API to allow external applications to access relavent information for meal plans
|
||||
#### Database Import / Export
|
||||
- Easily Import / Export your recipes from the UI
|
||||
- Export recipes in markdown format for universal access
|
||||
- Use the default or a custom jinja2 template
|
||||
|
||||
### Built With
|
||||
|
||||
* [Vue.js](https://vuejs.org/)
|
||||
* [Vuetify](https://vuetifyjs.com/en/)
|
||||
* [FastAPI](https://fastapi.tiangolo.com/)
|
||||
* [MongoDB](https://www.mongodb.com/)
|
||||
* [Docker](https://www.docker.com/)
|
||||
|
||||
|
||||
|
||||
<!-- ROADMAP -->
|
||||
## Roadmap
|
||||
|
||||
#### Authentication - Target 1.0
|
||||
- User Login
|
||||
- Token Based API Access/Auth
|
||||
|
||||
#### Recipe Sharing
|
||||
- Share Button / Email
|
||||
- Export to PDF
|
||||
- Print Button
|
||||
- Git Repo Based Sharing (Import / Export / Search)
|
||||
|
||||
|
||||
|
||||
<!-- CONTRIBUTING -->
|
||||
## Contributing
|
||||
|
||||
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. Especially test. Literally any tests.
|
||||
|
||||
|
||||
<!-- LICENSE -->
|
||||
## License
|
||||
|
||||
Distributed under the MIT License. See `LICENSE` for more information.
|
||||
|
||||
|
||||
<!-- CONTACT -->
|
||||
## Contact
|
||||
Project Link: [https://github.com/hay-kot/mealie](https://github.com/hay-kot/mealie)
|
||||
|
||||
|
||||
|
||||
<!-- ACKNOWLEDGEMENTS -->
|
||||
## Acknowledgements
|
||||
|
||||
* [Talk Python Training for helping me learn python](https://training.talkpython.fm/)
|
||||
* [Academind for helping me learn Javascript and Vue.js](https://academind.com/)
|
||||
|
||||
|
||||
<!-- MARKDOWN LINKS & IMAGES -->
|
||||
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
|
||||
[contributors-shield]: https://img.shields.io/github/contributors/hay-kot/mealie.svg?style=flat-square
|
||||
[contributors-url]: https://github.com/hay-kot/mealie/graphs/contributors
|
||||
[forks-shield]: https://img.shields.io/github/forks/hay-kot/mealie.svg?style=flat-square
|
||||
[forks-url]: https://github.com/hay-kot/mealie/network/members
|
||||
[stars-shield]: https://img.shields.io/github/stars/hay-kot/mealie.svg?style=flat-square
|
||||
[stars-url]: https://github.com/hay-kot/mealie/stargazers
|
||||
[issues-shield]: https://img.shields.io/github/issues/hay-kot/mealie.svg?style=flat-square
|
||||
[issues-url]: https://github.com/hay-kot/mealie/issues
|
||||
[license-shield]: https://img.shields.io/github/license/hay-kot/mealie.svg?style=flat-square
|
||||
[license-url]: https://github.com/hay-kot/mealie/blob/master/LICENSE.txt
|
||||
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555
|
||||
[linkedin-url]: https://linkedin.com/in/hay-kot
|
||||
[product-screenshot]: img/home_screenshot.png
|
8
docs/docs/stylesheets/custom.css
Normal file
|
@ -0,0 +1,8 @@
|
|||
:root {
|
||||
--md-primary-fg-color: #e58325;
|
||||
--md-primary-fg-color--light: #e58325;
|
||||
--md-primary-fg-color--dark: #e58325;
|
||||
--md-accent-fg-color: #e58325;
|
||||
--md-accent-fg-color--light: #e58325;
|
||||
--md-accent-fg-color--dark: #e58325;
|
||||
}
|
15
docs/mkdocs.yml
Normal file
|
@ -0,0 +1,15 @@
|
|||
site_name: Mealie
|
||||
theme:
|
||||
name: material
|
||||
icon:
|
||||
logo: material/silverware-variant
|
||||
features:
|
||||
- navigation.instant
|
||||
markdown_extensions:
|
||||
- pymdownx.highlight
|
||||
- pymdownx.superfences
|
||||
- admonition
|
||||
extra_css:
|
||||
- stylesheets/custom.css
|
||||
repo_url: https://github.com/hay-kot/mealie
|
||||
repo_name: hay-kot/mealie
|