Merge branch 'LukeSmithxyz:master' into master
12
.github/workflows/pr.yaml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
check_files:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Check files for compliance
|
||||
run: .github/workflows/scripts/check-files.sh
|
||||
|
153
.github/workflows/scripts/check-files.sh
vendored
Executable file
@ -0,0 +1,153 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
SIZE_LIMIT=150000
|
||||
FAIL=0
|
||||
|
||||
check_size() {
|
||||
size="$(stat --printf="%s" "$1")"
|
||||
if [ "$size" -gt "$SIZE_LIMIT" ]; then
|
||||
echo "File $1 is bigger than specified $SIZE_LIMIT limit"
|
||||
FAIL=1
|
||||
fi
|
||||
}
|
||||
|
||||
check_file_name() {
|
||||
fileName="$1"
|
||||
expectedFolder="$2"
|
||||
|
||||
shouldname="${expectedFolder}/$(basename "$fileName" |
|
||||
iconv --to-code=utf-8 |
|
||||
tr '[:upper:]' '[:lower:]' |
|
||||
tr '_ ' '-')"
|
||||
|
||||
if [ "$shouldname" != "$fileName" ]; then
|
||||
echo "$1 should be named $shouldname."
|
||||
FAIL=1
|
||||
fi
|
||||
}
|
||||
|
||||
check_webp_name() {
|
||||
check_file_name "$1" "data/pix"
|
||||
}
|
||||
|
||||
check_recipe_name() {
|
||||
check_file_name "$1" "src"
|
||||
}
|
||||
|
||||
check_recipe_content() {
|
||||
errMsgs="$(awk '
|
||||
BEGIN {
|
||||
HAS_TITLE = 0;
|
||||
HAS_TAGS = 0;
|
||||
HAS_INVALID_TAGS = 0;
|
||||
NUM_TAGS = 0;
|
||||
HAS_INGREDIENTS = 0;
|
||||
HAS_DIRECTIONS = 0;
|
||||
HAS_CONSECUTIVE_EMPTY_LINES = 0;
|
||||
|
||||
CONSECUTIVE_EMPTY_LINES = 0;
|
||||
}
|
||||
|
||||
# First line should be the title
|
||||
NR == 1 && /^# / {
|
||||
HAS_TITLE = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
$0 == "## Ingredients" {
|
||||
HAS_INGREDIENTS = 1;
|
||||
}
|
||||
|
||||
$0 == "## Directions" {
|
||||
HAS_DIRECTIONS = 1;
|
||||
}
|
||||
|
||||
$0 == "" {
|
||||
CONSECUTIVE_EMPTY_LINES++
|
||||
if (CONSECUTIVE_EMPTY_LINES >= 2) {
|
||||
HAS_CONSECUTIVE_EMPTY_LINES = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$0 != "" {
|
||||
CONSECUTIVE_EMPTY_LINES = 0;
|
||||
}
|
||||
|
||||
END {
|
||||
# Last line should be the tags list
|
||||
if ($1 == ";tags:") {
|
||||
HAS_TAGS = 1;
|
||||
NUM_TAGS = NF - 1;
|
||||
|
||||
# Loop through all the tags
|
||||
for (i = 2; i <= NF; i++) {
|
||||
# Make sure that each tag only contains lowercase letters and hyphens
|
||||
if ($i !~ "^[a-z-]+$") {
|
||||
HAS_INVALID_TAGS = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!HAS_TITLE) {
|
||||
print "Recipe does not have a properly formatted title on the first line."
|
||||
}
|
||||
|
||||
if (!HAS_TAGS) {
|
||||
print "Recipe does not have a properly formatted tags on the last line."
|
||||
} else {
|
||||
if (HAS_INVALID_TAGS) {
|
||||
print "Recipe has invalid tags. Tags must be separated by spaces and contain only lowercase letters or hyphens (-)";
|
||||
}
|
||||
|
||||
if (NUM_TAGS < 2) {
|
||||
print "Recipe only has " NUM_TAGS " tags. Add some more."
|
||||
} else if (NUM_TAGS > 5) {
|
||||
print "Recipe has " NUM_TAGS " tags which is too many. Remove some tags."
|
||||
}
|
||||
}
|
||||
|
||||
if (!HAS_INGREDIENTS) {
|
||||
print "Recipe does not have an ingredients list."
|
||||
}
|
||||
|
||||
if (!HAS_DIRECTIONS) {
|
||||
print "Recipe does not have a directions section."
|
||||
}
|
||||
|
||||
if (HAS_CONSECUTIVE_EMPTY_LINES) {
|
||||
print "Recipe has at least 2 consecutive empty lines.";
|
||||
}
|
||||
}
|
||||
' "$1")"
|
||||
|
||||
if [ -n "$errMsgs" ]; then
|
||||
echo "$errMsgs"
|
||||
FAIL=1
|
||||
fi
|
||||
}
|
||||
|
||||
while IFS= read -r file; do
|
||||
echo "Checking '$file'"
|
||||
case "$file" in
|
||||
# Ignore these files
|
||||
index.md) ;;
|
||||
.github/*.md) ;;
|
||||
|
||||
*.webp)
|
||||
check_size "$file"
|
||||
check_webp_name "$file"
|
||||
;;
|
||||
*.md)
|
||||
check_recipe_name "$file"
|
||||
check_recipe_content "$file"
|
||||
;;
|
||||
esac
|
||||
# Separate each file for easier reading.
|
||||
echo ""
|
||||
done <<EOF
|
||||
$(git diff --name-only "$(git merge-base origin/master HEAD)")
|
||||
EOF
|
||||
|
||||
exit $FAIL
|
3
.github/workflows/upload.yml
vendored
@ -28,5 +28,6 @@ jobs:
|
||||
port: ${{ secrets.based_port }}
|
||||
script: |
|
||||
cd repo
|
||||
git stash
|
||||
git pull --force origin master
|
||||
make clean deploy
|
||||
make deploy
|
||||
|
121
LICENSE
Normal file
@ -0,0 +1,121 @@
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
18
Makefile
@ -18,7 +18,7 @@ BLOG_SRC ?= articles
|
||||
|
||||
.PHONY: help init build deploy clean taglist
|
||||
|
||||
ARTICLES = $(shell git ls-tree HEAD --name-only -- $(BLOG_SRC)/ 2>/dev/null)
|
||||
ARTICLES = $(shell git ls-tree HEAD --name-only -- $(BLOG_SRC)/*.md 2>/dev/null)
|
||||
TAGFILES = $(patsubst $(BLOG_SRC)/%.md,tags/%,$(ARTICLES))
|
||||
|
||||
help:
|
||||
@ -59,7 +59,7 @@ config:
|
||||
|
||||
tags/%: $(BLOG_SRC)/%.md
|
||||
mkdir -p tags
|
||||
grep -i '^; *tags:' "$<" | cut -d: -f2- | sed 's/ */\n/g' | sed '/^$$/d' | sort -u > $@
|
||||
grep -ih '^; *tags:' "$<" | cut -d: -f2- | tr -c '[^a-z\-]' ' ' | 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
|
||||
@ -107,7 +107,7 @@ tagpages: $(TAGFILES)
|
||||
|
||||
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)"; \
|
||||
PAGE_TITLE="Articles tagged $* -- $(BLOG_TITLE)"; \
|
||||
TAGS="$*"; \
|
||||
TITLE="$(BLOG_TITLE)"; \
|
||||
export PAGE_TITLE; \
|
||||
@ -117,7 +117,7 @@ blog/@%.html: $(TAGFILES) $(addprefix templates/,$(addsuffix .html,header tag_in
|
||||
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 \
|
||||
for f in $(shell awk '$$0 == "$*" { gsub("tags", "$(BLOG_SRC)", FILENAME); print FILENAME ".md"; nextfile; }' $(TAGFILES)); 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 \
|
||||
@ -137,7 +137,7 @@ blog/%.html: $(BLOG_SRC)/%.md $(addprefix templates/,$(addsuffix .html,header ar
|
||||
mkdir -p blog
|
||||
TITLE="$(shell head -n1 $< | sed 's/^# \+//')"; \
|
||||
export TITLE; \
|
||||
PAGE_TITLE="$${TITLE} — $(BLOG_TITLE)"; \
|
||||
PAGE_TITLE="$${TITLE} Recipe -- $(BLOG_TITLE)"; \
|
||||
export PAGE_TITLE; \
|
||||
AUTHOR="$(shell git log --format="%an" -- "$<" | tail -n 1)"; \
|
||||
export AUTHOR; \
|
||||
@ -167,12 +167,12 @@ blog/rss.xml: $(ARTICLES)
|
||||
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' \
|
||||
printf '<item>\n<title>%s</title>\n<link>%s</link>\n<guid>%s</guid>\n<pubDate>%s</pubDate>\n<description><![CDATA[%s]]></description>\n</item>\n' \
|
||||
"`head -n 1 $$FILE | sed 's/^# //'`" \
|
||||
"$(BLOG_URL_ROOT)`basename $$FILE | sed 's/\.md/\.html/'`" \
|
||||
"$(BLOG_URL_ROOT)`basename $$FILE | sed 's/\.md/\.html/'`" \
|
||||
"$$DATE" \
|
||||
"`tail -n+3 < $$FILE`"; \
|
||||
"`markdown < $$FILE`"; \
|
||||
done >> $@
|
||||
printf '</channel>\n</rss>\n' >> $@
|
||||
|
||||
@ -183,14 +183,14 @@ blog/atom.xml: $(ARTICLES)
|
||||
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' \
|
||||
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="html"><![CDATA[%s]]></summary>\n</entry>\n' \
|
||||
"`head -n 1 $$FILE | sed 's/^# //'`" \
|
||||
"$(BLOG_URL_ROOT)`basename $$FILE | sed 's/\.md/\.html/'`" \
|
||||
"$(BLOG_URL_ROOT)`basename $$FILE | sed 's/\.md/\.html/'`" \
|
||||
"$$DATE" \
|
||||
"`git log -n 1 --date="format:%Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad' -- "$$FILE"`" \
|
||||
"$$AUTHOR" \
|
||||
"`tail -n+3 $$FILE`"; \
|
||||
"`markdown < $$FILE`"; \
|
||||
done >> $@
|
||||
printf '</feed>\n' >> $@
|
||||
|
||||
|
38
README.md
@ -2,22 +2,24 @@
|
||||
|
||||
[https://based.cooking](https://based.cooking)
|
||||
|
||||
## To-do
|
||||
This is a simple cooking website where users can submit recipes here for credit.
|
||||
There are no ads, trackers, cookies (unless recipes thereof) or javascript.
|
||||
|
||||
- get many recipes
|
||||
- make and take pictures of recipes
|
||||
- decide on CSS/styling, something good-looking and readable, but nothing too complicated
|
||||
- search function? See below
|
||||
- keep it simple
|
||||
## Ways to contribute
|
||||
|
||||
- By adding a recipe.
|
||||
- Make a recipe and take a nice picture of it if no nice picture already
|
||||
exists. Submitted images should be small `.webp` files ideally less than 100K
|
||||
or so.
|
||||
- Fix errors in recipes or add minor improvements.
|
||||
|
||||
## Rules for submission
|
||||
|
||||
- Model submission files after [example.md](example.md). Put them in `src/`.
|
||||
- Recipes should start with a title, with a single `#`, *on the first line*. No
|
||||
empty line at the top, not trailing line at the end. The file needs to be `\n`
|
||||
empty line at the top, no trailing line at the end. The file needs to be `\n`
|
||||
terminated in linux-fashion (if you're on linux you don't need to care, it
|
||||
should be automatic).
|
||||
- Recipes should be `.md` files in the `src/` directory. Look at already
|
||||
existing `.md` files for examples or see [example](example.md).
|
||||
- File names should be the name of the dish with words separated by hyphens
|
||||
(`-`). Not underscores, and definitely not spaces.
|
||||
- Recipe must be based, i.e. good traditional and substantial food. Nothing
|
||||
@ -47,12 +49,14 @@ List of special, categorical tags to use if relevant:
|
||||
to be incorporated in another recipe.
|
||||
- `breakfast`
|
||||
- `dessert`
|
||||
- `drink`
|
||||
- `quick`: for recipes that can be cooked in under ~20 minutes.
|
||||
- `side`: side dishes such as mash, fries, etc.
|
||||
- `snack`
|
||||
- `spread`
|
||||
|
||||
If your recipe contains no meat or dairy, include the `fasting` tag.
|
||||
If it includes dairy but no milk, incude the `cheesefare` tag.
|
||||
|
||||
### Images
|
||||
|
||||
Images are stored in `data/pix`.
|
||||
@ -66,8 +70,6 @@ If you see a bad or substandard image, you may submit a better one.
|
||||
|
||||
Images should be in `.webp` format and with as small file size as possible.
|
||||
If you submit an image for say, `chicken-parmesan.md`, it should be added as `pix/chicken-parmesan.webp`.
|
||||
I will create smaller images from that which is seen on the page,
|
||||
and upon being clicked, the user will see the full-size image.
|
||||
|
||||
If you would like to add additional directional images,
|
||||
they should be numbered with two digits like: `pix/chicken-parmesan-01.webp`, etc.
|
||||
@ -83,18 +85,6 @@ This is not necessary yet though.
|
||||
I don't really want images of recipes on the mainpage yet.
|
||||
I'll think about how best to do it to minimize bandwidth if possible.
|
||||
|
||||
## curl/Search function in the future
|
||||
|
||||
I eventually want a command-line/curl interface to this site.
|
||||
Part of this would be an implicit search function.
|
||||
|
||||
So suppose someone wants a recipe with chicken, I'd like
|
||||
`curl based.cooking/chicken` to return articles with that title.
|
||||
If there is only one result, that page is opened.
|
||||
|
||||
Just something to think about.
|
||||
Then people could make a simple two or three character alias to get a simple text recipe.
|
||||
|
||||
## License
|
||||
|
||||
This website and all its content is in the public domain.
|
||||
|
BIN
data/pix/aelplermagronen.webp
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
data/pix/apple-pie.webp
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
data/pix/apple-strudel-1.webp
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
data/pix/apple-strudel-2.webp
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
data/pix/arroz-chaufa-1.webp
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
data/pix/arroz-chaufa-2.webp
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
data/pix/asian-style-chicken-sticky-sauce.webp
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
data/pix/assam-tea.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/pix/baked-mostaccioli-00.webp
Normal file
After Width: | Height: | Size: 204 KiB |
BIN
data/pix/baked-mostaccioli-01.webp
Normal file
After Width: | Height: | Size: 293 KiB |
BIN
data/pix/baked-pasta-with-broccoli.webp
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
data/pix/banana-muffins.webp
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
data/pix/beef-kidney.webP
Normal file
After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 558 B |
BIN
data/pix/bolognese-sauce-1.webp
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
data/pix/borscht.webp
Normal file
After Width: | Height: | Size: 86 KiB |
7
data/pix/btc.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<g transform="translate(0.00630876,-0.00301984)">
|
||||
<path fill="#f7931a" d="m63.033,39.744c-4.274,17.143-21.637,27.576-38.782,23.301-17.138-4.274-27.571-21.638-23.295-38.78,4.272-17.145,21.635-27.579,38.775-23.305,17.144,4.274,27.576,21.64,23.302,38.784z"/>
|
||||
<path fill="#FFF" d="m46.103,27.444c0.637-4.258-2.605-6.547-7.038-8.074l1.438-5.768-3.511-0.875-1.4,5.616c-0.923-0.23-1.871-0.447-2.813-0.662l1.41-5.653-3.509-0.875-1.439,5.766c-0.764-0.174-1.514-0.346-2.242-0.527l0.004-0.018-4.842-1.209-0.934,3.75s2.605,0.597,2.55,0.634c1.422,0.355,1.679,1.296,1.636,2.042l-1.638,6.571c0.098,0.025,0.225,0.061,0.365,0.117-0.117-0.029-0.242-0.061-0.371-0.092l-2.296,9.205c-0.174,0.432-0.615,1.08-1.609,0.834,0.035,0.051-2.552-0.637-2.552-0.637l-1.743,4.019,4.569,1.139c0.85,0.213,1.683,0.436,2.503,0.646l-1.453,5.834,3.507,0.875,1.439-5.772c0.958,0.26,1.888,0.5,2.798,0.726l-1.434,5.745,3.511,0.875,1.453-5.823c5.987,1.133,10.489,0.676,12.384-4.739,1.527-4.36-0.076-6.875-3.226-8.515,2.294-0.529,4.022-2.038,4.483-5.155zm-8.022,11.249c-1.085,4.36-8.426,2.003-10.806,1.412l1.928-7.729c2.38,0.594,10.012,1.77,8.878,6.317zm1.086-11.312c-0.99,3.966-7.1,1.951-9.082,1.457l1.748-7.01c1.982,0.494,8.365,1.416,7.334,5.553z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
BIN
data/pix/burger-dressing.webp
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
data/pix/butter-chicken-masala.webp
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
data/pix/chicken-pasta-casserole.webp
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
data/pix/chocolate-chip-cookies.webp
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
data/pix/cinque-pi.webp
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
data/pix/collard-greens-with-smoked-duck-and-parsnips.webp
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
data/pix/country-crisp-cereals.webp
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
data/pix/crab-salad.webp
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
data/pix/danish-pancake.webp
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
data/pix/diannes-cornbread-salad.webp
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
data/pix/french-toast.webp
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
data/pix/glutenfree-pfannkuchen.webp
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
data/pix/hearty-breakfast-oatmeal-00.webp
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
data/pix/hearty-breakfast-oatmeal-01.webp
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
data/pix/hoisin-pork-belly.webp
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
data/pix/italian-mulled-wine.webp
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
data/pix/lamb-biriyani.webp
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
data/pix/lasagna.webp
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
data/pix/lemon-and-oregano-chicken-traybake.webp
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
data/pix/lentejas.webp
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
data/pix/lenten-chili.webp
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
data/pix/lenten-lentil-curry.webp
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
data/pix/limoncello.webp
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
data/pix/mapo-tofu-01.webp
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
data/pix/mapo-tofu-02.webp
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
data/pix/mayonnaise-or-aioli.webp
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
data/pix/meatloaf.webp
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
data/pix/monero-based-cooking.png
Normal file
After Width: | Height: | Size: 765 B |
BIN
data/pix/naan-bread.webp
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
data/pix/no-knead-bread-1.webp
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
data/pix/no-knead-bread-2.webp
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
data/pix/oatmeal-pancakes.webp
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
data/pix/pan-pizza.webp
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
data/pix/pancake.webp
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
data/pix/paneer-tikka-masala-00.webp
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
data/pix/paneer-tikka-masala-01.webp
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
data/pix/paneer-tikka-masala-02.webp
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
data/pix/pate-chinois.webp
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
data/pix/pho-soup.webp
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
data/pix/quarkbaellchen.webp
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
data/pix/quesadilla.webp
Normal file
After Width: | Height: | Size: 187 KiB |
BIN
data/pix/ragu-napoletano-01.webp
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
data/pix/ragu-napoletano-02.webp
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
data/pix/ragu-napoletano-03.webp
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
data/pix/ravioli-01.webp
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
data/pix/ravioli-02.webp
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
data/pix/ravioli-03.webp
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
data/pix/ravioli-04.webp
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
data/pix/roesti.webp
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
data/pix/schnitzel.webp
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
data/pix/shakshouka-01.webp
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
data/pix/shakshouka-02.webp
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
data/pix/soleier.webp
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
data/pix/sourdough-bread-with-seeds-and-grains.webp
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
data/pix/sourdough-loaf.webp
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
data/pix/sourdough-potato-bread.webp
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
data/pix/spaghetti-all-amatriciana.webp
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
data/pix/spanish-tortilla.webp
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
data/pix/swedish-pancakes-00.webp
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
data/pix/swedish-pancakes-01.webp
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
data/pix/tanzania-tea-with-milk-01.webp
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
data/pix/tanzania-tea-with-milk-02.webp
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
data/pix/tomato-flavored-hamburger-macaroni.webp
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
data/pix/torrijas.webp
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
data/pix/tuna-salad.webp
Normal file
After Width: | Height: | Size: 137 KiB |
BIN
data/pix/turkey-smoked-1.webp
Normal file
After Width: | Height: | Size: 92 KiB |
7
data/pix/xmr.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="256px" height="256px" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<g>
|
||||
<path d="M127.9983,0.0005 C57.3183,0.0005 0.0003,57.3155 0.0003,127.9975 C0.0003,142.1255 2.2893,155.7145 6.5183,168.4275 L44.7993,168.4275 L44.7993,60.7335 L127.9983,143.9335 L211.1973,60.7335 L211.1973,168.4275 L249.4793,168.4275 C253.7103,155.7145 256.0003,142.1255 256.0003,127.9975 C256.0003,57.3155 198.6813,0.0005 127.9983,0.0005" fill="#FF6600"></path>
|
||||
<path d="M108.8673,163.0617 L72.5573,126.7507 L72.5573,194.5157 L58.6773,194.5157 L44.7973,194.5157 L18.6233,194.5157 C41.0923,231.3787 81.6743,255.9967 127.9963,255.9967 C174.3183,255.9967 214.9033,231.3787 237.3703,194.5157 L211.1933,194.5157 L186.3673,194.5157 L183.4373,194.5157 L183.4373,126.7507 L147.1263,163.0617 L127.9963,182.1897 L108.8693,163.0617 L108.8673,163.0617 Z" fill="#4C4C4C"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1022 B |
BIN
data/pix/yorkshire-puddings.webp
Normal file
After Width: | Height: | Size: 31 KiB |
@ -1,14 +1,29 @@
|
||||
body {
|
||||
background: #151515 ;
|
||||
color: #ccc ;
|
||||
max-width: 800px ;
|
||||
margin: auto ;
|
||||
padding: 0 16px ;
|
||||
margin-bottom: 500px ;
|
||||
font-family: sans-serif ;
|
||||
}
|
||||
|
||||
a {
|
||||
color: lightblue ;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: gray ;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center ;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: tomato ;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center ;
|
||||
}
|
||||
@ -25,25 +40,29 @@ code {
|
||||
color: lime ;
|
||||
}
|
||||
|
||||
li img {
|
||||
img[alt="BTC logo"],
|
||||
img[alt="XMR Logo"] {
|
||||
max-width: 1em ;
|
||||
max-height: 1em ;
|
||||
display: inline ;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
@media (prefers-color-scheme: light) {
|
||||
body {
|
||||
background: #151515 ;
|
||||
color: white ;
|
||||
background: white ;
|
||||
color: black ;
|
||||
}
|
||||
a {
|
||||
color: lightblue ;
|
||||
color: blue ;
|
||||
}
|
||||
a:visited {
|
||||
color: gray ;
|
||||
color: purple ;
|
||||
}
|
||||
h2 {
|
||||
color: tomato ;
|
||||
color: inherit ;
|
||||
}
|
||||
code {
|
||||
color: forestgreen ;
|
||||
}
|
||||
}
|
||||
|
||||
|
10
example.md
@ -6,11 +6,12 @@ If there is a title image of this dish, it should be above this paragraph.
|
||||
You may also include prep/cook time and the number of servings as below:
|
||||
|
||||
- ⏲️ Prep time: 10 min
|
||||
- 🍳Cook time: 30 min
|
||||
- 🍳 Cook time: 30 min
|
||||
- 🍽️ Servings: 4
|
||||
|
||||
## Ingredients
|
||||
|
||||
- There must be a blank line above all lists.
|
||||
- List the ingredients
|
||||
- in an unordered list
|
||||
- similar to this.
|
||||
@ -30,13 +31,16 @@ You may also include prep/cook time and the number of servings as below:
|
||||
|
||||
Here, just put your name and links to yourself (maybe a website or donation link) if you want.
|
||||
You may say "Anonymous" or a screenname if desired.
|
||||
If you add something substantial to an already existing recipe (including and image) you may add your name below with the contribution in parens.
|
||||
If you add something substantial to an already existing recipe (including an image) you may add your name below with the contribution in parens.
|
||||
|
||||
Note that your commit name will be used to sign the recipe, so for full
|
||||
anonymity either commit with a name that can't be traced back to you, or ask
|
||||
someone else to commit for you.
|
||||
|
||||
If you add a Bitcoin/Monero address, put it in "code" between \`'s, like below. This is for formatting, especially with long Monero addresses.
|
||||
|
||||
- Luke Smith - [website](https://lukesmith.xyz), [donate](https://lukesmith.xyz/donate)
|
||||
- Luke Smith (photo credit) - [website](https://lukesmith.xyz), [donate](https://lukesmith.xyz/donate)
|
||||
- Billy Smith - btc: `bc1q763s4ud0hgfa66ce64gyh6tsss49vyk5cqcm6w`
|
||||
- Sally Smith (photo credit) - [website](https://lukesmith.xyz), [donate](https://lukesmith.xyz/donate)
|
||||
|
||||
;tags: tag1 tag2 tag3 (see README for tag guidelines)
|
||||
|
21
index.md
@ -1,12 +1,23 @@
|
||||
## About this site
|
||||
|
||||
Founded to provide a simple online cookbook without ads and obese web design.
|
||||
See the story of this site unfold in three videos:
|
||||
|
||||
1. [A Demonstration of Modern Web Bloat](https://odysee.com/@Luke:7/a-demonstration-of-modern-web-bloat:f)
|
||||
2. [The War against Web Bloat Continues](https://odysee.com/@Luke:7/the-war-against-web-bloat-continues...:a)
|
||||
3. [SoyDevs DESTROYED Epic Style by Based Cooking](https://odysee.com/@Luke:7/soydevs-destroyed-epic-style-by-based:6)
|
||||
|
||||
### 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).
|
||||
- Submit new recipes using git via [GitHub](https://github.com/lukesmithxyz/based.cooking).
|
||||
- You may also improve recipes or add an image to those without them.
|
||||
- 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:
|
||||
-  Bitcoin: `bc1q763s4ud0hgfa66ce64gyh6tsss49vyk5cqcm6w` ([QR code](pix/bitcoin-based-cooking.webp))
|
||||
-  Monero: `48jewbtxe4jU3MnzJFjTs3gVFWh2nRrAMWdUuUd7Ubo375LL4SjLTnMRKBrXburvEh38QSNLrJy3EateykVCypnm6gcT9bh` ([QR code](https://lukesmith.xyz/pix/xmr.png))
|
||||
|
||||
### Donate to the Based.Cooking maintenance fund
|
||||
|
||||
We are funded by you only, not 20MB of ads or privacy-violating trackers per page.
|
||||
|
||||
-  Bitcoin ([QR code](pix/bitcoin-based-cooking.png)): `bc1q763s4ud0hgfa66ce64gyh6tsss49vyk5cqcm6w`
|
||||
-  Monero ([QR code](pix/monero-based-cooking.png)): `84N9N3DMWhQ9cstHwGEjo8hEvm9bjeYgjV5fLrGK6TmA9iVPjnU7NMUT7gyAc22UgGAVTCUgReQ1J67znhWP3L52Usfw6jg`
|
||||
- [Donate to Luke](https://lukesmith.xyz/donate) and add a comment saying it's for Based.Cooking.
|
||||
- Brave users may also donate BAT to this website.
|
||||
|
@ -1,32 +1,35 @@
|
||||
# Älplermagronen (Alpine macaroni)
|
||||
|
||||

|
||||
|
||||
A swiss favorite, _Älplermagronen_ combines pretty much everything you have at your disposal in your alpine chalet.
|
||||
It's the definition of comfort food for the Swiss.
|
||||
|
||||
Serves 5-6.
|
||||
|
||||
Cooking time: ~30 minutes
|
||||
- 🍳 Cook time: ~30 minutes
|
||||
- 🍽️ Servings: 4
|
||||
|
||||
## Ingredients
|
||||
|
||||
- ~150g (1/3 lb) bacon cubes
|
||||
- 3 onions (medium size)
|
||||
- 400g (15 oz) potatoes (firm/waxy)
|
||||
- 2L (1/2 gal) milk
|
||||
- 200g (7oz) macaroni (dry weight)
|
||||
- 1 - 2L (1/4 - 1/2 gal) milk
|
||||
- 400g (15 oz) macaroni (dry weight)
|
||||
- ~150g (1/3 lb) medium soft cheese. Appenzeller works best. Gruyère would be my go-to alternative.
|
||||
- a jar of apple sauce
|
||||
|
||||
Feel free to vary these amounts, it's not like this is anything strict.
|
||||
|
||||
## Directions
|
||||
|
||||
1. Fry bacon cubes in pot (this pot will be used for everything so choose an appropriately large one)
|
||||
1. Fry bacon cubes in pot (this pot will be used for everything so choose an appropriately large one).
|
||||
2. Cut onions into half-rings and let them sweat in the same pot. Add some butter if your bacon was not fatty enough.
|
||||
3. Peel potatoes and cut them into ~1 cm/half inch cubes
|
||||
3. Peel potatoes and cut them into ~1 cm/half inch cubes.
|
||||
4. When the onions have become sufficiently cooked, add potatoes.
|
||||
5. Top everything with milk and let the potatoes cook for about 10 minutes.
|
||||
7. Add macaroni and the remaining milk to cover everything. Most of the milk will be absorbed by the macaroni.
|
||||
8. Shred your cheese.
|
||||
9. A minute or two before the macaroni are done, add the shredded cheese into the pot. It should appear a bit too runny in the pot. While cooling it will increase in viscosity quite a bit. If the final texture is not creamy enough it is most likely due to using the wrong cheese.
|
||||
9. A minute or two before the macaroni are done, add the shredded cheese into the pot. It should appear a bit too runny in the pot. While cooling it will increase in viscosity quite a bit. If the final texture is not creamy enough, it is most likely due to using the wrong cheese.
|
||||
10. Season to taste. (Needs quite a bit of salt). Nutmeg also works well here.
|
||||
11. Serve with apple sauce. Should be eaten together, not as a dessert.
|
||||
|
||||
|
30
src/aglio-e-olio.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Spaghetti aglio e olio
|
||||
|
||||
Aglio e olio, pasta with garlic and olive oil, is one of the simplest yet greatest pasta dishes of all time. It's quick, easy, and uses a lot of basic pantry ingredients which makes this a convenient weeknight meal.
|
||||
|
||||
- 🍳 Cook time: 15 min
|
||||
- 🍽️ Servings: 4
|
||||
|
||||
## Ingredients
|
||||
|
||||
- 1 pound (500g) spaghetti (or similarly shaped pasta)
|
||||
- 1/2 cup (110g) extra virgin olive oil
|
||||
- 5-6 cloves of garlic
|
||||
- 1/4 tsp red pepper flakes
|
||||
- A bunch of fresh parsley
|
||||
|
||||
## Directions
|
||||
|
||||
1. Heat a large skillet on medium-high heat, start [cooking the pasta](pasta.html).
|
||||
2. Finely slice or mince the garlic and finely chop the parsley.
|
||||
3. Add the oil and garlic to the skillet and gently cook it until it's lightly golden brown.
|
||||
4. Add the red pepper flakes to the skillet and turn down the heat to let its flavor infuse the oil.
|
||||
5. When the pasta has finished cooking, drain it, and reserve at least around a cup of the cooking water.
|
||||
6. Now add the drained pasta with some of the cooking water to the skillet and toss vigorously. The starch in the pasta water will help the sauce emulsify and get it to the right consistency.
|
||||
7. At the very last second add the parsley, to preserve its freshness. Adjust the seasoning to taste if necessary.
|
||||
|
||||
## Contribution
|
||||
|
||||
- Robert [github](https://github.com/robert5800)
|
||||
|
||||
;tags: italian pasta
|
35
src/aljotta.md
Normal file
@ -0,0 +1,35 @@
|
||||
# Aljotta
|
||||
|
||||
Aljotta ("jo" as in "Yo!") is a light fish soup with roots in french bouillabaisse and similarly refers to the method of serving the fish that are cooked in it. The most appropriate fish to use for both the stock and the accompanying meal are 'clean' white fish that don't turn the broth cloudy, ideally stargazers, monkfish, red gurnard, and moray eels but also hake, mullets, cod and haddock. There are a some variants; restaurant versions could very well include lemon juice and shellfish which I don't associate with aljotta. Rice eventually became a staple with it and how much you put in is up to you. I recommend just a little. In fact, there are no ingredient amounts; the picture should give you an idea of the density you're going for. **Fresh herbs are a must**.
|
||||
|
||||
## Ingredients
|
||||
|
||||
- Fish stock (see 2.)
|
||||
- Fish, raw
|
||||
- Onion, roughly chopped
|
||||
- Garlic, sliced or diced
|
||||
- Tomatos, chopped
|
||||
- frying oil/lard
|
||||
- Extra virgin olive oil
|
||||
- Marjoram
|
||||
- Black pepper (optional)
|
||||
- Mint, small amount (optional, I never use it myself as it's too overpowering)
|
||||
- Lemon wedge/juice (optional, also overpowering)
|
||||
- Rice (optional)
|
||||
|
||||
## Directions
|
||||
|
||||
1. Cook some rice and set aside. White short-grain is best but other types will do as long as it's not starchy. Don't use arborio or sushi rice.
|
||||
2. Prepare the stock, possibly the day before, by boiling fish and fish bones in a tall stock pot on medium heat for 1-2 hours. It's customary to have loose chunks of fish in the soup so you can boil the fish and separate the meat as it starts to cook. As an example, the head, tail, skin and spine from the [anglerfish fillet recipe](https://based.cooking/fried-anglerfish-fillet) were used to make stock, then half a fillet and meat that separated from the offal became part of the soup.
|
||||
3. In a pot, heat some oil on low heat and add in the onions. Saute until translucent.
|
||||
4. Add the garlic, tomato, herbs and salt if desired. Switch to medium heat, stirring occasionally until the water starts to boil.
|
||||
5. Add the fish and let simmer on low heat until the fish are cooked thoroughly, being careful not to break them. Turn the heat off and add the olive oil.
|
||||
6. Take the fish out to be served separately. They are traditionally served topped with olive oil and a squeeze of lemon with steamed vegetables.
|
||||
7. If you are using lemon juice or rice, add them to each serving according to your preference.
|
||||
8. Leave some for tomorrow. It always tastes better the next day.
|
||||
|
||||
## Contribution
|
||||
|
||||
Shou, [website](https://shouganai.xyz)
|
||||
|
||||
;tags: fish soup mediterranean
|
58
src/apple-pie.md
Normal file
@ -0,0 +1,58 @@
|
||||
# Apple Pie
|
||||
|
||||

|
||||
|
||||
- ⏲️ Prep time: 30 min
|
||||
- 🍳Cook time: 45 min
|
||||
- 🍽️ Servings: 8
|
||||
|
||||
## Ingredients
|
||||
|
||||
### Filling
|
||||
|
||||
- 900 g (4-5) golden delicious apples
|
||||
- 15 g (1 tbsp) lemon juice
|
||||
- 50 g white sugar
|
||||
- 65 g brown sugar
|
||||
- 5 g (1 tsp) cinnamon
|
||||
- 1-2 g nutmeg
|
||||
- 15 g cornstarch
|
||||
- 15 g ice water
|
||||
- 226 g (2 sticks) cold butter, cut into slices
|
||||
|
||||
### Crust
|
||||
|
||||
- 350 g flour
|
||||
- 5 g salt
|
||||
- 30 g white sugar
|
||||
- 225 g butter
|
||||
- 50-100 ml ice water
|
||||
|
||||
### Egg Wash
|
||||
|
||||
- 1 egg (optional)
|
||||
- 15 g water (optional)
|
||||
|
||||
## Directions
|
||||
|
||||
1. Peel and cut the apples into 1-2 inch strips
|
||||
2. Put the apples in a bowl and mix in the lemon juice, sugar, cinnamon, nutmeg, and cornstarch and let it sit for 15 mins to release water
|
||||
3. Transfer the filling mixture to a sauce pan and reduce the liquid over medium to low heat for around 15 mins, stirring regularly, then turn off the gas
|
||||
4. While the filling is sitting / reducing, start the crust by putting the flour, salt, sugar, and pieces of butter in a food processor
|
||||
5. Run the food processor until it resembles a coarse sand (5-10 seconds) then start dripping in the ice water until the mixture starts to chunk together
|
||||
6. You'll know when it's done if you can pinch the dough with your hand and it sticks together
|
||||
7. Preheat oven to 350°F then start making the pie crust
|
||||
8. Cut the dough in half and roll both halves out with a rolling pin until they are big enough to cover your pie pan (around 9 inch diameter)
|
||||
9. Put the bottom half dough into the pie pan and cut off the excess dough with a knife
|
||||
10. Dump the sauce pan full of the filling into the pie pan and even it out
|
||||
11. Cover the pie filling with the top dough and fold over and tuck in the excess crust
|
||||
12. Use a fork or your fingers to pinch down the top crust to the bottom crust so you don't have air gaps
|
||||
13. Optionally you can now brush on the egg wash to make the crust get a shiny golden brown color when it cooks
|
||||
14. Cut a few slits in the top crust with a knife to give it a nice design and allow for air to release
|
||||
15. Bake 45 minutes at 350°F or until the crust is brown to your liking and the apples are bubbling inside
|
||||
|
||||
## Contribution
|
||||
|
||||
- mfed3 - xmr: `48eEMdYtCQaV5wY7wvmxK6jCxKkia9dgpNTMNT1do7RLWXCwWDgSKjN3kiZ6yHbAuAXWgDGN6imnGT9NPeHWD7zX9hSyHu2`
|
||||
|
||||
;tags: dessert pie sweet apples
|
36
src/apple-strudel.md
Normal file
@ -0,0 +1,36 @@
|
||||
# Apple strudel
|
||||
|
||||

|
||||
|
||||
- ⏲️ Prep time: 10 min
|
||||
- 🍳 Cook time: 40 min
|
||||
- 🍽️ Servings: 6
|
||||
|
||||
## Ingredients
|
||||
|
||||
- Puff pastry
|
||||
- Apricot jam (about 300 g | 10 oz)
|
||||
- 3 apples
|
||||
- Ground cinnamon
|
||||
- Breadcrumbs / crushed cookies
|
||||
- Butter (optional)
|
||||
- Powdered sugar (optional)
|
||||
|
||||
## Directions
|
||||
|
||||
1. Peel and cut the apples in thin slices.
|
||||
2. Roll out the puff pastry with a rolling pin.
|
||||
3. Spread the jam over the puff pastry with a spoon.
|
||||
4. Arrange the apple slices over the jam.
|
||||
5. Sprinkle with cinnamon and breadcrumbs.
|
||||
6. Cut tiny pieces of butter and arrange them over the apple slices.
|
||||

|
||||
7. Roll the puff pastry edges over, overlapping them.
|
||||
8. Bake for around 40 minutes at 180°C (360° F).
|
||||
9. Cover with powdered sugar.
|
||||
|
||||
## Contribution
|
||||
|
||||
- Lorenzo Iuri
|
||||
|
||||
;tags: dessert breakfast
|
37
src/arroz-chaufa.md
Normal file
@ -0,0 +1,37 @@
|
||||
# Arroz Chaufa
|
||||
|
||||
Peruvian-chinese dish. Easy to cook just add and mix everything.
|
||||
|
||||

|
||||
|
||||
- ⏲️ Prep time: 40 min
|
||||
- 🍳 Cook time: 10 min
|
||||
- 🍽️ Servings: 4
|
||||
|
||||
## Ingredients
|
||||
|
||||
- Rice
|
||||
- Salt
|
||||
- Bell Pepper
|
||||
- Chicken
|
||||
- Eggs
|
||||
- Soy Sauce
|
||||
- Welsh Onion
|
||||
|
||||

|
||||
|
||||
## Directions
|
||||
|
||||
1. Cut the chicken into pieces and fry it. Don't forget the salt.
|
||||
2. Cook scrambled eggs. Don't forget the salt.
|
||||
3. Cook the rice. If it is yesterday's rice better, preferably without salt.
|
||||
4. Cut the welsh onion and bell pepper into small squares.
|
||||
5. Mix everything over low heat, adding soy sauce.
|
||||
6. Optional: Add bacon, sesame oil.
|
||||
7. If everything is salty, you can reduce it with just a teaspoon of sugar, especially if you cook the rice with salt.
|
||||
|
||||
## Contribution
|
||||
|
||||
- Andy Rufasto - [contact](mailto:andy@andyrufasto.cf), [GPG](https://keyoxide.org/0A3D7C5B8C2499A8BEBCE72869D2E5C413569DA2)
|
||||
|
||||
;tags: peruvian chinese rice
|