167 lines
5.1 KiB
Markdown
167 lines
5.1 KiB
Markdown
|
---
|
||
|
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!
|