Go(lang) Universal Recipe Database
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 is comprised mulitple components:
- api OpenAPI 3.0 REST API, defined in
internal/api/openapi.yaml
- ui in React + Typescript, using generated openapi clients
- scraper for saving recipes from websites (nytimes, seriouseats) for later analysis.
- This currently works on websites using
json+ld
with the appropriate schema
- This currently works on websites using
- 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 and is exposed to the UI via WebAssembly.
- e.g.
- usda is used for mapping ingredients to their USDA database equivalent, which has very detailed nutrition information
- e.g. plain strawberries or C&H brown sugar
- 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
)
- cli for interacting with the api instead using the UI
- this is used for importing/exporting recipes, as well as loading metadata