https://github.com/nickysemenza/gourd
go universal recipe database 🌶
https://github.com/nickysemenza/gourd
cooking food golang ingredients react recipe recipe-stash recipes typescript usda
Last synced: 2 months ago
JSON representation
go universal recipe database 🌶
- Host: GitHub
- URL: https://github.com/nickysemenza/gourd
- Owner: nickysemenza
- License: mit
- Created: 2017-04-12T07:06:14.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2024-10-29T22:30:38.000Z (7 months ago)
- Last Synced: 2024-10-29T22:45:34.443Z (7 months ago)
- Topics: cooking, food, golang, ingredients, react, recipe, recipe-stash, recipes, typescript, usda
- Language: TypeScript
- Homepage:
- Size: 12.9 MB
- Stars: 22
- Watchers: 5
- Forks: 1
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gourd
**Go**(lang) **U**niversal **R**ecipe **D**atabase
> etymology: Before modern technology, people would use hollowed out gourds as food storage containers.
---
Gourd is a recipe database that can be used for meal planning and generating ingredient lists.
## this project is a WIP
[](https://codecov.io/gh/nickysemenza/gourd)
[](https://goreportcard.com/report/github.com/nickysemenza/gourd)
[](https://pkg.go.dev/github.com/nickysemenza/gourd)## features
This is comprised mulitple components:
1. **api** OpenAPI 3.0 REST API, defined in `internal/api/openapi.yaml`
1. **ui** in React + Typescript, using generated openapi clients
1. **scraper** for saving recipes from websites (nytimes, seriouseats) for later analysis.
- This currently works on websites using `json+ld` with [the appropriate schema](https://schema.org/Recipe)
1. **parser** for extracting structured information from freetext ingredient line items.
- e.g. `1 1/2 cups flour (180g), sifted` will be parsed into `{ingredient: flour, amount: 1.5, unit: cup, modifier: sifted`.
- This leverages [nickysemenza/ingredient-parser](https://github.com/nickysemenza/ingredient-parser) and is exposed to the UI via WebAssembly.
1. **usda** is used for mapping ingredients to their USDA database equivalent, which has very detailed nutrition information
- e.g. [plain strawberries](https://fdc.nal.usda.gov/fdc-app.html#/food-details/747448/nutrients) or [C&H brown sugar](https://fdc.nal.usda.gov/fdc-app.html#/food-details/392083/nutrients)
- This dataset also contains the imperial to metric mappings (e.g. the data from the back of the flour bag that says `1/4 cup = 30 grams`)
1. **cli** for interacting with the api instead using the UI
- this is used for importing/exporting recipes, as well as loading metadata