bgenc.net/content/posts/managing-my-recipes-with-dendron.md

5.1 KiB

title date
Managing my recipes with Dendron 2022-04-04

This post is day 10 of me taking part in the #100DaysToOffload 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 available publicly.

Setup

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.

* 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.

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, 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.

{
  // 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 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.

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.

commands:
    randomNote:
        include:
          - "recipes"

Now when I'm having trouble picking, I can just use this command and get something to cook!