diff --git a/content/managing-my-recipes-with-dendron.md b/content/managing-my-recipes-with-dendron.md new file mode 100644 index 0000000..154e948 --- /dev/null +++ b/content/managing-my-recipes-with-dendron.md @@ -0,0 +1,166 @@ +--- +title: "Managing my recipes with Dendron" +date: 2022-04-04 +--- + +> This post is day 10 of me taking part in the +> [#100DaysToOffload](https://100daystooffload.com/) challenge. + +I like to cook at home, but for a long time I never wrote down or saved any of +my recipes. Because of that I would occasionally completely forget how to make +something. My mom, and my grandmom write down their recipes in notebooks, but I +want something more powerful and resilient than some pen and paper. + +At first I tried writing down my recipes in Google Keep, but found it a bit +tedious. That's where Dendron came in. Dendron is a knowledge management and +note taking tool. It comes with a features that enhance the writing experience, +but more importantly it has a lot of features that enhance the discoverability +of what you wrote. + +For reference, I have the [repository for the recipes](https://gitea.bgenc.net/kaan/recipes) available publicly. + +## Setup + +[Dendron](https://marketplace.visualstudio.com/items?itemName=dendron.dendron) +is an extension for Visual Studio Code, so you'll need to install both. There's +a great tutorial to go through, but I'm already experienced with it so I went +ahead and created a new workspace that I called "recipes". + +Next, I created a template and a schema to help me write new recipes. The +template is just a regular Dendron note, which I named `templates.recipe`. + +```md +* Servings: +* Calories: +* Protein: +* Fiber: + + +## Ingredients + + +## Instructions + + +## Notes + +``` + +This template immediately gives me the basic structure of a recipe. I have the +ingredients and instructions, and then I have a place to put any additional +notes about the recipe (for example, things I want to change next time I cook +it, or how to serve it best). I also have a section at the top to fill out some +nutritional information. I use the mobile app Cronometer to calculate that, +although most of the time I don't bother because it's just a nice-to-have that I +don't really need. + +Next, here's my schema. + +```yml +version: 1 +imports: [] +schemas: + - id: recipes + title: recipes + parent: root + children: + - id: bowls + title: bowls + namespace: true + template: templates.recipe + - id: baked + title: baked + namespace: true + template: templates.recipe + - id: dessert + title: dessert + namespace: true + template: templates.recipe + - id: misc + title: misc + namespace: true + template: templates.recipe + - id: soup + title: soup + namespace: true + template: templates.recipe +``` + +The schema helps me keep my recipes organized (and also automatically applies +the template note). You can see that I have my recipes organized under `bowls` +for stuff like rice and pasta dishes, `baked` for bread, pies and anything else +where you bake everything, `dessert` and `soup` which are self descriptive, and +`misc` which holds anything else like salad toppings. + +## Publishing + +I publish my [recipes online](https://bgenc.net/recipes/), which makes it very +easy to pull up a recipe when I'm cooking or at the grocery store. + +I use a self-hosted setup, so all I have to do is just run the Dendron CLI to +build the site. To automate this process, I set up some VSCode tasks to build +and publish the site. + +```json +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build site", + "type": "shell", + "command": "dendron publish export", + "options": { + "cwd": "${workspaceFolder}" + } + }, + { + "label": "publish site", + "type": "shell", + "command": "rsync -av .next/out/ /var/www/recipes/", + "options": { + "cwd": "${workspaceFolder}" + }, + "dependsOn": ["build site"], + "problemMatcher": [] + }, + ] +} +``` + +I think before running these commands, you first have to run `dendron publish init && dendron publish build` first. + +The first task builds the site using Dendron, and then the second task copies +the generated static website to where I have it published. I'm running a web +server on my desktop so this is just a folder, but `rsync` can also copy things +over SSH if you host your site on a different machine. There are also +[tutorials](https://wiki.dendron.so/notes/x0geoUlKJzmIs4vlmwLn3/) for things +like Github pages or Netlify. + +Because I'm publishing under a subfolder (`.../recipes`), I also had to set +`assetsPrefix` in my `dendron.yml` configuration file. + +```yml +publishing: + assetsPrefix: "/recipes" + ... +``` + +## Bonus: What do I cook this week? + +My wife and I go shopping once a week, so every week we need to decide what +we're going to eat this week. Sometimes it can be hard to pick something to eat +though! Luckily, Dendron comes with a command `Dendron: Random Note` which shows +you a random note. You can even configure it to only show some notes, which I +used so it will only show me recipes. + +```yml +commands: + randomNote: + include: + - "recipes" +``` + +Now when I'm having trouble picking, I can just use this command and get +something to cook!