---
comments: true
---
# :gear: Development
## :smiley: Emoji
Emoji are manually added to the front of ingredients and cookware to give the pages a little bit of flare. My hopes is
that eventually this can be added to `cook-docs` as an automated task. For now, `emoji.yaml` can be used as reference.
```yaml title="emoji.yaml"
--8<-- "includes/emoji.yaml"
```
## :runner: Workflow
Below is my current workflow for documenting recipes.
``` mermaid
graph TD
S[Change to or create ./cook/catetory dir];
A{Does the source
website exist?};
B[Import recipe using cook-import];
C[Manually write cook
file using micro editor];
D{Is the domain
supported by
cook-import?};
E[Visually check cook file];
F[Test output using cook recipe read command];
G[Download image file and rename
to same base name as cook file];
H[Run cook-docs in ./cook/category
to generate markdown file];
I[Manually check markdown file];
J[Move markdown file to ./docs/category];
K[Copy image to ./docs/assets/images
with same base file name as markdown file];
L[Add markdown file to mkdocs.yaml];
M[Locally run mkdocs to test mkdocs-material];
N[Commit and push to repo];
O{Is the file
correct?};
P[Edit cook file];
Q{Is the
output correct?};
R[Edit cook file];
T{Does the page
render correctly?};
U[CI GitHub Action workflow
deploys recipe site];
V{Is the image
format webp?};
W[Convert the image
to png using dwebp];
X[Check spelling using
spellchecker-cli];
Y[Check markdown links
using markdown-link-check];
Z{What is the
origin of the recipe?};
AB{What type of device
is being used?}
AC[Use the GitHub mobile app
to create an issue]
AD[Use the GitHub website
to create an issue]
AE[Use GitHub Issues to
determine which recipe to document]
AF[Close GitHub issue, if applicable.]
AG[Identify a recipe
to be documented]
AH[Document link in issue]
AI[Take image of cookbook/index
card and add it to issue]
AG --> AB;
AB --> |Mobile|AC;
AB --> |Desktop|AD;
AC --> Z;
AD --> Z;
Z --> |Website|AH;
Z --> |Cookbook/
Index Card|AI;
AH --> AE;
AI --> AE;
AE --> S;
A --> |Yes|B;
A --> |No|C;
B --> D;
C --> F;
D --> |Yes|E;
D --> |No|C;
E --> F;
F --> Q;
Q --> |Yes|G;
H --> I;
J --> K;
K --> L;
L --> M;
I --> O;
O --> |Yes|J;
O --> |No|P;
P --> H;
Q --> |No|R;
R --> F;
S --> A;
M --> T;
T --> |Yes|X;
X --> Y;
Y --> N;
T --> |No|P;
N --> U;
G --> V;
V --> |Yes|W;
V --> |No|H;
W --> H;
U --> AF;
click B "#cook-import"
click C "#cooklang-micro"
click D "#cook-import"
click F "#cooklang"
click H "#cook-docs"
click U "https://github.com/nicholaswilde/recipes/blob/main/.github/workflows/ci.yaml"
click X "#spellchecker-cli"
click Y "#markdown-link-check"
```
## :hammer_and_wrench: Tools
Tools used to develop this repository.
!!! note
All commands are run from the root of the repo unless otherwise specified.
### :rice: [`cooklang`][2]
Used to generate shopping lists and manage recipes.
```shell title="Installation"
brew tap cooklang/tap
brew install cooklang/tap/cook
```
```shell title="Usage"
cook recipe read file.cook
```
### :truck: [`cook-import`][11]
Used to download recipe from website as a `cooklang` file, if possible.
```shell title="Usage"
cook-import -l -f
```
### :memo: [`cooklang-micro`][12]
Used as a `cooklang` syntax highlighter for the [`micro`][13] editor
### :frame_with_picture: [`webp`][1]
Used to convert images from `webp` to `png`.
```shell title="Installation"
sudo apt install webp
```
```shell title="Usage"
dwebp file.webp -o file.png
```
### :frame_with_picture: `avif`
Used to convert images from `avif` to `jpg`.
```shell title="Installation"
brew install imagemagick
```
```shell title="Usage"
magick -quality 75 input.avif output.jpg
```
### :robot: [Task][8]
Used to automate tasks.
```shell title="Installation"
brew install go-task/tap/go-task
```
```shell title="Usage"
# List tasks
task
```
### :page_with_curl: [`cook-docs`][3]
Used to generate markdown files from cooklang files.
```shell title="Installation"
brew install nicholaswilde/tap/cook-docs
```
```shell title="Usage"
/recipes/cook/category$ cook-docs
```
### :book: [Material for MkDocs][6]
Used as theme for static site.
```shell title="Installation"
pip install mkdocs-material mkdocs-minify-plugin
```
### :book: [MkDocs][7]
Used to generate static site.
```shell title="Installation"
(
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install mkdocs
)
```
=== "Task"
```shell title="Usage"
task serve
```
=== "Manual"
```shell title="Usage"
mkdocs serve
```
### :abc: [Spellchecker CLI][9]
Used to check documentation spelling.
```shell title="Installation"
npm install --global spellchecker-cli
```
=== "Task"
```shell title="Usage"
task spellcheck
```
=== "Script"
```shell title="Usage"
chmod +x ./scripts/spellcheck.sh
./scripts/spellcheck.sh
```
=== "Manual"
```shell title="Usage"
npx spellchecker -d dictionary.txt -f {"./cook/**/*.cook","./docs/**/*.md"}
```
```shell title="Add to dictionary"
echo "word to add" >> dictionary.txt
```
=== "Task"
```shell title="Sort dictionary"
task sort
```
=== "Manual"
```shell title="Sort dictionary"
sort dictionary.txt -u -o dictionary.txt
```
### :link: [markdown-link-check][10]
Used to check documentation links.
```shell title="Installation"
npm install -g markdown-link-check
```
=== "Task"
```shell title="Usage"
task linkcheck
```
=== "Script"
```shell title="Usage"
chmod +x ./scripts/linkcheck.sh
./scripts/linkcheck.sh
```
=== "Docker"
```shell title="Usage"
docker run --rm -v /:/tmp:ro -i -w /tmp ghcr.io/tcort/markdown-link-check:stable "/tmp/path/to/file" -c "/tmp{{ .ROOT_DIR }}/mlc_config.json"
```
### [Emojipedia][4]
Website used to search for emoji shortcodes.
### [Emoji Combos][5]
Website used to search for emoji contexts.
[1]:
[2]:
[3]:
[4]:
[5]:
[6]:
[7]:
[8]:
[9]:
[10]:
[11]:
[12]:
[13]: