Merge remote-tracking branch 'upstream/master'
@ -1 +1,4 @@
|
||||
dest
|
||||
rss.xml
|
||||
atom.xml
|
||||
blog
|
||||
tags
|
||||
|
@ -0,0 +1,198 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
BLOG := $(MAKE) -f $(lastword $(MAKEFILE_LIST)) --no-print-directory
|
||||
ifneq ($(filter-out help,$(MAKECMDGOALS)),)
|
||||
include config
|
||||
endif
|
||||
|
||||
# The following can be configured in config
|
||||
BLOG_DATE_FORMAT_INDEX ?= %x
|
||||
BLOG_DATE_FORMAT ?= %x %X
|
||||
BLOG_TITLE ?= blog
|
||||
BLOG_DESCRIPTION ?= blog
|
||||
BLOG_URL_ROOT ?= http://localhost/blog
|
||||
BLOG_FEED_MAX ?= 20
|
||||
BLOG_FEEDS ?= rss atom
|
||||
BLOG_SRC ?= articles
|
||||
|
||||
|
||||
.PHONY: help init build deploy clean taglist
|
||||
|
||||
ARTICLES = $(shell git ls-tree HEAD --name-only -- $(BLOG_SRC)/ 2>/dev/null)
|
||||
TAGFILES = $(patsubst $(BLOG_SRC)/%.md,tags/%,$(ARTICLES))
|
||||
|
||||
help:
|
||||
$(info make init|build|deploy|clean|taglist)
|
||||
|
||||
init:
|
||||
mkdir -p $(BLOG_SRC) data templates
|
||||
printf '<!DOCTYPE html><html><head><title>$$TITLE</title></head><body>' > templates/header.html
|
||||
printf '</body></html>' > templates/footer.html
|
||||
printf '' > templates/index_header.html
|
||||
printf '<p>Tags:' > templates/tag_list_header.html
|
||||
printf '<a href="$$URL">$$NAME</a>' > templates/tag_entry.html
|
||||
printf ', ' > templates/tag_separator.html
|
||||
printf '</p>' > templates/tag_list_footer.html
|
||||
printf '<h2>Articles</h2><ul>' > templates/article_list_header.html
|
||||
printf '<li><a href="$$URL">$$DATE $$TITLE</a></li>' > templates/article_entry.html
|
||||
printf '' > templates/article_separator.html
|
||||
printf '</ul>' > templates/article_list_footer.html
|
||||
printf '' > templates/index_footer.html
|
||||
printf '' > templates/tag_index_header.html
|
||||
printf '' > templates/tag_index_footer.html
|
||||
printf '' > templates/article_header.html
|
||||
printf '' > templates/article_footer.html
|
||||
printf 'blog\n' > .git/info/exclude
|
||||
|
||||
build: blog/index.html tagpages $(patsubst $(BLOG_SRC)/%.md,blog/%.html,$(ARTICLES)) $(patsubst %,blog/%.xml,$(BLOG_FEEDS))
|
||||
|
||||
deploy: build
|
||||
rsync -rLtvz $(BLOG_RSYNC_OPTS) blog/ data/ $(BLOG_REMOTE)
|
||||
|
||||
clean:
|
||||
rm -rf blog tags
|
||||
|
||||
config:
|
||||
printf 'BLOG_REMOTE:=%s\n' \
|
||||
'$(shell printf "Blog remote (eg: host:/var/www/html): ">/dev/tty; head -n1)' \
|
||||
> $@
|
||||
|
||||
tags/%: $(BLOG_SRC)/%.md
|
||||
mkdir -p tags
|
||||
grep -i '^; *tags:' "$<" | cut -d: -f2- | sed 's/ */\n/g' | sed '/^$$/d' | sort -u > $@
|
||||
|
||||
blog/index.html: index.md $(ARTICLES) $(TAGFILES) $(addprefix templates/,$(addsuffix .html,header index_header tag_list_header tag_entry tag_separator tag_list_footer article_list_header article_entry article_separator article_list_footer index_footer footer))
|
||||
mkdir -p blog
|
||||
TITLE="$(BLOG_TITLE)"; \
|
||||
PAGE_TITLE="$(BLOG_TITLE)"; \
|
||||
export TITLE; \
|
||||
export PAGE_TITLE; \
|
||||
envsubst < templates/header.html > $@; \
|
||||
envsubst < templates/index_header.html >> $@; \
|
||||
envsubst < templates/tag_list_header.html >> $@; \
|
||||
first=true; \
|
||||
for t in $(shell cat $(TAGFILES) | sort -u); do \
|
||||
"$$first" || envsubst < templates/tag_separator.html; \
|
||||
NAME="$$t" \
|
||||
URL="@$$t.html" \
|
||||
envsubst < templates/tag_entry.html; \
|
||||
first=false; \
|
||||
done >> $@; \
|
||||
envsubst < templates/tag_list_footer.html >> $@; \
|
||||
envsubst < templates/article_list_header.html >> $@; \
|
||||
first=true; \
|
||||
echo $(ARTICLES); \
|
||||
for f in $(ARTICLES); do \
|
||||
printf '%s ' "$$f"; \
|
||||
git log -n 1 --diff-filter=A --date="format:%s $(BLOG_DATE_FORMAT_INDEX)" --pretty=format:'%ad%n' -- "$$f"; \
|
||||
done | sort | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE; do \
|
||||
"$$first" || envsubst < templates/article_separator.html; \
|
||||
URL="`printf '%s' "\$$FILE" | sed 's,^$(BLOG_SRC)/\(.*\).md,\1,'`.html" \
|
||||
DATE="$$DATE" \
|
||||
TITLE="`head -n1 "\$$FILE" | sed -e 's/^# //g'`" \
|
||||
envsubst < templates/article_entry.html; \
|
||||
first=false; \
|
||||
done >> $@; \
|
||||
envsubst < templates/article_list_footer.html >> $@; \
|
||||
markdown < index.md >> $@; \
|
||||
envsubst < templates/index_footer.html >> $@; \
|
||||
envsubst < templates/footer.html >> $@; \
|
||||
|
||||
|
||||
blog/tag/%.html: $(ARTICLES) $(addprefix templates/,$(addsuffix .html,header tag_header index_entry tag_footer footer))
|
||||
|
||||
.PHONY: tagpages
|
||||
tagpages: $(TAGFILES)
|
||||
+$(BLOG) $(patsubst %,blog/@%.html,$(shell cat $(TAGFILES) | sort -u))
|
||||
|
||||
blog/@%.html: $(TAGFILES) $(addprefix templates/,$(addsuffix .html,header tag_index_header tag_list_header tag_entry tag_separator tag_list_footer article_list_header article_entry article_separator article_list_footer tag_index_footer footer))
|
||||
mkdir -p blog
|
||||
PAGE_TITLE="Articles tagged $* — $(BLOG_TITLE)"; \
|
||||
TAGS="$*"; \
|
||||
TITLE="$(BLOG_TITLE)"; \
|
||||
export PAGE_TITLE; \
|
||||
export TAGS; \
|
||||
export TITLE; \
|
||||
envsubst < templates/header.html > $@; \
|
||||
envsubst < templates/tag_index_header.html >> $@; \
|
||||
envsubst < templates/article_list_header.html >> $@; \
|
||||
first=true; \
|
||||
for f in $(shell grep -FH '$*' $(TAGFILES) | sed 's,^tags/\([^:]*\):.*,$(BLOG_SRC)/\1.md,'); do \
|
||||
printf '%s ' "$$f"; \
|
||||
git log -n 1 --diff-filter=A --date="format:%s $(BLOG_DATE_FORMAT_INDEX)" --pretty=format:'%ad%n' -- "$$f"; \
|
||||
done | sort | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE; do \
|
||||
"$$first" || envsubst < templates/article_separator.html; \
|
||||
URL="`printf '%s' "\$$FILE" | sed 's,^$(BLOG_SRC)/\(.*\).md,\1,'`.html" \
|
||||
DATE="$$DATE" \
|
||||
TITLE="`head -n1 "\$$FILE" | sed -e 's/^# //g'`" \
|
||||
envsubst < templates/article_entry.html; \
|
||||
first=false; \
|
||||
done >> $@; \
|
||||
envsubst < templates/article_list_footer.html >> $@; \
|
||||
envsubst < templates/tag_index_footer.html >> $@; \
|
||||
envsubst < templates/footer.html >> $@; \
|
||||
|
||||
|
||||
blog/%.html: $(BLOG_SRC)/%.md $(addprefix templates/,$(addsuffix .html,header article_header tag_link_header tag_link tag_link_footer article_footer footer))
|
||||
mkdir -p blog
|
||||
TITLE="$(shell head -n1 $< | sed 's/^# \+//')"; \
|
||||
export TITLE; \
|
||||
PAGE_TITLE="$${TITLE} — $(BLOG_TITLE)"; \
|
||||
export PAGE_TITLE; \
|
||||
AUTHOR="$(shell git log --format="%an" -- "$<" | tail -n 1)"; \
|
||||
export AUTHOR; \
|
||||
DATE_POSTED="$(shell git log -n 1 --diff-filter=A --date="format:$(BLOG_DATE_FORMAT)" --pretty=format:'%ad' -- "$<")"; \
|
||||
export DATE_POSTED; \
|
||||
DATE_EDITED="$(shell git log -n 1 --date="format:$(BLOG_DATE_FORMAT)" --pretty=format:'%ad' -- "$<")"; \
|
||||
export DATE_EDITED; \
|
||||
TAGS="$(shell grep -i '^; *tags:' "$<" | cut -d: -f2- | paste -sd ',')"; \
|
||||
export TAGS; \
|
||||
envsubst < templates/header.html > $@; \
|
||||
envsubst < templates/article_header.html >> $@; \
|
||||
sed -e '/^;/d' < $< | markdown -f fencedcode >> $@; \
|
||||
envsubst < templates/tag_link_header.html >> $@; \
|
||||
for i in $${TAGS} ; do \
|
||||
TAG_NAME="$$i" \
|
||||
TAG_LINK="./@$$i.html" \
|
||||
envsubst < templates/tag_link.html >> $@; \
|
||||
done; \
|
||||
envsubst < templates/tag_link_footer.html >> $@; \
|
||||
envsubst < templates/article_footer.html >> $@; \
|
||||
envsubst < templates/footer.html >> $@; \
|
||||
|
||||
blog/rss.xml: $(ARTICLES)
|
||||
printf '<?xml version="1.0" encoding="UTF-8"?>\n<rss version="2.0">\n<channel>\n<title>%s</title>\n<link>%s</link>\n<description>%s</description>\n' \
|
||||
"$(BLOG_TITLE)" "$(BLOG_URL_ROOT)" "$(BLOG_DESCRIPTION)" > $@
|
||||
for f in $(ARTICLES); do \
|
||||
printf '%s ' "$$f"; \
|
||||
git log -n 1 --diff-filter=A --date="format:%s %a, %d %b %Y %H:%M:%S %z" --pretty=format:'%ad%n' -- "$$f"; \
|
||||
done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE; do \
|
||||
printf '<item>\n<title>%s</title>\n<link>%s</link>\n<guid>%s</guid>\n<pubDate>%s</pubDate>\n<description>%s</description>\n</item>\n' \
|
||||
"`head -n 1 $$FILE`" \
|
||||
"$(BLOG_URL_ROOT)/`basename $$FILE`.html" \
|
||||
"$(BLOG_URL_ROOT)/`basename $$FILE`.html" \
|
||||
"$$DATE" \
|
||||
"`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
|
||||
done >> $@
|
||||
printf '</channel>\n</rss>\n' >> $@
|
||||
|
||||
blog/atom.xml: $(ARTICLES)
|
||||
printf '<?xml version="1.0" encoding="UTF-8"?>\n<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">\n<title type="text">%s</title>\n<subtitle type="text">%s</subtitle>\n<updated>%s</updated>\n<link rel="alternate" type="text/html" href="%s"/>\n<id>%s</id>\n<link rel="self" type="application/atom+xml" href="%s"/>\n' \
|
||||
"$(BLOG_TITLE)" "$(BLOG_DESCRIPTION)" "$(shell date +%Y-%m-%dT%H:%M:%SZ)" "$(BLOG_URL_ROOT)" "$(BLOG_URL_ROOT)/atom.xml" "$(BLOG_URL_ROOT)/atom.xml" > $@
|
||||
for f in $(ARTICLES); do \
|
||||
printf '%s ' "$$f"; \
|
||||
git log -n 1 --diff-filter=A --date="format:%s %Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad %aN%n' -- "$$f"; \
|
||||
done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE AUTHOR; do \
|
||||
printf '<entry>\n<title type="text">%s</title>\n<link rel="alternate" type="text/html" href="%s"/>\n<id>%s</id>\n<published>%s</published>\n<updated>%s</updated>\n<author><name>%s</name></author>\n<summary type="text">%s</summary>\n</entry>\n' \
|
||||
"`head -n 1 $$FILE`" \
|
||||
"$(BLOG_URL_ROOT)/`basename $$FILE`.html" \
|
||||
"$(BLOG_URL_ROOT)/`basename $$FILE`.html" \
|
||||
"$$DATE" \
|
||||
"`git log -n 1 --date="format:%Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad' -- "$$FILE"`" \
|
||||
"$$AUTHOR" \
|
||||
"`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
|
||||
done >> $@
|
||||
printf '</feed>\n' >> $@
|
||||
|
||||
taglist:
|
||||
grep -RIh '^;tags:' src | cut -d' ' -f2- | tr ' ' '\n' | sort | uniq
|
@ -0,0 +1,6 @@
|
||||
BLOG_TITLE:=Based Cooking
|
||||
BLOG_REMOTE:=/var/www/based.cooking
|
||||
BLOG_DATE_FORMAT_INDEX:=%F
|
||||
BLOG_DATE_FORMAT:=%F
|
||||
BLOG_SRC:=src
|
||||
BLOG_URL_ROOT:=https://based.cooking/
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 558 B |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 259 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 219 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB |
@ -0,0 +1,12 @@
|
||||
## About this site
|
||||
|
||||
Founded to provide a simple online cookbook without ads and obese web design.
|
||||
|
||||
### It's easy to contribute!
|
||||
|
||||
- Submit new recipes via git via [Github](https://github.com/lukesmithxyz/based.cooking) or [Gitlab](https://gitlab.com/lukesmithxyz/based.cooking).
|
||||
- If a recipe has no image for it, make the recipe as presented and submit a picture above or to [luke@lukesmith.xyz](mailto:luke@lukesmith.xyz).
|
||||
- Donate to the individual people who contribute pages whose names are at the bottom of each page.
|
||||
- Donate to the site's long-term maintenance fund:
|
||||
- ![BTC logo](https://lukesmith.xyz/pix/btc.svg) Bitcoin: `bc1q763s4ud0hgfa66ce64gyh6tsss49vyk5cqcm6w` ([QR code](pix/bitcoin-based-cooking.webp))
|
||||
- ![XMR Logo](https://lukesmith.xyz/pix/xmr.svg) Monero: `48jewbtxe4jU3MnzJFjTs3gVFWh2nRrAMWdUuUd7Ubo375LL4SjLTnMRKBrXburvEh38QSNLrJy3EateykVCypnm6gcT9bh` ([QR code](https://lukesmith.xyz/pix/xmr.png))
|
@ -1 +0,0 @@
|
||||
template.md
|
@ -1,8 +0,0 @@
|
||||
|
||||
<footer>
|
||||
<a href="index.html">🏡 Based Cooking Homepage</a> </br>
|
||||
All site content is in the Public Domain.
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,12 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title></title>
|
||||
<meta charset=UTF-8>
|
||||
<link rel=stylesheet href=style.css>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
|
||||
<body>
|
@ -1,109 +0,0 @@
|
||||
# 🍳 Based Cooking 🍲
|
||||
|
||||
Only based cooking. No ads, no tracking, nothing but based cooking.
|
||||
|
||||
## Recipes
|
||||
|
||||
- [Carbonara](carbonara.html)
|
||||
- [Chicken Parmesan](chicken-parmesan.html)
|
||||
- [Chicken Pasta Casserole](chicken-pasta-casserole.html)
|
||||
- [Gnocchi](gnocchi.html)
|
||||
- [Slow-cooked Chicken Tacos](chicken-tacos.html)
|
||||
- [Beef Stroganoff](stroganoff.html)
|
||||
- [Beef or Lamb Stew](beef-stew.html)
|
||||
- [Beef Jerky](beef-jerky.html)
|
||||
- [Hamburger Patties](hamburger-patties.html)
|
||||
- [Portuguese Steak with Beer Sauce](portuguese-steak-with-beer-sauce.html)
|
||||
- [Tuscan Style Pork Roast](tuscan-style-pork-roast.html)
|
||||
- [Flemish Beer and Gingerbread Beef Stew](carbonade.html)
|
||||
- [French Mustard Sauce Porkchops](french-mustard-sauce-porkchops.html)
|
||||
- [Chicken, Tomato & Spinach Curry](chicken-tomato-spinach-curry.html)
|
||||
- [Broiled Trevally](broiled-trevally.html)
|
||||
- [Almeirim Stone Soup](almeirim-stone-soup.html)
|
||||
- [Chicken Wings](chicken-wings.html)
|
||||
- [Instant Tom Yam Kung Noodle Soup](instant-tom-yam-kung-noodle-soup.html)
|
||||
- [Marinated Pork Steaks](marinated-pork-steaks.html)
|
||||
- [Banana Pancakes](banana-pancakes.html)
|
||||
- [Banana Bread](banana-bread.html)
|
||||
- [Cacio e Pepe](cacio-e-pepe.html)
|
||||
- [Potato and Eggplant Curry](potato-and-eggplant-curry.html)
|
||||
- [Dried Tomato and Plums Bread Spread](dried-tomato-plum-spread.html)
|
||||
- [Drunken Beans](drunken-beans.html)
|
||||
- [Chili con Carne](chili-con-carne.html)
|
||||
- [Matcha Cookies](matcha-cookies.html)
|
||||
- [Miso Ginger Pork](miso-ginger-pork.html)
|
||||
- [Pancakes](pancake.html)
|
||||
- [Oaty Pancakes](oaty-pancakes.html)
|
||||
- [Pizza Dough](pizza-dough.html)
|
||||
- [Beef Tips with Mashed Potatoes](beef-tips.html)
|
||||
- [Älplermagronen (Alpine macaroni)](aelplermagronen.html)
|
||||
- [Rösti](roesti.html)
|
||||
- [Chicken Biscuit Potpie](chicken-biscuit-potpie.html)
|
||||
- [Liver Pate](liverpate.html)
|
||||
- [Flammkuchen](flammkuchen.html)
|
||||
- [Tortellini](tortellini.html)
|
||||
- [Banana Muffins with Chocolate](banana-muffins-with-chocolate.html)
|
||||
- [Taco Meat](taco-meat.html)
|
||||
- [Fried Anglerfish Fillet](fried-anglerfish-fillet.html)
|
||||
- [Hangover Eggs](hangover-eggs.html)
|
||||
- [Caesar Salad](caesar-salad.html)
|
||||
- [Maque Choux](maque-choux.html)
|
||||
- [Ragù](ragu.html)
|
||||
- [Roasted Chicken Breast](roasted-chicken-breast.html)
|
||||
- [Scandinavian Coffee Cake](scandinavian-coffee-cake.html)
|
||||
- [Japanese Noodle Soup](japanese-noodle-soup.html)
|
||||
- [Sticky Porkchops](sticky-porkchops.html)
|
||||
- [Pork-based Chili con Carne](pork-based-chili-con-carne.html)
|
||||
- [Beef Goulash](beef-goulash.html)
|
||||
- [Omelet](omelet.html)
|
||||
- [Cheesy Meatballs with Tomato Sauce](cheesy-meatballs.html)
|
||||
- [Country Breakfast Skillet](country-skillet.html)
|
||||
- [Creamy Mashed Potatoes](creamy-mashed-potatoes.html)
|
||||
- [Fresh Guacamole](guacamole.html)
|
||||
- [Merchant's Buckwheat](merchants-buckwheat.html)
|
||||
- [Pasta Navy Style](pasta-navy-style.html)
|
||||
- [Pan-seared Chicken Fillet](pan-seared-chicken.html)
|
||||
- [Parmesan Potatoes](parmesan-potatoes.html)
|
||||
- [Refried Beans](refried-beans.html)
|
||||
- [Sunday Morning Milkshake](sunday-milkshake.html)
|
||||
- [Quesadilla](quesadilla.html)
|
||||
- [Tuna Sub](tuna-sub.html)
|
||||
- [Spaghetti and Meatballs](spaghetti-and-meatballs.html)
|
||||
- [Peanut Butter](peanut-butter.html)
|
||||
- [Hummus](hummus.html)
|
||||
- [Ginataang Kalabasa](ginataang-kalabasa.html)
|
||||
- [Simple Sauce](simple-sauce.html)
|
||||
- [Hellfire Steak](hellfire-steak.html)
|
||||
|
||||
## Basics
|
||||
|
||||
- [Chicken Stock and Bone Broth](chicken-stock-bone-broth.html)
|
||||
- [Pasta (store bought)](pasta.html)
|
||||
- [Pasta Sauce](pasta-sauce.html)
|
||||
- [Rice](rice.html)
|
||||
- [Eggs](eggs.html)
|
||||
- [Ketchup](ketchup.html)
|
||||
- [Oats](oats.html)
|
||||
- [Bread](bread.html)
|
||||
- [Sauerkraut](sauerkraut.html)
|
||||
- [Yogurt](yogurt.html)
|
||||
- [Sweet Potato Fries](sweet-potato-fries.html)
|
||||
- [Fried Potatoes](fried-potatoes.html)
|
||||
- [Croutons](croutons.html)
|
||||
|
||||
## More Info
|
||||
|
||||
- [Table Salt vs. Kosher Salt?](salt.html)
|
||||
- [Slow Cooking Benefits and Tips](slow-cooking-tips.html)
|
||||
- [Get a Mortar and Pestle](mortar-and-pestle.html)
|
||||
|
||||
## About this site
|
||||
|
||||
Founded to provide a simple online cookbook without ads and obese web design.
|
||||
|
||||
### It's easy to contribute!
|
||||
|
||||
- Submit new recipes via git via [Github](https://github.com/lukesmithxyz/based.cooking) or [Gitlab](https://gitlab.com/lukesmithxyz/based.cooking).
|
||||
- If a recipe has no image for it, make the recipe as presented and submit a picture above or to [luke@lukesmith.xyz](mailto:luke@lukesmith.xyz).
|
||||
- Donate to the individual people who contribute pages whose names are at the bottom of each page.
|
||||
- Donate Bitcoin to the site's long-term maintenance fund: `bc1q763s4ud0hgfa66ce64gyh6tsss49vyk5cqcm6w` ([QR code](pix/bitcoin-based-cooking.webp))
|
@ -1,17 +0,0 @@
|
||||
# Get a Mortar and Pestle
|
||||
|
||||
![mortar-and-pestle](pix/mortar-and-pestle.webp)
|
||||
|
||||
Mortars and pestles are tools which have unfortunately been nearly forgotten in modern American kitchens, but they
|
||||
have been around since the stone age for a reason.
|
||||
They are one of the most useful appliances and require no electricity.
|
||||
|
||||
They easily smash garlic, nuts and other things (also automatically removes skins).
|
||||
This is much better than simple slicing because it squeezes out the juices and tastes of things.
|
||||
|
||||
You can also easily make paste (like pesto) and out of herbs and other simple ingredients.
|
||||
Many people use a hard-to-clean and expensive electric food processor to do things like this,
|
||||
but a larger mortar and pestle could get the job done just as easily.
|
||||
|
||||
Do not get porcelain mortar and pestles; they are non-functional and loud.
|
||||
I have two granite ones which work very well (see pic above).
|