Compare commits
77 Commits
a9cdbdd9e8
...
NewStyle20
| Author | SHA1 | Date | |
|---|---|---|---|
| 677bf18e5b | |||
| 9938f0f8ff | |||
| 36d0305af1 | |||
| c28f4fdb77 | |||
| 163de4c46a | |||
| 9eed69252a | |||
| 8bd8f518d4 | |||
| 82f47093a7 | |||
| e728ddac2c | |||
| 0d40f6fb54 | |||
| 93a3ae7bf0 | |||
| a45890d660 | |||
| 58b04186ed | |||
| 54ed7902db | |||
| c054d0c3c9 | |||
| 9d9bfc895b | |||
| f4f3cb4e91 | |||
| 72f8eee9cd | |||
| 0909926bde | |||
| 874ec4c434 | |||
| 0cec181ec3 | |||
| 92e077bc57 | |||
| 4f0df71c13 | |||
| 961d4ba3c3 | |||
| 664e163baf | |||
| 546438b830 | |||
| a5316f1a69 | |||
| 4665a00bc7 | |||
| 58c2b7ed6e | |||
| 53a9094b6c | |||
| 697d85e74e | |||
| 8839b6c867 | |||
| da83e0de6f | |||
| 910c0c5515 | |||
| 2c269201cd | |||
| 6025b3083a | |||
| 5d606e2fb6 | |||
| ef39b82c5e | |||
| 6d0542e72b | |||
| 209f613801 | |||
| 979093da35 | |||
| f38d21ebac | |||
| c9369e4711 | |||
| 6621b20829 | |||
| 72c0fddf02 | |||
| 6d6302bf5a | |||
| 4fd2e413f1 | |||
| aafed45d0d | |||
| beb45844cc | |||
| 5c4c547a45 | |||
| 95106a8899 | |||
| dedc1394cf | |||
| 3d57ad82c5 | |||
| 598ec3fd38 | |||
| 7e41536b4f | |||
| 8434a9dae5 | |||
| c0def2f0a3 | |||
| 25ce2716a5 | |||
| d356ff0a55 | |||
| 83fc299b7a | |||
| c68cda65d4 | |||
| c6c83fcff3 | |||
| 76472ada91 | |||
| d948f3f52c | |||
| eefcb2f5a3 | |||
| 7aa863f9c3 | |||
| 2c5efe83d9 | |||
| 28b657d871 | |||
| 42ccfdea7d | |||
| 57cc65e31e | |||
| ba661426c0 | |||
| 2aa1fdb6c0 | |||
| 9f8b81435f | |||
| 41b8d4bc13 | |||
| 2a49b92643 | |||
| 6896c7fc8e | |||
| 4e62a72096 |
@@ -1,6 +1,8 @@
|
||||
TODO:
|
||||
---------------------
|
||||
Integrate recipe structured data for recipe type articles
|
||||
Move hard-coded copy to metadata.
|
||||
Fix permanent snowing when user doesn't have JS enabled.
|
||||
Implement bold text style
|
||||
|
||||
Quiz Ideas:
|
||||
---------------------
|
||||
@@ -18,3 +20,7 @@ Quiz Ideas:
|
||||
Font Axes, Manrope:
|
||||
--------------------
|
||||
wght: 200-900 (Weight)
|
||||
|
||||
Anti-AI Measures:
|
||||
--------------------
|
||||
https://baccyflap.com/res/robots/
|
||||
@@ -10,18 +10,16 @@ My blog, originally based on the very helpful eleventy-base-blog v8, although it
|
||||
* Pretty 401 and 403 error pages
|
||||
|
||||
### Fediverse Integration
|
||||
* Mastodon [toot embedding](https://upchur.ch/gitea/n_u/nathanupchurch.com/wiki/Home#embed-a-toot-from-mastodon-using-the-toot-shortcode)
|
||||
* Link to post discussion on Mastodon
|
||||
|
||||
### Indieweb
|
||||
* [Auto-generated linktree-style page](https://upchur.ch/gitea/n_u/nathanupchurch.com/wiki#me) for the blog owner with support for custom attributes such as: `rel="me"`
|
||||
* Built in support for [webring links](https://upchur.ch/gitea/n_u/nathanupchurch.com/wiki#webrings)
|
||||
* Auto-generated, **styled** RSS feeds
|
||||
* Auto-generated, *styled* RSS feeds
|
||||
* All blog posts
|
||||
* Each individual tag
|
||||
* /now page that nicely handles posts tagged with "now"
|
||||
* Blogroll generated from _data/blogroll.js, with an automatically updated .opml so that visitors can import every blog in the list
|
||||
* Image galleries
|
||||
|
||||
### Fun
|
||||
* Image galleries
|
||||
|
||||
9
_11tycms.json
Normal file
9
_11tycms.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"input":"/content/",
|
||||
"includes":"/_includes/",
|
||||
"data":"/_data/",
|
||||
"output":"/_site/",
|
||||
"media":"/public/img",
|
||||
"build":"npx @11ty/eleventy",
|
||||
"publish":"rsync -av --del /home/n_u/Repos/nathanupchurch.com/_site/ n_u@upchur.ch:/var/www/my_webapp/www/"
|
||||
}
|
||||
259
_data/badges.js
Normal file
259
_data/badges.js
Normal file
@@ -0,0 +1,259 @@
|
||||
export default {
|
||||
imgBaseUrl: "/img/badges/",
|
||||
badges: [
|
||||
{
|
||||
altText: "Built with Eleventy.",
|
||||
imageURL: "built-with-eleventy.gif",
|
||||
linkURL: "https://www.11ty.dev/",
|
||||
},
|
||||
{
|
||||
altText: "Anything but Chrome.",
|
||||
imageURL: "anythingbut.gif",
|
||||
},
|
||||
{
|
||||
altText: "Mastodon.",
|
||||
imageURL: "mastodon.png",
|
||||
linkURL: "https://lounge.town/@nathanu",
|
||||
},
|
||||
{
|
||||
altText: "Powered by Arch BTW.",
|
||||
imageURL: "powered-by-arch-btw.png",
|
||||
},
|
||||
{
|
||||
altText: "Fuck Reform UK.",
|
||||
imageURL: "freform.gif",
|
||||
},
|
||||
{
|
||||
altText: "Hyenas Now.",
|
||||
imageURL: "hyenas-now.gif",
|
||||
},
|
||||
{
|
||||
altText: "Matrix.",
|
||||
imageURL: "matrix.2338528959.png",
|
||||
linkURL: "https://matrix.to/#/@nathan:upchur.ch",
|
||||
},
|
||||
{
|
||||
altText: "Written by a human.",
|
||||
imageURL: "written-by-a-human.gif",
|
||||
linkURL: "/ai/",
|
||||
},
|
||||
{
|
||||
altText: "I like computer.",
|
||||
imageURL: "3computer.jpg",
|
||||
},
|
||||
{
|
||||
altText: "Up all night.",
|
||||
imageURL: "anibanner.gif",
|
||||
},
|
||||
{
|
||||
altText: "800 x 600 Hi-Colors.",
|
||||
imageURL: "61.gif",
|
||||
},
|
||||
{
|
||||
altText: "ACAB",
|
||||
imageURL: "acab.gif",
|
||||
},
|
||||
{
|
||||
altText: "Get Anarchy Now!",
|
||||
imageURL: "anarchy-now.gif",
|
||||
},
|
||||
{
|
||||
altText: "No Nazi, No Fascism, No Racism.",
|
||||
imageURL: "antinazi.gif",
|
||||
},
|
||||
{
|
||||
altText: "This is an Anti-NFT site.",
|
||||
imageURL: "antinft.gif",
|
||||
},
|
||||
{
|
||||
altText: "Any browser you like.",
|
||||
imageURL: "any_browser.1317991118.png",
|
||||
},
|
||||
{
|
||||
altText: "Gifypet",
|
||||
imageURL: "badge.gif",
|
||||
linkURL: "https://gifypet.neocities.org/",
|
||||
},
|
||||
{
|
||||
altText: "Pansexual",
|
||||
imageURL: "badge_pansexual.gif",
|
||||
},
|
||||
{
|
||||
altText: "Banana",
|
||||
imageURL: "banana.gif",
|
||||
},
|
||||
{
|
||||
altText: "Free Palestine Now!!!",
|
||||
imageURL: "bufreepalestine.gif",
|
||||
},
|
||||
{
|
||||
altText: "A meowing cartoon cat with 'Devils' written beneath it.",
|
||||
imageURL: "button-devils.gif",
|
||||
},
|
||||
{
|
||||
altText: "NFT? No fucking thanks.",
|
||||
imageURL: "button110.gif",
|
||||
},
|
||||
{
|
||||
altText: "Game boy color logo.",
|
||||
imageURL: "color.gif",
|
||||
},
|
||||
{
|
||||
altText: "Copy that floppy!",
|
||||
imageURL: "copy_floppy.gif",
|
||||
},
|
||||
{
|
||||
altText: "Made with cascading style sheets.",
|
||||
imageURL: "css3.gif",
|
||||
},
|
||||
{
|
||||
altText: "Defective by design. Eliminate DRM now!",
|
||||
imageURL: "dbd.2333814563.webp",
|
||||
},
|
||||
{
|
||||
altText: "Don't feed the AI!",
|
||||
imageURL: "dontfeedai.gif",
|
||||
},
|
||||
{
|
||||
altText: "A seal with the word ‘dream’ appearing beside it.",
|
||||
imageURL: "dream_coloured.gif",
|
||||
},
|
||||
{
|
||||
altText: "Eat the rich.",
|
||||
imageURL: "eatdarich.jpg",
|
||||
},
|
||||
{
|
||||
altText: "Join the Fediverse.",
|
||||
imageURL: "fediverse.gif",
|
||||
linkURL: "https://jointhefediverse.net",
|
||||
},
|
||||
{
|
||||
altText: "Take back the web. Firefox logo.",
|
||||
imageURL: "fftake.gif",
|
||||
},
|
||||
{
|
||||
altText: "Firefox",
|
||||
imageURL: "firefox3.gif",
|
||||
},
|
||||
{
|
||||
altText: "Tested on Firefox.",
|
||||
imageURL: "firefox4.gif",
|
||||
},
|
||||
{
|
||||
altText: "Game Boy logo",
|
||||
imageURL: "gb.gif",
|
||||
},
|
||||
{
|
||||
altText: "Gitea",
|
||||
imageURL: "gitea.gif",
|
||||
},
|
||||
{
|
||||
altText: "Made on GNU/Linux.",
|
||||
imageURL: "gnu-linux.gif",
|
||||
},
|
||||
{
|
||||
altText:
|
||||
"Fight for open web standards. Fight for online privacy. Fight against monopolistic practices. Stand up to Google!",
|
||||
imageURL: "google_stand.gif",
|
||||
},
|
||||
{
|
||||
altText: "Got HTML?",
|
||||
imageURL: "got_html.gif",
|
||||
},
|
||||
{
|
||||
altText: "GLPV3",
|
||||
imageURL: "gplv3.gif",
|
||||
},
|
||||
{
|
||||
altText: "There are no bad hair days on the internet.",
|
||||
imageURL: "hair.gif",
|
||||
},
|
||||
{
|
||||
altText: "I hate Macintosh.",
|
||||
imageURL: "hatemac_b.gif",
|
||||
},
|
||||
{
|
||||
altText: "Hyenas now!",
|
||||
imageURL: "internetarchive.2540748731.png",
|
||||
},
|
||||
{
|
||||
altText: "Jellyfin",
|
||||
imageURL: "jellyfin.gif",
|
||||
},
|
||||
{
|
||||
altText: "KDE now!",
|
||||
imageURL: "knbutton.gif",
|
||||
},
|
||||
{
|
||||
altText: "Linux now! 2.0",
|
||||
imageURL: "linuxnow2.gif",
|
||||
},
|
||||
{
|
||||
altText: "Stop Microsoft!",
|
||||
imageURL: "microsoft_stop.gif",
|
||||
},
|
||||
{
|
||||
altText: "Midi",
|
||||
imageURL: "midinote.gif",
|
||||
},
|
||||
{
|
||||
altText: "Mobile friendly.",
|
||||
imageURL: "mobilefriendly.1035495686.png",
|
||||
},
|
||||
{
|
||||
altText: "Superstition: No!",
|
||||
imageURL: "nobelief.gif",
|
||||
},
|
||||
{
|
||||
altText: "Campaign against frames!",
|
||||
imageURL: "noframes3.gif",
|
||||
},
|
||||
{
|
||||
altText: "From the river to the sea: free Palestine.",
|
||||
imageURL: "palestine.gif",
|
||||
},
|
||||
{
|
||||
altText: "Powered by Penguins.",
|
||||
imageURL: "penguins.gif",
|
||||
},
|
||||
{
|
||||
altText: "Status Cafe: Your friends’ updates.",
|
||||
imageURL: "statuscafe.gif",
|
||||
linkURL: "https://status.cafe/",
|
||||
},
|
||||
{
|
||||
altText: "Go straight to hell!!!",
|
||||
imageURL: "tohell.gif",
|
||||
},
|
||||
{
|
||||
altText: "Tor logo",
|
||||
imageURL: "tor.gif",
|
||||
},
|
||||
{
|
||||
altText: "Trans rights now!",
|
||||
imageURL: "transnow2.gif",
|
||||
},
|
||||
{
|
||||
altText: "uBlock Origin Now!",
|
||||
imageURL: "ublock-origin.3786077848.webp",
|
||||
},
|
||||
{
|
||||
altText: "Under construction.",
|
||||
imageURL: "undercon2.gif",
|
||||
},
|
||||
{
|
||||
altText: "View and sign my guestbook. Click here.",
|
||||
imageURL: "viewbook.gif",
|
||||
linkURL: "/guestbook/",
|
||||
},
|
||||
{
|
||||
altText: "wilby.me search",
|
||||
imageURL: "wiby.1897295341.png",
|
||||
linkURL: "https://wiby.me/",
|
||||
},
|
||||
{
|
||||
altText: "I survived Y2K.",
|
||||
imageURL: "y2ks.gif",
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -304,6 +304,13 @@ export default {
|
||||
url: "https://www.neatorama.com/",
|
||||
description: "Yep, Neatorama's still around!",
|
||||
},
|
||||
{
|
||||
title: "Public Domain Review",
|
||||
feedUrl: "https://publicdomainreview.org/rss.xml",
|
||||
url: "https://publicdomainreview.org",
|
||||
description:
|
||||
"The Public Domain Review is an online journal and not-for-profit project dedicated to the exploration of curious and compelling works from the history of art, literature, and ideas.",
|
||||
},
|
||||
{
|
||||
title: "The Pudding",
|
||||
feedUrl: "https://pudding.cool/rss.xml",
|
||||
@@ -350,7 +357,7 @@ export default {
|
||||
name: "Incense, Fragrance, and Perfumery",
|
||||
blogs: [
|
||||
{
|
||||
title: "Apothecary's Garden Blog",
|
||||
title: "Apothecary’s Garden Blog",
|
||||
feedUrl: "https://apothecarysgarden.com/blogs/blog.atom",
|
||||
url: "https://apothecarysgarden.com/blogs/blog",
|
||||
description:
|
||||
@@ -501,6 +508,13 @@ export default {
|
||||
description:
|
||||
"Started in 1997 by Floor64 founder Mike Masnick and then growing into a group blogging effort, the Techdirt blog relies on a proven economic framework to analyze and offer insight into news stories about changes in government policy, technology and legal issues that affect companies’ ability to innovate and grow.",
|
||||
},
|
||||
{
|
||||
title: "The Canary",
|
||||
feedUrl: "https://www.thecanary.co/feed/",
|
||||
url: "https://www.thecanary.co/",
|
||||
description:
|
||||
"The Canary is a anti-oppression, decolonised, and recolonised radical media outlet that publishes the truth without fear or favour. We publish stories that matter to ordinary people across the UK, whether the corporate and state media like it or not.",
|
||||
},
|
||||
{
|
||||
title: "Usermag",
|
||||
feedUrl: "https://www.usermag.co/feed",
|
||||
@@ -575,7 +589,7 @@ export default {
|
||||
},
|
||||
{
|
||||
title: "Dom Corriveau",
|
||||
feedUrl: "https://blog.ctms.me/index.xml",
|
||||
feedUrl: "https://blog.ctms.me/posts/index.xml",
|
||||
url: "https://blog.ctms.me/",
|
||||
description:
|
||||
"Thoughts, opinions, wild speculation, and haphazard technical advice from Dom.",
|
||||
@@ -593,6 +607,14 @@ export default {
|
||||
description:
|
||||
"Writing on wet shaving, politics, whole food plant based diets, and more.",
|
||||
},
|
||||
{
|
||||
title: "lemon ice cream",
|
||||
feedUrl:
|
||||
"https://soundsoflemonicecream.blogspot.com/feeds/posts/default?alt=rss",
|
||||
url: "https://soundsoflemonicecream.blogspot.com/",
|
||||
description:
|
||||
"annabelle kathleen marcile akers - aka lemon ice cream.",
|
||||
},
|
||||
{
|
||||
title: "MediaActivist",
|
||||
feedUrl: "https://www.mediaactivist.com/rss/",
|
||||
|
||||
@@ -1,4 +1,89 @@
|
||||
export default [
|
||||
{
|
||||
title: "Wild Berry Fizzy Pop Powder",
|
||||
description:
|
||||
"Recording my experience burning Wild Berry’s Fizzy Pop incense powder.",
|
||||
synopsis:
|
||||
"Recording my experience burning Wild Berry’s Fizzy Pop incense powder.",
|
||||
url: "/img/gallery/wild-berry-fizzy-pop/",
|
||||
date: new Date("May 28, 2026"),
|
||||
galleryImage: "wild-berry-fizzy-pop-powder-8.webp",
|
||||
galleryImageAlt: "",
|
||||
pictures: [
|
||||
{
|
||||
title: "Preparing the censer",
|
||||
filename: "wild-berry-fizzy-pop-powder-1.webp",
|
||||
altText:
|
||||
"A brass incense censer with a tool holder and stencil next to a jar of the incense powder.",
|
||||
thumbAltText:
|
||||
"A brass incense censer with a tool holder and stencil next to a jar of the incense powder.",
|
||||
caption: "I feel guilty for sullying this censer.",
|
||||
},
|
||||
{
|
||||
title: "Electric blue",
|
||||
filename: "wild-berry-fizzy-pop-powder-8.webp",
|
||||
altText:
|
||||
"A brass incense spoon scooping bright blue powder from the top of a jar.",
|
||||
thumbAltText:
|
||||
"A brass incense spoon scooping bright blue powder from the top of a jar.",
|
||||
caption: "Just look at the color of this stuff!",
|
||||
},
|
||||
{
|
||||
title: "Adding powder",
|
||||
filename: "wild-berry-fizzy-pop-powder-2.webp",
|
||||
altText:
|
||||
"Putting the electric blue powder atop the brass stencil with a tiny incense spoon.",
|
||||
thumbAltText:
|
||||
"Putting the electric blue powder atop the brass stencil with a tiny incense spoon.",
|
||||
caption: "No turning back now.",
|
||||
},
|
||||
{
|
||||
title: "Adding more powder",
|
||||
filename: "wild-berry-fizzy-pop-powder-3.webp",
|
||||
altText:
|
||||
"Putting more electric blue powder atop the brass stencil with a tiny incense spoon.",
|
||||
thumbAltText:
|
||||
"Putting more electric blue powder atop the brass stencil with a tiny incense spoon.",
|
||||
caption: "Fully committing.",
|
||||
},
|
||||
{
|
||||
title: "Stencil loaded",
|
||||
filename: "wild-berry-fizzy-pop-powder-4.webp",
|
||||
altText:
|
||||
"The grooves of the brass stencil are full of blue incense powder, revealing the shape of an auspicious cloud.",
|
||||
thumbAltText:
|
||||
"The grooves of the brass stencil are full of blue incense powder, revealing the shape of an auspicious cloud.",
|
||||
caption: "That color is wild.",
|
||||
},
|
||||
{
|
||||
title: "Time to get lit",
|
||||
filename: "wild-berry-fizzy-pop-powder-5.webp",
|
||||
altText:
|
||||
"A plasma lighter hovers ominously over the tail of a trail of blue incense powder in the shape of an auspicious cloud, atop a flat layer of ash in a brass censer.",
|
||||
thumbAltText:
|
||||
"A plasma lighter hovers ominously over the tail of a trail of blue incense powder in the shape of an auspicious cloud, atop a flat layer of ash in a brass censer.",
|
||||
caption: "Here we go.",
|
||||
},
|
||||
{
|
||||
title: "Time to get lit",
|
||||
filename: "wild-berry-fizzy-pop-powder-6.webp",
|
||||
altText:
|
||||
"A long, angry-looking ember travels down the trail of blue incense powder.",
|
||||
thumbAltText:
|
||||
"A long, angry-looking ember travels down the trail of blue incense powder.",
|
||||
caption: "What a wicked looking ember.",
|
||||
},
|
||||
{
|
||||
title: "Finally over",
|
||||
filename: "wild-berry-fizzy-pop-powder-7.webp",
|
||||
altText:
|
||||
"A long, angry-looking ember lights the final stretch of the incense seal, leaving a trail of very dark black ash.",
|
||||
thumbAltText:
|
||||
"A long, angry-looking ember lights the final stretch of the incense seal, leaving a trail of very dark black ash.",
|
||||
caption: "At last.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Cooking",
|
||||
description: "Some stuff I've made in the kitchen.",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -12,3 +12,9 @@
|
||||
async
|
||||
src="//gc.zgo.at/count.js"
|
||||
></script>
|
||||
|
||||
<!-- Mochi -->
|
||||
<script
|
||||
src="https://mochi.meadow.cafe/reaper/mochi@upchur.ch/embed/1.js"
|
||||
async
|
||||
></script>
|
||||
|
||||
51
_includes/articleAuthor.njk
Normal file
51
_includes/articleAuthor.njk
Normal file
@@ -0,0 +1,51 @@
|
||||
<div class="author">
|
||||
{% if author %}
|
||||
{% if author.profilePic %}
|
||||
{% if author.url %}
|
||||
<a href="{{ author.url }}">
|
||||
{% endif %}
|
||||
<img class="profilePic" src="{{ author.profilePic }}">
|
||||
{% if author.url %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<p>
|
||||
{% if author.url %}
|
||||
<a href="{{ author.url }}">
|
||||
{% endif %}
|
||||
{% if author.name %}
|
||||
<span class="authorName">{{ author.name }}</span>
|
||||
{% endif %}
|
||||
{% if author.url %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if author.bio %}
|
||||
<br>{{ author.bio }}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% else %}
|
||||
{% if metadata.author.profilePic %}
|
||||
{% if metadata.author.url %}
|
||||
<a href="{{ metadata.author.url }}">
|
||||
{% endif %}
|
||||
<img class="profilePic" src="{{ metadata.author.profilePic }}">
|
||||
{% if metadata.author.url %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<p>
|
||||
{% if metadata.author.url %}
|
||||
<a href="{{ metadata.author.url }}">
|
||||
{% endif %}
|
||||
{% if metadata.author.name %}
|
||||
<span class="authorName">{{ metadata.author.name }}</span>
|
||||
{% endif %}
|
||||
{% if metadata.author.url %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if metadata.author.bio %}
|
||||
<br>{{ metadata.author.bio }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
17
_includes/birb.njk
Normal file
17
_includes/birb.njk
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- Birb -->
|
||||
<script>
|
||||
const showBirb = () => {
|
||||
script = document.createElement('script');
|
||||
script.setAttribute("src", "https://cdn.jsdelivr.net/gh/IdreesInc/Pocket-Bird@main/dist/web/birb.embed.js");
|
||||
document.body.appendChild(script);
|
||||
};
|
||||
|
||||
const hideBirb = () => {
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
const noBirb = () => {
|
||||
console.info("Settings: Not showing birb :[");
|
||||
}
|
||||
</script>
|
||||
<!-- /Birb -->
|
||||
@@ -1,21 +1,25 @@
|
||||
<footer>
|
||||
<p>{% if metadata.copyrightNotice %}<span class="copyright-notice">{{ metadata.copyrightNotice }}</span>{% endif %}
|
||||
|
||||
{% if metadata.webrings %}<br>
|
||||
{% for webring in metadata.webrings %}
|
||||
<div class="footerContainer">
|
||||
<p>
|
||||
{% if metadata.copyrightNotice %}
|
||||
<span class="copyright-notice">{{ metadata.copyrightNotice }}</span>
|
||||
{% endif %}
|
||||
<br>Made by humans, not AI.
|
||||
<div class="webringsContainer">
|
||||
{% if metadata.webrings %}{% for webring in metadata.webrings %}
|
||||
<span class="webring">
|
||||
{% if webring.previousURL %}<a href="{{ webring.previousURL }}">←</a>{% endif %}
|
||||
{% if webring.ringURL %}<a href="{{ webring.ringURL }}">{{ webring.name }}</a>{% endif %}
|
||||
{% if webring.nextURL %}<a href="{{ webring.nextURL }}">→</a>{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<a href="/sitemap/">Sitemap</a>
|
||||
</span><br>
|
||||
{% endfor %}{% endif %}
|
||||
</div>
|
||||
<div class="linksContainer">
|
||||
{% if metadata.footerLinks %}{% for link in metadata.footerLinks %}
|
||||
<a {% if link.onClick %} onCLick="{{ link.onClick }}"{% endif %} href="{{ link.linkURL }}">{{ link.linkDisplay }}</a>
|
||||
{% endfor %}{% endif %}
|
||||
</div>
|
||||
</p>
|
||||
<div id="buttonsAndStuffContainer">
|
||||
<a href="https://notbyai.fyi/">
|
||||
<img src="/img/written-by-human-not-by-ai-white.svg" alt="Written by humans, not by AI.">
|
||||
</a>
|
||||
{% include "siteSettings.njk" %}
|
||||
</div>
|
||||
</footer>
|
||||
{% include "settings/siteSettings.njk" %}
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
<a href="#skip" class="visually-hidden">Skip to main content</a>
|
||||
<header>
|
||||
<a
|
||||
href="/"
|
||||
class="home-link">
|
||||
<img
|
||||
class="logo"
|
||||
src="{% if metadata.holidayLogo %}{{ metadata.holidayLogo }}{% else %}{{ metadata.logo }}{% endif %}"
|
||||
alt="{{ metadata.title }}">
|
||||
</a>
|
||||
{% if not hideNav %}{% include "nav.njk" %}{% endif %}
|
||||
</header>
|
||||
|
||||
5
_includes/issoCommenting.njk
Normal file
5
_includes/issoCommenting.njk
Normal file
@@ -0,0 +1,5 @@
|
||||
<script data-isso="https://isso.upchur.ch" src="https://isso.upchur.ch/js/embed.min.js"></script>
|
||||
|
||||
<section id="isso-thread">
|
||||
<noscript>Javascript needs to be activated to view comments.</noscript>
|
||||
</section>
|
||||
@@ -4,18 +4,83 @@
|
||||
{% include "metadata.njk" %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/index.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/webfonts/webfonts.css" />
|
||||
{% if tags and (tags.includes('nowBurning') or tags.includes('status')) %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/microblog.css" />
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('blogroll') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/blogroll.css" />
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('galleryImage') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/gallery-images.css" />
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('navigator') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/navigator.css" />
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('tagList') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/tags.css" />
|
||||
{% endif %}
|
||||
{% if tags and (tags.includes('posts') or tags.includes('now')) %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/audio-player.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/code.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/comments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/continue-discussion-on-mastodon.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/dropcap.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/fleuron.css" />
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('guestbook') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/guestbook.css" />
|
||||
{% endif %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/weather.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/woo-mode.css" />
|
||||
{% if tags and tags.includes('quiz') %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/quiz.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/css/comments.css" />
|
||||
{% endif %}
|
||||
{% if includeTOC %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/toc.css" />
|
||||
{% endif %}
|
||||
{% if search %}
|
||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css">
|
||||
<link rel="stylesheet" type="text/css" href="/css/search.css" />
|
||||
{% endif %}
|
||||
<script src="/js/main.js"></script>
|
||||
<!-- Mochi webmentions -->
|
||||
<link rel="webmention" href="https://mochi-webmentions.meadow.cafe/webmention/mochi@upchur.ch/1/receive" />
|
||||
<!-- Indieweb profile links -->
|
||||
{% if not excludeProfilesFromHead %}{% for link in metadata.socialLinks %}{% if not link.excludeFromHead %}<link {% if link.customAttribute %} {{ link.customAttribute | safe }} {% endif %} href="{{ link.linkURL }}" />{% endif %}{% endfor %}{% endif %}
|
||||
<!-- /Indieweb profile links -->
|
||||
{% include "structuredData.njk" %}
|
||||
{% include "analytics.html" %}
|
||||
</head>
|
||||
<body>
|
||||
{% include "header.njk" %}
|
||||
<main id="skip">
|
||||
{% if includeTOC %}
|
||||
<section>
|
||||
<article data-pagefind-body>
|
||||
<h1>{{ h1 }}</h1>
|
||||
<section>
|
||||
<details class="toc">
|
||||
<summary>Table of Contents</summary>
|
||||
{{ content | toc(tags=['h2', 'h3', 'h4'], wrapper='div') | removeHash | safe }}
|
||||
</details>
|
||||
</section>
|
||||
<section>
|
||||
{{ content | safe }}
|
||||
</section>
|
||||
</article>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% if not includeTOC %}
|
||||
<section>
|
||||
{{ content | safe }}
|
||||
</section>
|
||||
{% endif %}
|
||||
</main>
|
||||
{% include "footer.njk" %}
|
||||
{% include "birb.njk" %}
|
||||
{% include "weather.njk" %}
|
||||
{% include "wooMode.njk" %}
|
||||
{% include "settings/settingsConfig.njk" %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
showPostListHeader: yep
|
||||
tags:
|
||||
- navigator
|
||||
---
|
||||
<h1>I’m Nathan; welcome friend.</h1>
|
||||
<p class="nodropcap page-block">My name is Nathan Upchurch, and this is my personal website and blog, where I write about all sorts of <a href="/tags">things</a> that I find interesting. Click through the categories below or see the <a href="/sitemap">sitemap</a> for a full list of everything there is to look at here.</p>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
---
|
||||
layout: layouts/linksPage.njk
|
||||
---
|
||||
<div class="links-container">
|
||||
<img class="profilePic" src="{{ metadata.author.profilePic }}">
|
||||
<h1 class="socialTitle">Nathan Upchurch</h1>
|
||||
<p class="page-block nodropcap">Here's where you can find me on the internet:</p>
|
||||
<div class="links-container h-card" data-pagefind-body>
|
||||
<img class="profilePic u-photo" src="{{ metadata.author.profilePic }}">
|
||||
<h1 class="socialTitle p-name">Nathan Upchurch</h1>
|
||||
<p class="page-block nodropcap">Here’s where you can find me on the internet:</p>
|
||||
<div class="socialLinks">
|
||||
{% for link in metadata.socialLinks %}
|
||||
<a class="link-button" {% if link.customAttribute %} {{ link.customAttribute | safe }} {% endif %} href="{{ link.linkURL }}">
|
||||
<button type="button"><img src="{{ link.iconURL }}" />{{ link.linkDisplay }}</button>
|
||||
<a class="link-button u-url" {% if link.customAttribute %} {{ link.customAttribute | safe }} {% endif %} href="{{ link.linkURL }}">
|
||||
<button type="button">{{ link.iconSVG | safe }}{{ link.linkDisplay }}</button>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
@@ -1,44 +1,40 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
---
|
||||
<article class="post">
|
||||
<h1>{{ title | safe }}</h1>
|
||||
{% if not hideMetadata %}
|
||||
<div class="post-metadata">
|
||||
{% if author %}
|
||||
{% if author.profilePic %}
|
||||
<img class="profilePic" src="{{ author.profilePic }}">
|
||||
{% endif %}
|
||||
<div class="post-metadata-copy">
|
||||
<p>{% if author.url %}<a href="{{ author.url }}">{% endif %}
|
||||
{% if author.name %}By {{ author.name }}{% endif %}{% if author.url %}</a> • {% endif %}<time datetime="{{ page.date | htmlDateString }}">{{ page.date | niceDate }}</time> • {{ content | emojiReadTime }}</p>
|
||||
|
||||
{% else %}
|
||||
{% if metadata.author.profilePic %}
|
||||
<img class="profilePic" src="{{ metadata.author.profilePic }}">
|
||||
{% endif %}
|
||||
<div class="post-metadata-copy">
|
||||
<p>{% if metadata.author.url %}<a href="{{ metadata.author.url }}">{% endif %}
|
||||
{% if metadata.author.name %}By {{ metadata.author.name }}{% endif %}{% if metadata.author.url %}</a> • {% endif %}<time datetime="{{ page.date | htmlDateString }}">{{ page.date | niceDate }}</time> • {{ content | emojiReadTime }}</p>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
<ul>
|
||||
<article class="post" data-pagefind-body>
|
||||
<div class="hero-container">
|
||||
<div class="hero">
|
||||
<p class="post-taglist">
|
||||
{%- for tag in tags | filterTagList %}
|
||||
{%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
||||
<li>
|
||||
<a
|
||||
href="{{ tagUrl }}"
|
||||
class="post-tag">
|
||||
{{ tag }}
|
||||
</a>
|
||||
</li>
|
||||
<a href="{{ tagUrl }}">#{{ tag }} </a>
|
||||
{%- endfor %}
|
||||
</ul>
|
||||
</p>
|
||||
<h1>{{ title | markdownify | safe}}</h1>
|
||||
{% if synopsis %}
|
||||
<p class="post-synopsis">
|
||||
{{ synopsis | markdownify | safe}}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if tags and tags.includes('quiz') %}
|
||||
<p class="post-synopsis">
|
||||
{{ content | markdownify | safe}}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if not tags.includes('quiz') %}
|
||||
{% if imageURL %}
|
||||
<a href="{{ imageURL }}"><img class="post-image" src="{{ imageURL }}" alt="{{ imageAlt }}"></a>
|
||||
{% endif %}
|
||||
<p class="post-time-author">
|
||||
<time datetime="{{ page.date | htmlDateString }}">{{ page.date | niceDate }}</time><br>
|
||||
By <a href="{% if author %}{{ author.url }}{% else %}{{ metadata.author.url }}{% endif %}">{% if author %}{{ author.name }}{% else %}{{ metadata.author.name }}{% endif %}</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ content | safe }}
|
||||
</div>
|
||||
{% if tags and not tags.includes('quiz') %}{{ content | safe }}{% endif %}
|
||||
</article>
|
||||
{% if tags and not tags.includes('quiz') %}
|
||||
{% include "articleAuthor.njk" %}
|
||||
{% include "mastodonComments.njk" %}
|
||||
{% endif %}
|
||||
{% include "issoCommenting.njk" %}
|
||||
|
||||
@@ -3,6 +3,12 @@ layout: layouts/post.njk
|
||||
structuredData: none
|
||||
---
|
||||
{{ content | safe }}
|
||||
{% if imageURL %}
|
||||
<a href="{{ imageURL }}"><img class="post-image" src="{{ imageURL }}" alt="{{ imageAlt }}"></a>
|
||||
{% endif %}
|
||||
<p class="post-time-author">
|
||||
<time datetime="{{ page.date | htmlDateString }}">{{ page.date | niceDate }}</time><br>
|
||||
By <a href="{% if author %}{{ author.url }}{% else %}{{ metadata.author.url }}{% endif %}">{% if author %}{{ author.name }}{% else %}{{ metadata.author.name }}{% endif %}</a></p>
|
||||
<section class="quiz">
|
||||
<form onsubmit="handleQuizSubmit(); return false">
|
||||
{% for question in questions %}
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
{% if mastodon_id %}
|
||||
<section class="" id="comment-section">
|
||||
<div class="continue-discussion">
|
||||
<div class="continue-discussion">
|
||||
<a class="link-button" href="https://{{ metadata.mastodonHost }}/@{{ metadata.mastodonUser }}/{{ mastodon_id }}">
|
||||
<button type="button">
|
||||
<img src="/img/mastodon.svg">
|
||||
<svg
|
||||
viewBox="0 0 1536 1792"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M1503.302 1111.386c-22.579 116.159-202.224 243.284-408.55 267.921-107.588 12.837-213.519 24.636-326.476 19.455-184.728-8.463-330.494-44.092-330.494-44.092 0 17.983 1.11 35.106 3.328 51.12 24.015 182.308 180.772 193.228 329.261 198.32 149.872 5.127 283.321-36.951 283.321-36.951l6.157 135.491s-104.827 56.293-291.574 66.646c-102.974 5.66-230.836-2.59-379.759-42.009C65.529 1641.797 10.219 1297.502 1.482 948.17-1.11 844.449.485 746.646.49 664.847.5 307.631 234.539 202.924 234.539 202.924c118.011-54.199 320.512-76.99 531.033-78.71h5.173c210.52 1.721 413.152 24.511 531.157 78.71 0 0 234.04 104.706 234.04 461.923 0 0 2.935 263.556-32.64 446.539zm-243.429-418.827c0-88.4-21.711-159.35-67.71-210.618-46.63-51.972-107.687-78.613-183.47-78.613-87.699 0-154.104 33.703-198.002 101.121L768 576l-42.683-71.55c-43.907-67.42-110.313-101.124-198.003-101.124-75.792 0-136.849 26.642-183.47 78.614-45.21 51.973-67.718 122.219-67.718 210.618v432.53h171.359V705.273c0-88.498 37.234-133.415 111.713-133.415 82.35 0 123.63 53.283 123.63 158.646v229.788h170.35V730.505c0-105.363 41.272-158.646 123.62-158.646 74.478 0 111.715 44.917 111.715 133.415v419.816h171.358V692.56z"
|
||||
id="path1"
|
||||
style="fill-opacity:1" />
|
||||
</svg>
|
||||
|
||||
Discuss on Mastodon »
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -8,4 +8,3 @@
|
||||
<meta name="generator" content="{{ eleventy.generator }}">
|
||||
<link rel="alternate" href="/feed/feed.xml" type="application/atom+xml" title="{{ metadata.title }}">
|
||||
<link rel="alternate" href="/feed/feed.json" type="application/json" title="{{ metadata.title }}">
|
||||
<script type="module" src="/js/main.js"></script>
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
<nav>
|
||||
<div class="nav-elements-grid-container">
|
||||
<div class="nav-elements-container">
|
||||
<h2 class="visually-hidden">Top level navigation menu</h2>
|
||||
<a
|
||||
href="/"
|
||||
class="home-link">
|
||||
<svg class="logo" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 8.467 8.467"><path d="M23.248 20.452v6.444c0 1.12.902 2.023 2.023 2.023h4.421c1.12 0 2.023-.902 2.023-2.023v-4.421c0-1.12-.902-2.023-2.023-2.023h-6.444m1.516 1.924q.102.007.255.013a8 8 0 0 0 .848-.013l2.39 3.18V23.32q0-.313-.039-.478a.36.36 0 0 0-.165-.243q-.128-.076-.402-.095v-.128a18 18 0 0 0 .676.02 8 8 0 0 0 .567-.02v.128a.65.65 0 0 0-.312.095.36.36 0 0 0-.147.23 2.3 2.3 0 0 0-.032.44v3.638a1.712 1.712 0 0 0-.268 0l-2.734-3.715v2.753q0 .306.039.478.037.165.166.242.134.07.401.096v.127a3 3 0 0 0-.312-.013 11 11 0 0 0-.676 0q-.153 0-.255.013v-.127a.7.7 0 0 0 .312-.096.34.34 0 0 0 .141-.23q.038-.159.038-.44v-2.943q0-.236-.038-.344a.21.21 0 0 0-.14-.153.9.9 0 0 0-.313-.051zm5.092 3.671a.5.5 0 0 1 .357.128q.14.127.14.337t-.14.338a.5.5 0 0 1-.357.127.52.52 0 0 1-.363-.127.45.45 0 0 1-.134-.338q0-.21.134-.337a.52.52 0 0 1 .363-.128" style="fill-opacity:1;" transform="translate(-23.248 -20.452)"/></svg>
|
||||
</a>
|
||||
{% if tags and tags.includes('posts') and not tags.includes('quiz') and not hideBlogTitleFromHeader%}
|
||||
<a class="blog-name" href="/blog">
|
||||
{{ metadata.blogName }}
|
||||
</a>
|
||||
{% endif %}
|
||||
<ul class="nav">
|
||||
{%- for entry in collections.all | eleventyNavigation %}
|
||||
<li class="nav-item" {% if entry.url == page.url %} aria-current="page" data-currentpage="true"{% endif %}><a href="{{ entry.url }}">{{ entry.title }}</a></li>
|
||||
@@ -7,4 +19,6 @@
|
||||
<li class="subscribe nav-item"><a href="/feed/feed.xml">{% include "rssLogo.njk" %}Feed</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{% for link in metadata.navigatorLinks %}
|
||||
<div class="navigatorItem">
|
||||
<a href="{{ link.linkURL }}">
|
||||
<img alt="" src="{{ link.iconURL }}">
|
||||
{{ link.iconSVG | safe }}
|
||||
<p>{{ link.linkDisplay }}</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
{% if collections.posts %}
|
||||
{% set previousPost = collections.posts | getPreviousCollectionItem %}
|
||||
{% set nextPost = collections.posts | getNextCollectionItem %}
|
||||
{% if nextPost or previousPost %}
|
||||
<section class="links-nextprev">
|
||||
<h2>Read Next</h2>
|
||||
<div class="postlist-item-container">
|
||||
{% if previousPost %}
|
||||
<article class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
||||
<a href="{{ previousPost.url }}" class="postlist-link">
|
||||
<div class="post-image-container">
|
||||
<img class="post-image" {% if previousPost.data.imageURL %} src="{{ previousPost.data.imageURL }}" alt="{{ previousPost.data.imageAlt }}" {% else %} src="{{ metadata.defaultPostImageURL }}" alt="{{ metadata.defaultPostImageAlt }}"{% endif %}>
|
||||
</div>
|
||||
</a>
|
||||
<div class="post-copy">
|
||||
<a href="{{ previousPost.url }}" class="postlist-link">
|
||||
<p>Previous Article:</p>
|
||||
<h3>
|
||||
{% if previousPost.data.title %}{{ previousPost.data.title }}{% else %}<code>{{ previousPost.url }}</code>{% endif %}
|
||||
</h3>
|
||||
</a>
|
||||
<time class="postlist-date" datetime="{{ previousPost.date | htmlDateString }}">{{ previousPost.date | readableDate("LLLL yyyy") }}</time>
|
||||
{% if previousPost.data.synopsis %}
|
||||
<p>{{ previousPost.data.synopsis | truncate(105) | safe }}</p>
|
||||
{% else %}
|
||||
<p>{{ previousPost.content | truncate(105) | safe }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
{% if not nextPost %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if nextPost %}
|
||||
<article class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
||||
<a href="{{ nextPost.url }}" class="postlist-link">
|
||||
<div class="post-image-container">
|
||||
<img class="post-image" {% if nextPost.data.imageURL %} src="{{ nextPost.data.imageURL }}" alt="{{ nextPost.data.imageAlt }}" {% else %} src="{{ metadata.defaultPostImageURL }}" alt="{{ metadata.defaultPostImageAlt }}"{% endif %}>
|
||||
</div>
|
||||
</a>
|
||||
<div class="post-copy">
|
||||
<a href="{{ nextPost.url }}" class="postlist-link">
|
||||
<p>Next Article:</p>
|
||||
<h3>
|
||||
{% if nextPost.data.title %}{{ nextPost.data.title }}{% else %}<code>{{ nextPost.url }}</code>{% endif %}
|
||||
</h3>
|
||||
</a>
|
||||
<time class="postlist-date" datetime="{{ nextPost.date | htmlDateString }}">{{ nextPost.date | readableDate("LLLL yyyy") }}</time>
|
||||
{% if nextPost.data.synopsis %}
|
||||
<p>{{ nextPost.data.synopsis | truncate(105) | safe }}</p>
|
||||
{% else %}
|
||||
<p>{{ nextPost.content | truncate(105) | safe }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
@@ -1,12 +1,14 @@
|
||||
{% set numPages = pagination.pages | length %}
|
||||
{% if pagination.pageNumber > 0 %}
|
||||
<a href="/{{ paginationRootDir }}/{% if pagination.pageNumber > 1%}page-{{ pagination.pageNumber }}/{% endif %}">
|
||||
<span class=buttonContainer>
|
||||
{% if pagination.pageNumber > 0 %}
|
||||
<a href="/{{ paginationRootDir }}/{% if pagination.pageNumber > 1%}page-{{ pagination.pageNumber }}/{% endif %}">
|
||||
<button type="button">← Previous</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if pagination.pageNumber < numPages - 1 %}
|
||||
<a href="/{{ paginationRootDir }}/page-{{ pagination.pageNumber + 2 }}/">
|
||||
<button type="button">{% if pagination.pageNumber == 0%}More{% else %}Next{% endif %} →</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if pagination.pageNumber < numPages - 1 %}
|
||||
<a href="/{{ paginationRootDir }}/page-{{ pagination.pageNumber + 2 }}/">
|
||||
<button type="button">{% if pagination.pageNumber == 0%}Next{% else %}Next{% endif %} →</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
</span>
|
||||
|
||||
@@ -1,28 +1,26 @@
|
||||
<section class="postlist{% if postListTypeMicroblog %} microblogList{% endif %}">
|
||||
{% if postlistHeaderText %}<h2>{{ postlistHeaderText }}</h2>{% endif %}
|
||||
{% if postlistHeaderText %}<h2 class="postlist-header">{{ postlistHeaderText }}</h2>{% endif %}
|
||||
<div class="postlist-item-container">
|
||||
{% for post in postslist %}
|
||||
<article class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
||||
|
||||
{% if not postListTypeMicroblog %}
|
||||
<a href="{{ post.url }}" class="postlist-link">
|
||||
<div class="post-image-container">
|
||||
<img class="post-image" {% if post.data.imageURL %} src="{{ post.data.imageURL }}" alt="{{ post.data.imageAlt }}" {% else %} src="{{ metadata.defaultPostImageURL }}" alt="{{ metadata.defaultPostImageAlt }}"{% endif %}>
|
||||
</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<div class="post-copy">
|
||||
{% if not postListTypeMicroblog %}
|
||||
<a href="{{ post.url }}" class="postlist-link">
|
||||
{% endif %}
|
||||
<h3>
|
||||
{% if post.data.title %}{{ post.data.title | safe }}{% else %}?{% endif %}
|
||||
{% if post.data.title %}{{ post.data.title | markdownify | safe }}{% else %}?{% endif %}
|
||||
</h3>
|
||||
{% if not postListTypeMicroblog %}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if post.data.synopsis %}
|
||||
<p>{{ post.data.synopsis | markdownify | safe }}</p>
|
||||
{% endif %}
|
||||
{% if not post.data.synopsis and post.data.description %}
|
||||
<p>{{ post.data.description | markdownify | safe }}</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="post-metadata">
|
||||
<div class="post-metadata-copy">
|
||||
<p>
|
||||
@@ -32,30 +30,25 @@
|
||||
<a href="{{ post.data.author.url }}">
|
||||
{% endif %}
|
||||
{% if post.data.author.name %}
|
||||
By {{ post.data.author.name }}
|
||||
{{ post.data.author.name }}
|
||||
{% endif %}
|
||||
{% if post.data.author.url %}</a> •
|
||||
{% endif %}
|
||||
{% else %}<a href="{{ metadata.author.url }}">By {{ metadata.author.name }}</a> •
|
||||
{% else %}<a href="{{ metadata.author.url }}">{{ metadata.author.name }}</a> •
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<time datetime="{{ post.date | htmlDateString }}">{{ post.date | niceDate }}{% if post.data.time %}—{{ post.data.time }}{% endif %}</time>
|
||||
</p>
|
||||
<ul>
|
||||
{%- for tag in post.data.tags | filterTagList %}
|
||||
{%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
||||
<li>
|
||||
<a
|
||||
href="{{ tagUrl }}"
|
||||
class="post-tag">
|
||||
{{ tag }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if not postListTypeMicroblog %}
|
||||
<a href="{{ post.url }}" class="postlist-link">
|
||||
<div class="post-image-container">
|
||||
<img class="post-image" {% if post.data.imageURL %} src="{{ post.data.imageURL }}" alt="{{ post.data.imageAlt }}" {% else %} src="{{ metadata.defaultPostImageURL }}" alt="{{ metadata.defaultPostImageAlt }}"{% endif %}>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</article>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
|
||||
4
_includes/settings/controllers/birbController.njk
Normal file
4
_includes/settings/controllers/birbController.njk
Normal file
@@ -0,0 +1,4 @@
|
||||
<form class="siteSettingsToggle" id="birbController">
|
||||
<input type="checkbox" id="birbToggle" {% if metadata.weatherOnByDefault %}checked{% endif %} />
|
||||
<label for="birbToggle">Pet bird (Will refresh page when turned off)</label>
|
||||
</form>
|
||||
4
_includes/settings/controllers/weatherController.njk
Normal file
4
_includes/settings/controllers/weatherController.njk
Normal file
@@ -0,0 +1,4 @@
|
||||
<form class="siteSettingsToggle" id="weatherController">
|
||||
<input type="checkbox" id="weatherToggle" {% if metadata.weatherOnByDefault %}checked{% endif %} />
|
||||
<label for="weatherToggle">Weather</label>
|
||||
</form>
|
||||
4
_includes/settings/controllers/wooModeController.njk
Normal file
4
_includes/settings/controllers/wooModeController.njk
Normal file
@@ -0,0 +1,4 @@
|
||||
<form class="siteSettingsToggle" id="wooModeController">
|
||||
<input type="checkbox" id="wooToggle" {% if metadata.wooModeOnByDefault %}checked{% endif %} />
|
||||
<label for="wooToggle">Woo mode</label>
|
||||
</form>
|
||||
37
_includes/settings/settingsConfig.njk
Normal file
37
_includes/settings/settingsConfig.njk
Normal file
@@ -0,0 +1,37 @@
|
||||
<!-- Site Settings -->
|
||||
<script>
|
||||
const weatherSettings = {
|
||||
handleOnToggle: turnOnWeather,
|
||||
handleOnDefault: turnOnWeather,
|
||||
handleOffToggle: turnOffWeather,
|
||||
handleOffDefault: turnOffWeather,
|
||||
settingToggle: "weatherToggle",
|
||||
preferenceName: "weather",
|
||||
defaultSetting: {{ metadata.weatherOnByDefault }},
|
||||
forcedOn: false,
|
||||
};
|
||||
const wooModeSettings = {
|
||||
handleOnToggle: deployWoo,
|
||||
handleOnDefault: wooSensibleDefault,
|
||||
handleOffToggle: withdrawWoo,
|
||||
handleOffDefault: withdrawWoo,
|
||||
settingToggle: "wooToggle",
|
||||
preferenceName: "wooMode",
|
||||
defaultSetting: {% if forcedWoo %}true{% else %}false{% endif %},
|
||||
forcedOn: {% if forcedWoo %}true{% else %}false{% endif %},
|
||||
};
|
||||
const petBirbSettings = {
|
||||
handleOnToggle: showBirb,
|
||||
handleOnDefault: showBirb,
|
||||
handleOffToggle: hideBirb,
|
||||
handleOffDefault: noBirb,
|
||||
settingToggle: "birbToggle",
|
||||
preferenceName: "petBirb",
|
||||
defaultSetting: false,
|
||||
forcedOn: false,
|
||||
};
|
||||
settingHandler(weatherSettings);
|
||||
settingHandler(wooModeSettings);
|
||||
settingHandler(petBirbSettings);
|
||||
</script>
|
||||
<!-- /Site Settings -->
|
||||
9
_includes/settings/siteSettings.njk
Normal file
9
_includes/settings/siteSettings.njk
Normal file
@@ -0,0 +1,9 @@
|
||||
<div id="siteSettingsContainer">
|
||||
<dialog id="siteSettings">
|
||||
<h2>Site Settings</h2>
|
||||
{% include "settings/controllers/birbController.njk" %}
|
||||
{% include "settings/controllers/weatherController.njk" %}
|
||||
{% include "settings/controllers/wooModeController.njk" %}
|
||||
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
||||
</dialog>
|
||||
</div>
|
||||
@@ -1,16 +0,0 @@
|
||||
<style>
|
||||
#siteSettingsContainer {
|
||||
& button:not(#settingsDone) {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="siteSettingsContainer">
|
||||
<button onclick="siteSettings.showModal();">Site Settings</button>
|
||||
<dialog id="siteSettings">
|
||||
<h2>Site Settings</h2>
|
||||
{% include "weatherController.njk" %}
|
||||
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
||||
</dialog>
|
||||
</div>
|
||||
35
_includes/statusList.njk
Normal file
35
_includes/statusList.njk
Normal file
@@ -0,0 +1,35 @@
|
||||
<section class="postlist microblog-list">
|
||||
{% if postlistHeaderText %}<h2>{{ postlistHeaderText }}</h2>{% endif %}
|
||||
<div class="postlist-item-container">
|
||||
{% for status in postslist %}
|
||||
<article class="post microblog-post">
|
||||
<div class="microblog-status card">
|
||||
<span class="microblog-emoji">{{ status.data.emoji }}</span>
|
||||
|
||||
<div class="microblog-status-copy">
|
||||
<p>
|
||||
<span class="status-metadata">
|
||||
{% if metadata.author.url %}
|
||||
<a href="{{ metadata.author.url }}">
|
||||
{% endif %}
|
||||
|
||||
{% if metadata.author.name %}
|
||||
{{ metadata.author.name }}
|
||||
{% endif %}
|
||||
|
||||
{% if metadata.author.url %}
|
||||
</a>
|
||||
{% endif %}
|
||||
• {{ status.date | niceDate }}<br />
|
||||
</span>
|
||||
{% if status.data.comment %}
|
||||
{{ status.data.comment | markdownify | safe }}<br />
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,118 +1,7 @@
|
||||
<!-- weather -->
|
||||
<!-- Based on https://codepen.io/codeconvey/pen/xRzQay -->
|
||||
{# This include causes a symbol (text, emoji, et cetera; from metadata.weatherSymbol) to fall from the top of the viewport like snow. #}
|
||||
|
||||
<style>
|
||||
.fallingObject {
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
font-family: Arial;
|
||||
pointer-events: none;
|
||||
text-shadow: 0 0 1px #000;
|
||||
}
|
||||
@keyframes fallingObjects-fall {
|
||||
0% {
|
||||
top: -10%;
|
||||
}
|
||||
100% {
|
||||
top: 100%;
|
||||
}
|
||||
}
|
||||
@keyframes fallingObjects-shake {
|
||||
0% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
50% {
|
||||
transform: translateX(80px);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
}
|
||||
.fallingObject {
|
||||
position: fixed;
|
||||
top: -10%;
|
||||
z-index: 9999;
|
||||
user-select: none;
|
||||
cursor: default;
|
||||
animation-name: fallingObjects-fall, fallingObjects-shake;
|
||||
animation-duration: 10s, 3s;
|
||||
animation-timing-function: linear, ease-in-out;
|
||||
animation-iteration-count: infinite, infinite;
|
||||
animation-play-state: running, running;
|
||||
}
|
||||
.fallingObject:nth-of-type(0) {
|
||||
left: 1%;
|
||||
animation-delay: 0s, 0s;
|
||||
& > div {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(1) {
|
||||
left: 10%;
|
||||
animation-delay: 1s, 1s;
|
||||
& > div {
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(2) {
|
||||
left: 20%;
|
||||
animation-delay: 6s, 0.5s;
|
||||
& > div {
|
||||
transform: rotate(60deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(3) {
|
||||
left: 30%;
|
||||
animation-delay: 4s, 2s;
|
||||
& > div {
|
||||
transform: rotate(84deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(4) {
|
||||
left: 40%;
|
||||
animation-delay: 2s, 2s;
|
||||
& > div {
|
||||
transform: rotate(267deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(5) {
|
||||
left: 50%;
|
||||
animation-delay: 8s, 3s;
|
||||
& > div {
|
||||
transform: rotate(200deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(6) {
|
||||
left: 60%;
|
||||
animation-delay: 6s, 2s;
|
||||
& > div {
|
||||
transform: rotate(20deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(7) {
|
||||
left: 70%;
|
||||
animation-delay: 2.5s, 1s;
|
||||
& > div {
|
||||
transform: rotate(78deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(8) {
|
||||
left: 80%;
|
||||
animation-delay: 1s, 0s;
|
||||
& > div {
|
||||
transform: rotate(3120deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(9) {
|
||||
left: 90%;
|
||||
animation-delay: 3s, 1.5s;
|
||||
& > div {
|
||||
transform: rotate(123deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="fallingObjects" id="weather" aria-hidden="true">
|
||||
<div class="fallingObjects hidden" id="weather" aria-hidden="true">
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
@@ -145,29 +34,15 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const weather = document.getElementById("weather");
|
||||
const weatherToggle = document.getElementById("weatherToggle");
|
||||
const weatherPreference = localStorage.getItem("weather");
|
||||
|
||||
// Initial weather preference check on page load
|
||||
if (weatherPreference == 0) {
|
||||
weather.classList.add("hidden");
|
||||
weatherToggle.checked = false;
|
||||
} else {
|
||||
<script>
|
||||
const turnOnWeather = (containerId) => {
|
||||
const container = document.getElementById(containerId);
|
||||
weather.classList.remove("hidden");
|
||||
weatherToggle.checked = true;
|
||||
};
|
||||
}
|
||||
|
||||
// Handle weather setting toggle
|
||||
weatherToggle.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
localStorage.setItem("weather", 1);
|
||||
weather.classList.remove("hidden");
|
||||
} else {
|
||||
localStorage.setItem("weather", 0);
|
||||
const turnOffWeather = (containerId) => {
|
||||
const container = document.getElementById(containerId);
|
||||
weather.classList.add("hidden");
|
||||
};
|
||||
});
|
||||
</script>
|
||||
}
|
||||
</script>
|
||||
<!-- /weather -->
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
<style>
|
||||
#weatherController {
|
||||
color: var(--text-color);
|
||||
font-size: var(--step--2);
|
||||
font-variation-settings: var(--font-variation-ui);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: var(--ui-letter-spacing);
|
||||
font-family: var(--font-family-ui);
|
||||
& label {
|
||||
display: inline;
|
||||
}
|
||||
& input {
|
||||
accent-color: var(--contrast-color);
|
||||
background-color: var(--background-color);
|
||||
border: var(--border-details);
|
||||
border-color: var(--contrast-color);
|
||||
border-radius: var(--border-radius);
|
||||
color: var(--text-color);
|
||||
&:focus {
|
||||
box-shadow: 0 0 0 2px var(--contrast-color);
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<form id="weatherController">
|
||||
<input type="checkbox" id="weatherToggle" checked />
|
||||
<label for="weatherToggle">Show weather?</label>
|
||||
</form>
|
||||
201
_includes/wooMode.njk
Normal file
201
_includes/wooMode.njk
Normal file
@@ -0,0 +1,201 @@
|
||||
<!-- Woo Mode -->
|
||||
<!-- Based on https://codepen.io/tommyho/pen/JjgoZLK -->
|
||||
{# This include replaces the page background with a crazy rainbow animated shader #}
|
||||
|
||||
<canvas class="hidden" id="shaderCanvas"></canvas>
|
||||
<script src="/js/three.min.js"></script>
|
||||
<script>
|
||||
let scene, camera, renderer, uniforms, material, mesh;
|
||||
|
||||
function initWoo() {
|
||||
scene = new THREE.Scene();
|
||||
camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
|
||||
|
||||
renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('shaderCanvas'), antialias: true });
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
|
||||
const vertexShader = `
|
||||
varying vec2 vUv;
|
||||
void main() {
|
||||
vUv = uv;
|
||||
gl_Position = vec4(position, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const fragmentShader = `
|
||||
uniform float time;
|
||||
uniform vec2 resolution;
|
||||
varying vec2 vUv;
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
|
||||
vec2 rotate(vec2 v, float a) {
|
||||
float s = sin(a);
|
||||
float c = cos(a);
|
||||
mat2 m = mat2(c, -s, s, c);
|
||||
return m * v;
|
||||
}
|
||||
|
||||
float random(vec2 st) {
|
||||
return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);
|
||||
}
|
||||
|
||||
float noise(vec2 st) {
|
||||
vec2 i = floor(st);
|
||||
vec2 f = fract(st);
|
||||
|
||||
float a = random(i);
|
||||
float b = random(i + vec2(1.0, 0.0));
|
||||
float c = random(i + vec2(0.0, 1.0));
|
||||
float d = random(i + vec2(1.0, 1.0));
|
||||
|
||||
vec2 u = f * f * (3.0 - 2.0 * f);
|
||||
|
||||
return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
|
||||
}
|
||||
|
||||
float fbm(vec2 st) {
|
||||
float value = 0.0;
|
||||
float amplitude = 0.5;
|
||||
float frequency = 0.0;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
value += amplitude * noise(st);
|
||||
st *= 2.0;
|
||||
amplitude *= 0.5;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
vec3 palette(float t, vec3 a, vec3 b, vec3 c, vec3 d) {
|
||||
return a + b * cos(6.28318 * (c * t + d));
|
||||
}
|
||||
|
||||
vec3 vibrancePalette(float t) {
|
||||
vec3 a = vec3(0.5, 0.5, 0.5);
|
||||
vec3 b = vec3(0.5, 0.5, 0.5);
|
||||
vec3 c = vec3(1.0, 1.0, 1.0);
|
||||
vec3 d = vec3(0.0, 0.33, 0.67);
|
||||
return palette(t, a, b, c, d);
|
||||
}
|
||||
|
||||
vec3 warmPalette(float t) {
|
||||
vec3 a = vec3(0.5, 0.5, 0.5);
|
||||
vec3 b = vec3(0.5, 0.5, 0.5);
|
||||
vec3 c = vec3(1.0, 1.0, 1.0);
|
||||
vec3 d = vec3(0.0, 0.10, 0.20);
|
||||
return palette(t, a, b, c, d);
|
||||
}
|
||||
|
||||
vec3 coolPalette(float t) {
|
||||
vec3 a = vec3(0.5, 0.5, 0.5);
|
||||
vec3 b = vec3(0.5, 0.5, 0.5);
|
||||
vec3 c = vec3(1.0, 1.0, 1.0);
|
||||
vec3 d = vec3(0.3, 0.20, 0.20);
|
||||
return palette(t, a, b, c, d);
|
||||
}
|
||||
|
||||
vec3 rainbowPalette(float t) {
|
||||
vec3 a = vec3(0.5, 0.5, 0.5);
|
||||
vec3 b = vec3(0.5, 0.5, 0.5);
|
||||
vec3 c = vec3(1.0, 1.0, 1.0);
|
||||
vec3 d = vec3(0.0, 0.33, 0.67);
|
||||
return palette(t, a, b, c, d);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 st = gl_FragCoord.xy / resolution.xy;
|
||||
st.x *= resolution.x / resolution.y;
|
||||
|
||||
vec2 q = vec2(0.);
|
||||
q.x = fbm(st + 0.1 * time);
|
||||
q.y = fbm(st + vec2(1.0));
|
||||
|
||||
vec2 r = vec2(0.);
|
||||
r.x = fbm(st + 1.0 * q + vec2(1.7, 9.2) + 0.15 * time);
|
||||
r.y = fbm(st + 1.0 * q + vec2(8.3, 2.8) + 0.126 * time);
|
||||
|
||||
float f = fbm(st + r);
|
||||
|
||||
vec2 p = st * 2.0 - 1.0;
|
||||
float a = atan(p.y, p.x);
|
||||
float r2 = length(p);
|
||||
|
||||
vec2 uv = vec2(a / PI, r2);
|
||||
uv = rotate(uv, time * 0.1);
|
||||
|
||||
vec3 color1 = vibrancePalette(f + time * 0.1);
|
||||
vec3 color2 = warmPalette(length(q));
|
||||
vec3 color3 = coolPalette(length(r.x));
|
||||
vec3 color4 = rainbowPalette(f * 2.0 + time * 0.2);
|
||||
|
||||
vec3 color = mix(color1, color2, 0.5);
|
||||
color = mix(color, color3, 0.3);
|
||||
color = mix(color, color4, sin(time * 0.1) * 0.5 + 0.5);
|
||||
|
||||
color += 0.05 * vec3(1.0) * smoothstep(0.1, 0.2, fbm(10.0 * uv + time * 0.5));
|
||||
|
||||
// Add some extra vibrancy
|
||||
color = pow(color, vec3(0.8));
|
||||
color *= 1.1;
|
||||
|
||||
gl_FragColor = vec4(color, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
uniforms = {
|
||||
time: { value: 1.0 },
|
||||
resolution: { value: new THREE.Vector2() }
|
||||
};
|
||||
|
||||
material = new THREE.ShaderMaterial({
|
||||
uniforms: uniforms,
|
||||
vertexShader: vertexShader,
|
||||
fragmentShader: fragmentShader
|
||||
});
|
||||
|
||||
mesh = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), material);
|
||||
scene.add(mesh);
|
||||
|
||||
onWindowResize();
|
||||
window.addEventListener('resize', onWindowResize, false);
|
||||
}
|
||||
|
||||
function onWindowResize() {
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
uniforms.resolution.value.x = renderer.domElement.width;
|
||||
uniforms.resolution.value.y = renderer.domElement.height;
|
||||
}
|
||||
|
||||
function animate(timestamp) {
|
||||
requestAnimationFrame(animate);
|
||||
uniforms.time.value = timestamp * 0.001;
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
const wooCanvas = document.getElementById("shaderCanvas");
|
||||
|
||||
// Function for when wooMode is toggled on
|
||||
const deployWoo = () => {
|
||||
let wooAudio = new Audio("/audio/30995__unclesigmund__woo-2.mp3");
|
||||
wooAudio.volume = 0.4;
|
||||
wooAudio.play();
|
||||
|
||||
wooCanvas.classList.remove("hidden");
|
||||
initWoo();
|
||||
animate(0);
|
||||
}
|
||||
|
||||
// Function for when wooMode is enabled by default
|
||||
const wooSensibleDefault = () => {
|
||||
wooCanvas.classList.remove("hidden");
|
||||
initWoo();
|
||||
animate(0);
|
||||
}
|
||||
|
||||
// Function for when wooMode is toggled off
|
||||
const withdrawWoo = () => {
|
||||
wooCanvas.classList.add("hidden");
|
||||
}
|
||||
|
||||
</script>
|
||||
<!-- /Woo Mode -->
|
||||
@@ -1,10 +1,11 @@
|
||||
---
|
||||
layout: layouts/post.njk
|
||||
title: How to Use Feeds
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | How to Use Feeds
|
||||
structuredData: none
|
||||
hideMetadata: yep
|
||||
---
|
||||
<p><!-- a <p> just to stop the dropcap from happening --></p>
|
||||
<article data-pagefind-body>
|
||||
|
||||
<h1>How to Use Feeds</h1>
|
||||
|
||||
Get all the latest content from your favorite creators with no algorithm, no spam, and no spying. This page is based on [Matt Webb](https://interconnected.org)'s *[About Feeds](https://aboutfeeds.com/)*.
|
||||
|
||||
@@ -36,14 +37,12 @@ There are many different newsreader apps to choose from. Below are a few you cou
|
||||
|
||||
* [Raven (GNU/Linux, Windows, macOS)](https://ravenreader.app/)
|
||||
|
||||
* [NetNewsWire (macOS, iOS)](https://ravenreader.app/)
|
||||
* [NetNewsWire (macOS, iOS)](https://netnewswire.com/)
|
||||
|
||||
* [FreshRSS (Online)](https://www.freshrss.org/)
|
||||
|
||||
* [Akregator (GNU/Linux)](https://apps.kde.org/akregator/)
|
||||
|
||||
* [RSSOwl (GNU/Linux, Windows, macOS)](https://www.rssowl.org/)
|
||||
|
||||
* [RSS Guard (GNU/Linux, Windows, macOS, BSD, OS/2)](https://github.com/martinrotter/rssguard)
|
||||
|
||||
|
||||
@@ -68,3 +67,5 @@ It doesn't matter which you choose; newsreaders usually make it fairly easy to e
|
||||
|
||||
|
||||
[^1]: Please note that I haven't tested all of these options personally; your mileage may vary.
|
||||
|
||||
</article>
|
||||
|
||||
@@ -4,9 +4,10 @@ title: Nathan Upchurch | Colophon
|
||||
structuredData: none
|
||||
---
|
||||
|
||||
# Colophon
|
||||
<h1>Colophon</h1>
|
||||
|
||||
## What I used to build this website
|
||||
I built this website in plain-old HTML, CSS, and a touch of vanilla JavaScript using [Zach Leatherman](https://www.zachleat.com/)'s [11ty static site generator](https://www.11ty.dev/) and Mozilla's [Nunjucks templating language](https://mozilla.github.io/nunjucks/). I used free and open source variable typefaces [Fraunces](https://fraunces.undercase.xyz/), designed by Phaedra Charles and Flavia Zimbardi[^1], and [Manrope](https://www.gent.media/manrope), designed by Mikhail Sharanda[^2].
|
||||
I built this website in plain-old HTML, CSS, and a touch of vanilla JavaScript using [Zach Leatherman](https://www.zachleat.com/)'s [11ty static site generator](https://www.11ty.dev/) (now called, *sigh*, Build Awesome) and Mozilla's [Nunjucks templating language](https://mozilla.github.io/nunjucks/). I used free and open source variable typefaces [Fraunces](https://fraunces.undercase.xyz/), designed by Phaedra Charles and Flavia Zimbardi[^1], and [Manrope](https://www.gent.media/manrope), designed by Mikhail Sharanda[^2]. [Search](/search) powered by [Pagefind](https://pagefind.app/). [Guestbook](/guestbook) powered by [Guestbooks](https://guestbooks.meadow.cafe/).
|
||||
|
||||
The handy calculators on [utopia.fyi](https://utopia.fyi), created by James Gilyead and Trys Mudford, helped me implement fluid typography and spacing, which has allowed me to make this website responsive without using a single media query. The future is upon us.
|
||||
|
||||
@@ -16,3 +17,11 @@ If you'd like to inspect the source for this site, you can [find the repo here](
|
||||
|
||||
[^1]: With contributions by Ethan Cohen, and Andy Clymer.
|
||||
[^2]: With contributions by Mirko Velimirovic.
|
||||
|
||||
## Lighthouse / speedlify score
|
||||
<script src="/js/speedlify-score.js"></script>
|
||||
<speedlify-score speedlify-url="https://www.11ty.dev/speedlify" hash="45f6110a" score weight rank rank-change></speedlify-score>
|
||||
<a href="https://www.11ty.dev/speedlify/nathanupchurch-com/">
|
||||
See more info on speedlify.
|
||||
</a>
|
||||
|
||||
|
||||
@@ -5,21 +5,22 @@ eleventyNavigation:
|
||||
key: About
|
||||
order: 2
|
||||
---
|
||||
<article>
|
||||
<article data-pagefind-body>
|
||||
<h1>About me and my website.</h1>
|
||||
<p class="page-block nodropcap">I’m a prolific vegan home cook, classical trombonist, incense maker, a <abbr title="Free/Libre Open Source Software">FLOSS</abbr> enthusiast, designer, programmer, music producer, print lover, and human with too many interests and too little time.<br><br>
|
||||
This is my little corner of the internet where I talk about whatever I like without worrying about maintaining a ‘personal brand’, or constraining my writing to topics which might help advance my career or establish me as a ‘thought leader’. I’m here to express myself and have fun writing about topics I enjoy.<br><br>
|
||||
If you’d like to learn more about my professional accomplishments and work, I’ll link my professional website here when I get around to it.</p>
|
||||
<a href="./colophon/">
|
||||
<button type="button">Colophon »</button>
|
||||
</a>
|
||||
<span class="buttonContainer">
|
||||
<a href="./colophon/">
|
||||
<button type="button">Colophon</button>
|
||||
</a>
|
||||
|
||||
<a href="../me/">
|
||||
<button type="button">Contact »</button>
|
||||
</a>
|
||||
|
||||
<a href="./privacy/">
|
||||
<button type="button">Privacy »</button>
|
||||
</a>
|
||||
<a href="../me/">
|
||||
<button type="button">Contact</button>
|
||||
</a>
|
||||
|
||||
<a href="./privacy/">
|
||||
<button type="button">Privacy</button>
|
||||
</a>
|
||||
</span>
|
||||
</article>
|
||||
|
||||
@@ -4,7 +4,7 @@ title: Nathan Upchurch | Privacy
|
||||
structuredData: none
|
||||
---
|
||||
|
||||
# Privacy Statement
|
||||
<h1>Privacy Statement</h1>
|
||||
|
||||
## Data collection and use
|
||||
I don’t collect any of your personal information, full-stop. All webfonts, icons, and images are hosted locally (these things can sometimes be used to [track people across the internet](https://www.firstpost.com/world/how-google-uses-fonts-to-track-what-users-do-online-and-sell-data-to-advertisers-12496552.html) otherwise). I use [umami](https://umami.is), a free and open source, privacy-respecting analytics tool, to see how many people visit this website. As of 2025-12-16 I also use [Goat Counter](https://goatcounter.com) (also FLOSS and privacy-respecting) as a backup to umami, as my self-hosted umami instance shat the bed the other day and I lost a bunch of data.
|
||||
I don’t collect any of your personal information, full-stop. All webfonts, icons, and images are hosted locally (these things can sometimes be used to [track people across the internet](https://www.firstpost.com/world/how-google-uses-fonts-to-track-what-users-do-online-and-sell-data-to-advertisers-12496552.html) otherwise). I use [umami](https://umami.is), a free and open source, privacy-respecting analytics tool, to see how many people visit this website. As of 2025-12-16 I also use [Goat Counter](https://goatcounter.com) and [Mochi](https://mochi.meadow.cafe/) (also FLOSS and privacy-respecting) as backups to umami, as my self-hosted umami instance shat the bed the other day and I lost a bunch of data.
|
||||
|
||||
@@ -4,10 +4,15 @@ title: Nathan Upchurch | AI
|
||||
structuredData: none
|
||||
---
|
||||
|
||||
# AI
|
||||
<article data-pagefind-body>
|
||||
|
||||
<h1>AI</h1>
|
||||
|
||||
Certified generative AI hater here. This website and all content herein is 100% guaranteed AI slop free: code, prose images, music, et cetera.
|
||||
|
||||
[](/img/the-office-no.gif)
|
||||
|
||||
## AI Permissions
|
||||
I do my utmost to ensure that my work is not hoovered wholesale and regurgitated by AI products by including an [ai.txt file](/ai.txt) and disallowing known crawlers in my [robots.txt file](/robots.txt), but just in case it will ever become meaningful in any legal sense, I'd like to make it clear here that I do not grant permission for any content on this website to be used as training data for any AI project, or for any portion of this website to be scraped by bots associated with AI projects.
|
||||
|
||||
</article>
|
||||
|
||||
@@ -3,5 +3,8 @@ layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Blank
|
||||
structuredData: none
|
||||
---
|
||||
<article data-pagefind-body>
|
||||
|
||||
This page was intentionally left blank.
|
||||
|
||||
</article>
|
||||
|
||||
411
content/blog/100-webmaster-questions.md
Normal file
411
content/blog/100-webmaster-questions.md
Normal file
@@ -0,0 +1,411 @@
|
||||
---
|
||||
title: 100 Webmaster Questions
|
||||
description: Answering a lot of questions.
|
||||
date: 2026-02-05T00:00:00.000Z
|
||||
tags:
|
||||
- Questionnaire
|
||||
- Web Development
|
||||
synopsis: Answering a lot of questions.
|
||||
mastodon_id: '116021932929019975'
|
||||
---
|
||||
I found this questionnaire on the website of my [Geekring](https://geekring.net/) neighbor [Corvidae](https://corvidae.digital/100). [Original questions sheet on mousling.net](https://mouseling.net/100webmaster.txt).
|
||||
|
||||
## Please introduce yourself.
|
||||
|
||||
I'm Nathan. I live in Chicago, U.S.A., and have far too many interests. I play classical trombone for fun, make incense sticks, write things, cook vegan food, and more.
|
||||
|
||||
## How long have you been making websites?
|
||||
|
||||
Beside tinkering with HTML and CSS to customize my MySpace profile, I first started back in, oh, 2004 or 2005.
|
||||
|
||||
## And what got you into the hobby?
|
||||
|
||||
I just became so exhausted with both mainstream social media and the idea of a “personal brand” that I decided I needed a space on the internet where I could just sort of exist as a human honestly, and on my own terms.
|
||||
|
||||
## What kind of website are you most interested in?
|
||||
|
||||
Personal sites, featuring real people earnestly documenting their existence creatively. I'd like everyone to have one.
|
||||
|
||||
## What's your workflow? do you plan your websites out thoroughly or do you come up with the design as you go along?
|
||||
|
||||
If I'm making a site for a client, the whole thing is absolutely planned out first in order to nail down the scope. Then the design has to be done, from concepts to revisions and final approval, before any code can be written. If I'm making something for myself, I often just start with code and see where it goes.
|
||||
|
||||
## Please link to your biggest inspirations.
|
||||
|
||||
This might sound a bit conceited, but I don't know that I have any. I find that a lot of competition-winning design work is actually just ghastly to use and totally ignores accessibility, so I kind of have beef with many of my contemporaries. Really, the goal for my website was to try to make an excellent reading experience. It's not the most cutting-edge design, or the most interesting, but I think I've at least done that.
|
||||
|
||||
## What's your favourite part about making websites?
|
||||
|
||||
I love getting to that stage where you have systems in place and updates become really simple. I get a lot of satisfaction in refactoring, and trying to make things modular and reusable.
|
||||
|
||||
## And the thing you struggle with the most?
|
||||
|
||||
Getting over the blank page. Starting from nothing is always stressful.
|
||||
|
||||
## Do you keep the same layout on all of your pages? or do you use different ones?
|
||||
|
||||
Pretty much, yea. I use fluid spacing and type-sizing so the whole site is responsive and usable at any screen size without a single media query. I don't have much interest in tackling all of those problems again for a different layout haha.
|
||||
|
||||
## How confident are you with css?
|
||||
|
||||
I think I'm pretty solid. CSS is becoming more and more capable and easy to use. Christ, we have variables (custom properties) and nested selectors these days. It's not often I find myself banging my head against the wall anymore at any rate. Now if only I could keep my CSS a little more tidy…
|
||||
|
||||
## Do you know how to correctly use `<dl>`?
|
||||
|
||||
I've never needed it, but I'm glad to have learned about it here.
|
||||
|
||||
## What is your favorite html element?
|
||||
|
||||
The dialog element is really neat. It does so much for you too.
|
||||
|
||||
## If you're making a new web page from scratch, what is the first thing you do?
|
||||
|
||||
I like to use [Eleventy](https://www.11ty.dev/), so I'm not likely to be starting from scratch. If I had to though, I'd probably go remind myself what HTML boilerplate I'm supposed to be using these days.
|
||||
|
||||
## Do you know javascript?
|
||||
|
||||
Yes. I use it for desktop automation too, with Node.
|
||||
|
||||
## How about php?
|
||||
|
||||
I fear PHP.
|
||||
|
||||
## Does your website have a theme that you stick to?
|
||||
|
||||
For sure.
|
||||
|
||||
## Are you more focused on content or design?
|
||||
|
||||
Content. The reading experience is pretty good, so while I sometimes feel that my site is a little dull compared to some other personal sites, I'm happy with that.
|
||||
|
||||
## Do you own a domain name? if not, would you ever want to?
|
||||
|
||||
Absolutely. A few, actually.
|
||||
|
||||
## What do you think of nostalgia-focused or "retro" websites?
|
||||
|
||||
I think they're fun and I like to see them.
|
||||
|
||||
## Is your html valid? do you even check?
|
||||
|
||||
Lord, I haven't thought about that in a minute. I may have to fix a few things…
|
||||
|
||||
## What are your opinion on buttons and banners?
|
||||
|
||||
They're fun. I'd like to make a dedicated page for them at some point.
|
||||
|
||||
## What do you think of button walls in particular?
|
||||
|
||||
I think they're fun.
|
||||
|
||||
## If you started over again, would you make something similar or completely different?
|
||||
|
||||
I think it would be pretty similar, to be honest.
|
||||
|
||||
## Are you envious of other people's websites?
|
||||
|
||||
All the time! I love the cool stuff people build onto their sites: music players, et cetera. I just have to remind myself that my site has different goals.
|
||||
|
||||
## What text editor do you use?
|
||||
|
||||
I use the woefully underrated [Kate](https://kate-editor.org/). For quick edits I use [KWrite](https://apps.kde.org/kwrite/). In the terminal, I use Nano.
|
||||
|
||||
## Why do you use that one?
|
||||
|
||||
Kate is a lightweight native application with no electron bloat, and it has so may features. KWrite is also native, but it's really pared down, which is what you want sometimes. And as for Nano, well I just don't want to have to memorize esoteric commands to edit text.
|
||||
|
||||
## Do you host your image files on your web server, or on another host?
|
||||
|
||||
All images and typefaces are served locally. I'm careful to optimize images, and I don't want my visitors to be tracked by Google via Google Fonts. I do use a PeerTube instance for video.
|
||||
|
||||
## This might not be relevant to you, but what's your opinion on the neocities vs. nekoweb debate?
|
||||
|
||||
No idea. I host my own stuff.
|
||||
|
||||
## How much server space would you estimate your main website takes up?
|
||||
|
||||
At the time of writing, it's 90.2 MiB, with 564 files and 247 directories. Nuts!
|
||||
|
||||
## Do you keep local backups of your files?
|
||||
|
||||
I develop my site locally, so there's that. I also have a copy on my Gitea instance.
|
||||
|
||||
## Do you prefer simple or highly visual websites?
|
||||
|
||||
It really depends on the goals of the site! If it's designed to be a visually engaging website that encourages exploration, it makes sense to have some visual complexity going on. On the other hand, if I'm there to read an article, I don't want that to be hindered by the design.
|
||||
|
||||
## Do you stick to certain colours? do you do that on purpose, or is it your subconscious?
|
||||
|
||||
It varies from project to project.
|
||||
|
||||
## Have you ever thought about quitting? why?
|
||||
|
||||
No, at least where it concerns my personal projects. Client work isn't as fun, so I think I'm going to be pretty choosy about what I work on for the foreseeable future (outside of my day-job) because I really have come to value my free time very highly.
|
||||
|
||||
## Do you have many webmaster friends, or is it a solitary hobby?
|
||||
|
||||
Not many, but one or two.
|
||||
|
||||
## Do people in your real life know about your website?
|
||||
|
||||
Yes. It's got my name on it haha.
|
||||
|
||||
## Do you update your website very often? how often is "very often"?
|
||||
|
||||
I do; I have "status" and "now burning" sections on my site for micro-blogging and listing what incense sticks I'm burning. I wrote [a wee utility](https://nathanupchurch.com/blog/Solving-SSG-Microblogging-Ergonomics-with-KDialog-for-Incense-Posting/) to make it quick and easy to post these during the work-day, so updates usually happen from at least every other day to multiple times a day.
|
||||
|
||||
## And the overall design, do you change that much? why or why not?
|
||||
|
||||
No. I feel that I've met my design goals for my site, and getting the fluid type / spacing system and variable typefaces right took so. much. time. I have zero interest in doing all of that work again.
|
||||
|
||||
## Is your website more you-focused, hobby-focused, or outside world-focused?
|
||||
|
||||
It's a little of everything. I really want my website to represent me as a whole human, so I try to make sure that there's a good mix of creativity, life stuff, writing on hobbies and interests, et cetera.
|
||||
|
||||
## Do you do web design professionally?
|
||||
|
||||
Yes. I have a design firm that I operate with my business partner [Davey](https://daveydynamite.neocities.org/), although we don't do a lot with it at the minute. I also sometimes do web projects as a part of my role at my day job.
|
||||
|
||||
## If not, would you like to? and if you're comfortable answering, what do you do for work?
|
||||
|
||||
My title doesn't elucidate much, but my day job is a director-level role at a Chicago non-profit. It's a small organization, so we all have a hand in operations, but I also do design work, process work, and a little automation. I do everything from design collateral for events, to leading digital infrastructure integration projects, and building processes and tools for our team. I know a lot of people would complain about doing so many things, but I really value variety and enjoy project work so it fits me pretty well.
|
||||
|
||||
## Do you communicate with people by email very much?
|
||||
|
||||
Yea, I often email with other incense-heads and I get occasional emails from people who read my blog. I enjoy it when people get in touch with questions and comments.
|
||||
|
||||
## Some people reject social media and use websites as a replacement. do you keep social media outside of your website?
|
||||
|
||||
I try to avoid mainstream social media, but I am [all over the fediverse](https://nathan.contact).
|
||||
|
||||
## How about instant messengers? do you use a mainstream one like discord or telegram? or something like matrix? do you avoid them?
|
||||
|
||||
With great resentment I still have a Discord account that I rarely use. I use [Matrix and Signal](https://nathan.contact) often, and I also have an [XMPP](https://nathan.contact) account through the FSF that I have never once used haha. I stay signed in though, so if you have XMPP and want to get in touch, it would be a novelty to use it for once.
|
||||
|
||||
## Do you listen to music while you work on websites? if so, what kinds of artists?
|
||||
|
||||
Often! It depends on my mood, and my taste in music is hugely varied and slightly insane. It could be anything from Hindustani classical to deathcore, drum and bass, Russian ecclesiastical music, classical trombone concertos, black metal, or trip-hop. To throw some artists at the wall: Christian Lindberg, Ladytron, Mora Prokaza, Enei, Pandit Jasraj, Marie Keyrouz.
|
||||
|
||||
## Do you keep everything you make on one website, or do you have more than one?
|
||||
|
||||
Just the one right now. I eventually plan to make a "professional" website for all the corpo-speak that employers like to see when hiring.
|
||||
|
||||
## On a similar note, do you keep to one topic on your site, or many?
|
||||
|
||||
I write about many things, but I do try to keep incense at the fore, because it's something that very few people write about—especially when it comes to making incense. It's so hard to find information on incense-making and I want to do my part to keep the tradition alive.
|
||||
|
||||
## Do you present your real self, or at least try? or do you construct a persona on purpose?
|
||||
|
||||
Yes, with some caveats. I swear much more in the flesh. My philosophy is that I treat speech on my website as though I'm at a casual gathering with mixed company.
|
||||
|
||||
## Have you ever made a good friend thanks to your website?
|
||||
|
||||
Not really. Outside of the incense scene, I don't really make many online friends.
|
||||
|
||||
## Are you happy with the way html and css currently work?
|
||||
|
||||
Mostly. I do wish I could get a bit more programmatic with CSS. They're working on it, though.
|
||||
|
||||
## What are practices that you think people should avoid?
|
||||
|
||||
Ignoring accessibility: alt text, contrast ratios, et cetera. It's so much easier now with semantic HTML, too, and the WCAG is published online for anyone to read.
|
||||
|
||||
## What about under-utilised practices, or things you think people should do more?
|
||||
|
||||
Beside accessibility, using containers to encapsulate elements so that they can be more easily positioned with CSS grids and flexbox. Also using the proper elements. For example my comment form, which I *did not* write, has a bunch of `<p>` tags as containers and doesn't separate the buttons from the input fields in separate containers, making styling a nightmare.
|
||||
|
||||
## Do you use a lot of semantic html? or are you guilty of generic structure?
|
||||
|
||||
Absolutely. Why wouldn't you?
|
||||
|
||||
## Do you consider different browsers?
|
||||
|
||||
For pro work, you have to. I once had a subcontractor complaining that a site I built wasn't working only to find out that she was using a browser that hadn't been updated in seven years. (We found out that this was Apple's fault. After a point, they stop letting you upgrade your OS, and that means Safari too. What a nightmare.) You've got to decide where the cutoff is in order to know what features you can use. For personal stuff, I just target the most current version of Firefox. Usually, it's Chrome playing fast and loose with web standards, so if you target Chrome it seems like there's no guarantee that your site will work in Firefox, whereas the opposite usually isn't true.
|
||||
|
||||
## Speaking of, what's your preferred browser? convince your readers why they should use it.
|
||||
|
||||
Anything not using the Chromium engine, so basically Firefox and derivatives. Google uses their superior Chrome user numbers to justify making features outside of open web standards. This causes sites to break on non-Chromium browsers. This behavior is part of an ongoing pattern of [EEE](https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish) on Google's part, and if it is allowed to continue, it risks making the web worse for everyone. I would encourage people to avoid Chrome, and any browser that uses its engine. If we don't, Google will use the leverage to kill competition and screw us all over like it has done time and time again (XMPP and RSS are some examples).
|
||||
|
||||
## And what os are you on?
|
||||
|
||||
EndeavourOS, an Arch GNU/Linux derivative.
|
||||
|
||||
## Do you have a strong opinion on that, or do you just happen to use it?
|
||||
|
||||
Well, I strongly feel that GNU/Linux is better than proprietary options. EndeavourOS just fits my needs really well with its up-to-date packages, frequent updates, and flexibility.
|
||||
|
||||
## Are your websites mobile-friendly?
|
||||
|
||||
Of course!
|
||||
|
||||
## What are your thoughts on autoplay?
|
||||
|
||||
It's for the best that it's blocked by default, but I still wish I could get away with using it on one or two special pages.
|
||||
|
||||
## What are your thoughts on webrings? are you in any?
|
||||
|
||||
Big fan. I'm in two at the moment: [Fediring](https://fediring.net/), and [Geekring](https://geekring.net/).
|
||||
|
||||
## Do you have any web shrines? what do you like to see in that sort of page?
|
||||
|
||||
No, nothing like that. I like discovering them though.
|
||||
|
||||
## Are your websites "cliche," in your opinion?
|
||||
|
||||
I hope not!
|
||||
|
||||
## What is your ideal website? are you striving for that, or for something else?
|
||||
|
||||
Real, fun, and ever-changing.
|
||||
|
||||
## Are you an artist? do you draw or design your own assets?
|
||||
|
||||
While I do graphic design, I'm not really an illustrator or anything like that—beyond the odd project for fun. So designer yes, artist no.
|
||||
|
||||
## What are your favourite resource sites?
|
||||
|
||||
I have an absolute ton of them on my [/links](https://nathanupchurch.com/links/) page.
|
||||
|
||||
## Is there a habit you just can't get away from no matter how hard you try?
|
||||
|
||||
Sloppy CSS. The cascade is tricky, but I think I'm improving.
|
||||
|
||||
## What's your biggest advice for a new webmaster?
|
||||
|
||||
Take your time, and learn git and *make a new branch* for any significant and complicated work so that it's easy to revert it if you make a mistake or get stuck.
|
||||
|
||||
## Do you keep all your styling in css? or do you hard-code some?
|
||||
|
||||
I use inline styles only as a last resort, usually for styling widgets that I have little control over such as the comment form.
|
||||
|
||||
## What do you think of frameset layouts?
|
||||
|
||||
It's not the 90s any more.
|
||||
|
||||
## How about table-based layouts?
|
||||
|
||||
Again, we're in 2026. There is no excuse for this haha.
|
||||
|
||||
## Do you subscribe to the ideas of "one-column", "two-column" and "three-column" layouts? do you use any of these?
|
||||
|
||||
I mean, when you look at eye-tracking studies, you see that the way people engage with websites is always changing. I think that, so long as you're applying gestalt principles in your design, you're probably doing an okay job no matter the layout.
|
||||
|
||||
## Do you spend longer on the html or the css?
|
||||
|
||||
The CSS, without question.
|
||||
|
||||
## Have you ever made a page with no css? it's useful for your thoughts.
|
||||
|
||||
No, never!
|
||||
|
||||
## Do you ever find yourself making layouts with nothing to put on them? or do you only make layouts when the need arises?
|
||||
|
||||
Only when necessary.
|
||||
|
||||
## Would you consider yourself a beginner? or advanced? somewhere in the middle?
|
||||
|
||||
I wouldn't go so far as to say advanced, but I think I know what I'm doing.
|
||||
|
||||
## Do you have a habit of looking at the source code of websites you visit?
|
||||
|
||||
Not often, as many sites have crazy obfuscated code these days. It's not often that you find well formatted, human-readable source anymore. More often I find myself reading documentation or Stack Overflow.
|
||||
|
||||
## How did you learn how to make websites?
|
||||
|
||||
I began in what was either a digital graphics or multimedia class in school where we learned to make websites using Adobe Dreamweaver. In adulthood I wound up tripping and falling into a career that eventually led to me making a number of websites professionally. I started with Adobe Muse, actually winning Adobe's Muse Site of the Day at one point. Once Adobe canned Muse, I realized I was going to have to get serious about learning HTML, CSS, and JavaScript, so I did.
|
||||
|
||||
## Do you ever force elements to do things they're not supposed to?
|
||||
|
||||
I do my best to avoid hacks.
|
||||
|
||||
## Thoughts on floating elements?
|
||||
|
||||
Again I say: it's not the 90s anymore.
|
||||
|
||||
## When you're sizing stuff, what do you use first? do you use px, em, %, or something else?
|
||||
|
||||
I'm using my responsive spacing system, so it's something like `var(--space-l)`, which will resolve to something like `clamp(2.5rem, 2.2183rem + 1.4085vw, 3rem)`. It makes things very easy and keeps everything nice and consistent.
|
||||
|
||||
## Do you have a favourite font?
|
||||
|
||||
I wouldn't know how to begin to choose!
|
||||
|
||||
## Would you run a website with another person? how would that work?
|
||||
|
||||
Why not? If it was interesting.
|
||||
|
||||
## Do you surf the web to find new personal websites very often?
|
||||
|
||||
Yes, I really enjoy clicking through web-rings and buttons.
|
||||
|
||||
## Do you bookmark other people's websites? how would you feel knowing someone else bookmarked yours?
|
||||
|
||||
Not often, no.
|
||||
|
||||
## What do you want people to be most impressed with when they see your website?
|
||||
|
||||
The fact that the layout uses no media queries.
|
||||
|
||||
## Are you interested in technology outside of websites? do you collect?
|
||||
|
||||
Yea, I love computers and FLOSS software. I do try to make good purchases that will last a long time, so I don't have a *ton* of tech, but I'm certainly not short on gadgets.
|
||||
|
||||
## How often and for how long are you online?
|
||||
|
||||
I work on a computer, so most of the day.
|
||||
|
||||
## When it comes to your website, who is your target audience?
|
||||
|
||||
Mostly incense nerds and people who want to keep up with my life. It's super easy to get an audience if you're on the fediverse and write about tech, but there are already plenty of blogs like that out there.
|
||||
|
||||
## Have you ever been interested in xhtml?
|
||||
|
||||
Not especially. It seems like one of those things that just never really took off.
|
||||
|
||||
## Do you program in general? have you ever written a program for use with or on your website, not counting simple javascript?
|
||||
|
||||
Yea, I wrote [Poaster](https://nathanupchurch.com/blog/Solving-SSG-Microblogging-Ergonomics-with-KDialog-for-Incense-Posting/) in Ruby for some reason. I have also done desktop automation stuff with Node.
|
||||
|
||||
## Speaking of programs that help you make websites, what do you think of static site generators (ssgs)? have you ever used one?
|
||||
|
||||
Big fan of Eleventy. I love being able to just get straight to the content when I want to, and I love that my site is modular and simple to update.
|
||||
|
||||
## Do you keep a hitcounter? why or why not?
|
||||
|
||||
No, but I do use some privacy respecting FLOSS analytics tools. I like to see how many people are reading my posts and where they are from.
|
||||
|
||||
## Do you frequent forums? which ones?
|
||||
|
||||
I wouldn't use the term frequent, but I do have a presence on some FLOSS forums, as well as [Dogs on Acid](https://www.dogsonacid.com/), and [Ouddict](https://www.ouddict.com/).
|
||||
|
||||
## Do you write your page content directly into the editor, or do you prepare it elsewhere, like a text document or a word document?
|
||||
|
||||
I often use [Marknote](https://apps.kde.org/marknote/). It's new and a little rough around the edges, but the potential is huge and I already enjoy using it despite its sometimes very annoying bugs.
|
||||
|
||||
## Do you think you appear cool to others? a more accurate answer now: do other people ever say you're cool?
|
||||
|
||||
I've been told that I write like a 50 year old academic, so, no haha. I also don't know that adults call each other cool very often. Certainly not the cool ones anyway!
|
||||
|
||||
## Are you embarrassed of your old work? have you ever deleted everything out of shame?
|
||||
|
||||
Always and forever.
|
||||
|
||||
## Would you close down your website if you couldn't update it, or would you leave an archive?
|
||||
|
||||
I think I'd like to leave it.
|
||||
|
||||
## So you reveal a lot about yourself on your website? or are you more secretive?
|
||||
|
||||
I try not to overshare too much, but I do keep it real, I think.
|
||||
|
||||
## Are you willing to reveal who your best online friend is, and/or if they have a website?
|
||||
|
||||
I will never tell.
|
||||
|
||||
## And do you optimise the images on your website?
|
||||
|
||||
Yes, with the utterly incredible [Converseen](https://converseen.fasterland.net/).
|
||||
|
||||
## We're out of time! how do you feel after answering 100 questions? ... other than exhausted.
|
||||
|
||||
Ready for bed!
|
||||
@@ -23,7 +23,7 @@ As I brought my laundry basket downstairs earlier today I checked the front porc
|
||||
The "eleven inch" sticks all come markedly short of eleven inches, and they each have some three-plus inches of bare bamboo stick. Some appear to be machine extruded while others show a coating gradient typical with powder-coated sticks. Strange. I start with a strawberry cone:
|
||||
|
||||
## Strawberry (Cones)
|
||||
I'm *sure* I've had these before. I have a feeling they may have been among the incense I picked up from a gas station I once frequented not only for [the drinks with the wee glass lizards on them](https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Feaqi1o3yv2441.jpg)[^3], but for their gargantuan incense display. The cones have surprisingly little fragrance before they are burned. Upon lighting, they produce a large amount of smoke. There is a sweet, strikingly artificial, strawberry-like fragrance in the burn. It's reminds me of a strawberry juice-box or fruit snack that's 99% apple juice with a hint of strawberry essence. But mostly, I smell the charcoal and some accelerant. The smell is nostalgic, but not good by any stretch. My throat is already feeling slightly irritated; an inauspicious start. Moving on swiftly.
|
||||
I'm *sure* I've had these before. I have a feeling they may have been among the incense I picked up from a gas station I once frequented not only for [the drinks with the wee glass lizards on them](https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Feaqi1o3yv2441.jpg)[^3], but for their gargantuan incense display. The cones have surprisingly little fragrance before they are burned. Upon lighting, they produce a large amount of smoke. There is a sweet, strikingly artificial, strawberry-like fragrance in the burn. It reminds me of a strawberry juice-box or fruit snack that's 99% apple juice with a hint of strawberry essence. But mostly, I smell the charcoal and some accelerant. The smell is nostalgic, but not good by any stretch. My throat is already feeling slightly irritated; an inauspicious start. Moving on swiftly.
|
||||
|
||||
## Coconut
|
||||
These have a very strong fragrance on the stick. It's sweet and acidic, almost more like a piña colada than coconut. It smells quite delicious. This fragrance is also inducing some nostalgia for me. On lighting, an aggressively sooty flame leaps to cover the first centimeter or so of the stick; oil appears to emerge from the stick directly beneath the flame. The fragrance upon extinguishing the flame is shocking. It's *foul*: vaporized wax, burning plastic, and some odd fishy note with a hint of artificial coconut. It's the kind of smell that makes you feel that your lifespan is being reduced. I put the stick out in short order.
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
export default {
|
||||
tags: [
|
||||
"posts"
|
||||
],
|
||||
"layout": "layouts/post.njk",
|
||||
tags: ["posts", "metadata", "profilePic", "tagList"],
|
||||
layout: "layouts/post.njk",
|
||||
};
|
||||
|
||||
111
content/blog/eleventy-becomes-build-awesome.md
Normal file
111
content/blog/eleventy-becomes-build-awesome.md
Normal file
@@ -0,0 +1,111 @@
|
||||
---
|
||||
title: "Eleventy Becomes, *Sigh*, Build Awesome"
|
||||
description: "Sustainability? Enshittification? I have some feelings about this."
|
||||
date: 2026-03-11
|
||||
tags:
|
||||
- Eleventy
|
||||
- Enshittification
|
||||
- Web Development
|
||||
synopsis: "Sustainability? Enshittification? I have some feelings about this."
|
||||
imageURL: /img/eleventy-becomes-sigh-build-awesome/eleventy-logo.png
|
||||
imageAlt: The old Eleventy logo.
|
||||
mastodon_id: "116213694439138520"
|
||||
---
|
||||
In case you haven't heard, Eleventy, the excellent static site generator that I
|
||||
use for this very website has been acquired by Font Awesome. As a result, it
|
||||
has been renamed, *sigh*,
|
||||
[Build Awesome](https://www.11ty.dev/blog/build-awesome/). After seeing what
|
||||
happened to [Shoelace](https://shoelace.style/), I'm apprehensive
|
||||
and very much not looking forward to seeing what features get locked behind a
|
||||
paywall. But beside the enshittification likely to follow, I thought we'd
|
||||
stopped appending "awesome" to everything at roughly the same time bacon memes,
|
||||
curly moustaches, and
|
||||
[stomp-clap music](https://knowyourmeme.com/memes/stomp-clap-hey-music) went
|
||||
out of style. It seems like
|
||||
[I'm not the only one](https://www.allaboutken.com/posts/20260305-digesting-eleventy-becomes-build-awesome/)
|
||||
who feels this way either.
|
||||
|
||||
While disappointed with this state of affairs, I'm not terribly surprised.
|
||||
Beyond the matter of funding,
|
||||
[as W. Evan Sheehan of The Darth Mall put it](https://darthmall.net/notes/2026/eleventy-build-awesome/):
|
||||
|
||||
> …the vibe of open source in the JavaScript community is a little bit different than what I think of as the broader open source movement. Open source JavaScript projects often feel a little more tied to corporations than Linux, or Python, or NeoVim.
|
||||
|
||||
I wholeheartedly agree. There's
|
||||
[a big difference](https://www.gnu.org/philosophy/open-source-misses-the-point.en.html)
|
||||
in philosophy between "free software" and "open source," and many JavaScript
|
||||
projects seem to be firmly in the latter camp.
|
||||
|
||||
The choice of the MIT license for Eleventy in the first place speaks
|
||||
volumes—it's antithetical to the free software movement. The MIT license allows
|
||||
corporations to snatch up free and open source software, insert whatever
|
||||
malicious functionality they please, lock down the source code, and abuse the
|
||||
users they extort with their rent-seeking pricing schemes. On the other hand,
|
||||
code licensed under a strong copyleft license such as the GPL ensures that
|
||||
software always remains free (as in speech). Under a strong copyleft license,
|
||||
anyone can use the software for any purpose. They may study, change, improve,
|
||||
and redistribute it. But unlike permissive licenses such as the MIT license,
|
||||
developers may *not* strip these rights from users at any point.
|
||||
|
||||
The goal of the free software movement is to create a
|
||||
[commons](https://en.wikipedia.org/wiki/Commons) of software that anyone is
|
||||
free to use, study, redistribute, and improve so that abusive software ceases
|
||||
to be competitive. In terms of how MIT licensed software helps this cause, it's
|
||||
a bit like putting a soldier on the battlefield with no armor. They may do some
|
||||
damage, but they're a cinch to eliminate from the field. At this point, I see
|
||||
MIT licensing as a red flag on all but the very few projects where it makes
|
||||
sense (such as programming languages). When you decide to rely on MIT-licensed
|
||||
software for your day to day activities, you never know when it will be
|
||||
enshittified, put behind a paywall, or
|
||||
[EEE](https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish)'d out of
|
||||
existence.
|
||||
|
||||
I'm not saying that these things are going to happen to what we knew and loved
|
||||
as Eleventy. Who knows what the future may bring. But I am saying that this
|
||||
move is certainly not in the spirit of Free / Libre and Open Source Software. I
|
||||
fear that the age-old pattern
|
||||
[that befell Standard Notes](/blog/underrated-apps-qownnotes/) is going to
|
||||
happen once again here: first attractive new features appear behind a paywall,
|
||||
then old features you relied on get
|
||||
[put behind a paywall](https://www.reddit.com/r/StandardNotes/comments/strgh2/very_confused_about_selfhosting_and_extensions/), using the software without paying is slowly made increasingly difficult,
|
||||
and, before you know it, they
|
||||
[pull the ol' switcheroo](https://www.reddit.com/r/StandardNotes/comments/16wkrau/note_version_316725_is_the_last_one_to_be_free_or/)
|
||||
on the license (even if they revert from embarrassment later).
|
||||
|
||||
At the same time, despite my misgivings, I'm happy that
|
||||
[Zach Leatherman](https://www.zachleat.com/) is (I assume) going to be properly
|
||||
paid to continue his work on the project. It shouldn't be so damned hard to
|
||||
make a living while performing a public good. Zach seemed pretty happy about
|
||||
all of this during his appearance on, *sigh*,
|
||||
[Podcast Awesome](https://www.youtube.com/watch?v=QnnU_iguZ4I). He strikes me
|
||||
as someone who really cares about his work, and seems a lovely man, always
|
||||
willing to jump in help someone even when the problem is between the chair and
|
||||
the keyboard (ask me how I know). Zach deserves, at minimum, to be paid a
|
||||
decent salary for his contribution to the world, and I'm thrilled that it seems
|
||||
he's going to get at least that.
|
||||
|
||||
Now I'm tempted to turn this into a screed on funding for FLOSS projects, but
|
||||
better informed people than I have written plenty of those already, so I'll
|
||||
leave it at this—the fact that NASA, Cern, Google, Microsoft, Mozilla, Ubuntu,
|
||||
JetBrains, CloudCannon, Netlify, Cloudflare, Shopify, MIT, Stanford, the
|
||||
governments of France, the UK, and the USA, Orange, Red Hat, Just Eat,
|
||||
[and others](https://www.11ty.dev/#why-should-you-use-eleventy) didn't manage
|
||||
to muster between them
|
||||
[a piddling $6,000 per month](https://www.zachleat.com/web/independent-sustainable-11ty/#asking-for-help)
|
||||
to pay the developer of a tool they use to publish their websites is *disgusting*. We might have avoided this situation if they had.
|
||||
|
||||
I developed something like a brand loyalty to Eleventy. It's a scrappy project
|
||||
from a talented developer who has managed to keep it alive and well for eight
|
||||
years. The project has become widely used because *it's excellent*: flexible,
|
||||
powerful, fast, and easy to use for web developers who are used to working with
|
||||
JavaScript. I'm sad to see the name go, along with the red balloon, and that
|
||||
scruffy possum. The [clean, middle-class replacement](https://github.com/11ty/11ty-website/blob/main/src/img/mascots/awesome-possum-balloon-smile-sm.svg) with its stupid *clothing*
|
||||
and *fancy green balloon* [^1] can take a hike—I can't believe they've
|
||||
gentrified the damn mascot!
|
||||
|
||||
[](/img/eleventy-becomes-sigh-build-awesome/grumpy_among_the_stars.webp)
|
||||
|
||||
While I have major apprehensions about where, *sigh*, Font Awesome is going to take the project, I suppose we'll just have to wait and see where this goes. In the meantime, let's all be sure to donate to the FLOSS projects we use, publicly shame corporations who don't give back to the projects they profit from, and pressure our representatives to fund FLOSS software!
|
||||
|
||||
[^1]: And green is my favorite color, too :[
|
||||
|
||||
@@ -5,6 +5,7 @@ date: 2024-12-02
|
||||
tags:
|
||||
- Site Updates
|
||||
- Eleventy
|
||||
- Web Development
|
||||
synopsis: At last, I've gotten around to implementing image galleries.
|
||||
imageURL: /img/isabella-fischer-X2l9M6jsS7E-unsplash.webp
|
||||
imageAlt: Some very tasty looking pop tarts with pink icing and sprinkles.
|
||||
|
||||
@@ -10,7 +10,10 @@ imageAlt: "What appears to be a pack of cigarettes labeled 11:11. There is also
|
||||
synopsis: "Taking a look at Boy Vienna's viral cigarette incense sticks."
|
||||
mastodon_id: "114462578542598320"
|
||||
---
|
||||
[Boy Vienna](https://boyvienna.com/) is a brand from fashion designer and multi-media artist [Afaf Fi Seyam](https://www.instagram.com/zeopatra) that has been receiving attention on [TikTok](https://www.tiktok.com/@boyvienna/video/7366977382508514603) and [Instagram](https://www.instagram.com/zeopatra/reel/DAyIy2Lv0RQ/) for its incense cigarettes. I knew I was going to have to try these sticks the minute they found their way onto my screen—it would seem that [everyone else felt the same way](https://www.instagram.com/zeopatra/p/DJHP0a3NnlI/), as when I made my way to the web store most of Boy Vienna's incense varieties were sold out. For 35 {{ "USD" | abbr("United States Dollars") | safe }}, I was able to snag a box of the 11:11 variety, listed as containing a blend of sage, lavender, and rosemary.
|
||||
::: info
|
||||
Update: Boy Vienna's 11:11 sticks have since also been reviewed on [rauchfahne.de](https://blog.rauchfahne.de/en/2025/11/29/boy-vienna-1111-en/).
|
||||
:::
|
||||
[Boy Vienna](https://boyvienna.com/) is a brand from fashion designer and multi-media artist [Afaf Fi Seyam](https://www.instagram.com/zeopatra) that has been receiving attention on [TikTok](https://www.tiktok.com/@boyvienna/video/7366977382508514603) and [Instagram](https://www.instagram.com/zeopatra/reel/DAyIy2Lv0RQ/) for its incense cigarettes. As opposed to the tobacco variety, these "cigarettes" are designed to be lit and allowed to burn like an incense-stick; they are not to be inhaled. I knew I was going to have to try these sticks the minute they found their way onto my screen—it would seem that [everyone else felt the same way](https://www.instagram.com/zeopatra/p/DJHP0a3NnlI/), as when I made my way to the web store most of Boy Vienna's incense varieties were sold out. For 35 {{ "USD" | abbr("United States Dollars") | safe }}, I was able to snag a box of the 11:11 variety, listed as containing a blend of sage, lavender, and rosemary.
|
||||
|
||||
[](/img/boy_vienna_11_11/boy_vienna_11_11_incense_cigarette_sticks_2.webp)
|
||||
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
---
|
||||
title: "Incense Review: Hippy Hug, Lavender Française, and White Sage Mage by The World Makes Scents"
|
||||
description: "Reviewing Hippy Hug, Lavender Française, and White Sage Mage from The World Makes Scents"
|
||||
date: 2026-04-26
|
||||
tags:
|
||||
- Incense
|
||||
- Incense Review
|
||||
synopsis: "Reviewing Hippy Hug, Lavender Française, and White Sage Mage from The World Makes Scents."
|
||||
imageURL: /img/TWMS2026/the-world-makes-scents-incense.webp
|
||||
imageAlt: "A closeup of The World Makes Scents' new incense packaging with a few loose cones."
|
||||
mastodon_id: "116474428801255815"
|
||||
---
|
||||
In the interest of transparency: as readers may recall, I
|
||||
[paid Dave a visit](/blog/visiting-chicago-incense-maker-dave-of-the-world-makes-scents/)
|
||||
at the company's workshop in 2024. Since then, I've been back several times and
|
||||
we remain friends, trading ingredients, incense, and knowledge. I also received
|
||||
this incense for free. Despite this, as always, I will do my best to be
|
||||
objective.
|
||||
|
||||
[](/img/TWMS2026/the-world-makes-scents-incense.webp)
|
||||
|
||||
## Hippy Hug Sticks
|
||||
|
||||
First of all I'd like to point out that TWMS has updated their packaging. It's
|
||||
vibrant, colorful, and fun. The illustration on the *Hippy Hug* packaging is,
|
||||
however, clearly AI generated, which [I have some feelings about](ai/), but the
|
||||
overall effect is playful and creative, which I find refreshing.
|
||||
|
||||
The 12 thick sticks are wrapped in colorful paper inside TWMS' trademark
|
||||
jewelry box—an improvement on the synthetic batting material which would
|
||||
sometimes cling to the sticks. I'm struck right away, as I was with each
|
||||
variety in today's selection, by the strength of fragrance from the unlit
|
||||
incense. With *Hippy Hug*, I get a lovely hit of clove and patchouli. The sticks
|
||||
are about 4mm in diameter, and dark brown, with a rather coarse texture.
|
||||
They're also solid, with little give and no crumbling or breakage in the
|
||||
package.
|
||||
|
||||
On lighting smoky, patchouli, and sweet vanillic notes emerge. Clove follows as
|
||||
the initial burst of smoke recedes into a surprisingly gentle stream from the
|
||||
large stick. If you're familiar with sweet patchoui fragrances, such as
|
||||
*Patchouli* from Shoyeido's *Overtones* collection, *Hippy* *Hug* doesn't quite
|
||||
match this profile. While the sweetness is clear, this stick somehow leans dry,
|
||||
leaving room for the clove to mingle with what I assume is a wood binder
|
||||
(binders no longer appear to be listed on the ingredients) to make a
|
||||
spicy/smoky effect.
|
||||
|
||||
The patchouli seems to have been used judiciously: just enough to make the
|
||||
composition work. There is undoubtedly a 'campfire' aspect to this stick,
|
||||
but it comes across as more woodsmoke than that riproaring, herbaceous
|
||||
burning-vegetation note that you get when you overdose anything leafy. In
|
||||
addition to patchouli, sandalwood, benzoin, and clove, the ingredients also
|
||||
note the inclusion of frankincense. When I look for it, I think I may be able
|
||||
to identify something of a resin-note in the fragrance, but it's certainly not
|
||||
jumping out at me. The sandalwood is also a background player here.
|
||||
|
||||
I'd really been looking forward to trying this latest take on patchouli from
|
||||
TWMS since I learned that the team was revising and upgrading some of their old
|
||||
single-note formulas. I wasn't disappointed. As perhaps reflected by the name
|
||||
change, while still a patchouli fragrance, the new iteration has evolved from a
|
||||
single-note stick into an honest-to-god composition, and I'm here for it.
|
||||
|
||||
## Lavender Française
|
||||
|
||||
The fragrance of the unlit cones is lovely; a juicy lavender note with a hint
|
||||
of Australian sandalwood. This is a markedly less complex fragrance than *Hippy
|
||||
Hug,* but what it lacks in complexity is makes up for in clarity. It's
|
||||
impressively lavender-forward while somehow avoiding much of the harshness that can
|
||||
come from lavender flowers. A pleasant benzoin sweetness underscores the floral
|
||||
note. I don't notice much of a sandalwood fragrance in the burn.
|
||||
|
||||
Like any wood-based cone, you won't want to sit right next to this incense, but
|
||||
then again you don't need to. Even in my large office, with relatively little
|
||||
airflow, the fragrance traverses the distance from the incense table to the
|
||||
computer desk with little trouble. Giving this cone some room to breathe nets a
|
||||
relatively clean, room-filling fragrance. There does seem to be a wood binder
|
||||
note that somewhat muddies the waters, but it's not terribly obtrusive.
|
||||
|
||||
The fragrance naturally becomes a little rough around the edges as the diameter
|
||||
increases near the base of the cone, and the formerly modest smoke production
|
||||
ramps up quite seriously. That said, the formula seems to handle the change in
|
||||
diameter well. As the ember travels down the cone, the lavender begins to
|
||||
exchange its juicy, fruity character for a more herbal, camphoraceous scent.
|
||||
The fragrance also becomes more smoky, as is to be expected. In contrast to
|
||||
some of the cheap wood-and-synthetic-fragrance based cones I've tried, the
|
||||
effect here is more that of an evolving fragrance than a devolving one. I think
|
||||
I'd still prefer a stick, but I'd be lying if I said that I didn't enjoy this
|
||||
experience.
|
||||
|
||||
## White Sage Mage
|
||||
|
||||
The fragrance of the unlit cones is a pleasant sage note. I don't get any
|
||||
sandalwood this time for whatever reason. The fragrance immediately after
|
||||
lighting is sage forward, herbaceous, and a touch smoky, although significantly
|
||||
less so than burning a sage bundle. I never could understand why people insist
|
||||
on burning sage bundles for fragrance. The result of such a large amount of
|
||||
herbs burning at once is, for me, overwhelmingly rough and unpleasant. I much
|
||||
prefer this format: carefully processed sage included in a combustible incense
|
||||
as part of a well considered formula. It's cleaner, and as sage happens to be a
|
||||
very potent herb, it still offers more than enough of a sage fragrance. In
|
||||
fact, like *Lavender Française*, the star botanical almost entirely comprises
|
||||
the fragrance here.
|
||||
|
||||
The inclusion of a little lavender in these cones is a nice addition—the floral
|
||||
note lifts the fragrance from poultry-seasoning territory (always a risk with
|
||||
sage). The ingredients also note the inclusion of frankincense, but I couldn't
|
||||
pick it out; I suspect it may have been included to regulate the burn
|
||||
temperature somewhat. Again, the fragrance has no trouble filling the room.
|
||||
This cone is also subject to the pitfalls of the format, but it handles them
|
||||
fairly well.
|
||||
|
||||
## Conclusion
|
||||
|
||||
After experiencing this selection, I remain impressed at the quality of
|
||||
fragrance that The World Makes Scents is able to produce with carefully
|
||||
processed whole botanicals. As one of the very few incense brands on the market
|
||||
that you can be sure uses no synthetics or concentrates, it remains my go-to
|
||||
recommendation for people seeking an entirely natural combustible incense in
|
||||
the U.S.A.
|
||||
|
||||
While the brand's cones are, in my opinion, some of the better examples of the
|
||||
format, I still do recommend that people nab a
|
||||
[censer](https://shoyeido.com/products/incense-holder-bowl), some
|
||||
[ash](https://shoyeido.com/products/accessory-miyakohai-ash), and buy sticks
|
||||
where possible.[^1]
|
||||
|
||||
|
||||
[^1]: Unfortunately, when I made my order almost all of the sticks
|
||||
were out of stock on the [website](https://theworldmakesscents.com/), and I am
|
||||
trying to wean myself off of Amazon
|
||||
[for](https://en.wikipedia.org/wiki/Criticism_of_Amazon)
|
||||
[ethical](https://www.ethicalconsumer.org/retailers/ten-reasons-avoid-amazon)
|
||||
[reasons](https://socialjusticebooks.org/about/why-boycott-amazon/).
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
title: "One Last Chance for Wild Berry: Reviewing Fizzy Pop Incense Powder"
|
||||
description: "If this isn't any good, I'm giving up on Wild Berry once and for all."
|
||||
date: 2026-05-28
|
||||
tags:
|
||||
- Incense
|
||||
- Incense Review
|
||||
synopsis: "If this isn't any good, I'm giving up on Wild Berry once and for all."
|
||||
imageURL: /img/gallery/wild-berry-fizzy-pop/wild-berry-fizzy-pop-powder-5.webp
|
||||
imageAlt: "A plasma lighter hovers ominously over the tail of a trail of blue incense powder in the shape of an auspicious cloud, atop a flat layer of ash in a brass censer."
|
||||
mastodon_id: "116653399110363374"
|
||||
---
|
||||
Some time ago, I [reviewed a variety](/blog/an-evening-with-americas-best-incense-wild-berry/) of Wild Berry incense sticks and cones. If you don't know how that went, here's an idea:
|
||||
|
||||
> It’s the kind of smell that makes you feel that your lifespan is being reduced… off-notes are tremendous… beginning to feel as though I’ve french-inhaled my way through a pack of menthol Newports.
|
||||
|
||||
I didn't think I'd wind up returning to the brand, but I figured I'd give them one last chance before I completely wrote it off. If you haunt [/r/incense](https://www.reddit.com/r/Incense/) as much I do, you'll know that *Fizzy Pop* is rated highly by Wild Berry fans. Since my last experience with Wild Berry's incense, I've felt that it may have been a bit of an oversight not to try *Fizzy Pop*. I was also curious about the company's incense powder offering. Not only is it unusual for a western incense brand to offer powder, but in my experience powders don't tend to contain all of the off-notes you might imagine to be supplied by bamboo sticks and binders. It's much easier to make a powder that doesn't stink to the heavens than it is a stick. With that thought, my mind was made up. I simply hadn't been fair to Wild Berry until I'd tried the powder variant of their fan favorite.
|
||||
|
||||
Ten Trumpland fun-bucks, plus shipping, will net you a jar containing 38 grams of shockingly blue incense powder—approximately twelve hours of burn time according to the side of the jar. I sure hope I like this stuff. The fragrance upon opening the jar is a lot of fun. It's strong, smelling distinctly like a concentrated lemon-lime soda syrup, or a fizzy lemon-lime candy. It's uncanny; a super bright, almost powdery, white-musk / laundry detergent note offers a real sensation of effervescence. There are going to be a lot of people who find the unburned fragrance of this stuff sickly, but I happen to love candy and don't mind smells in this category. I don't necessarily want my apartment fragranced of it, but it's fun to smell.
|
||||
|
||||
[](/img/gallery/wild-berry-fizzy-pop/wild-berry-fizzy-pop-powder-8.webp)
|
||||
|
||||
I must admit that it felt *wrong* loading up a stencil with this lightning-blue powder in my Chinese censer. The test-blends I use this thing to burn might not always be great, but they are made of real aromatic woods, resins, and other botanicals. The powder texture was pretty perfect, however, and it was easy enough to make a neat incense seal.
|
||||
|
||||
[](/img/gallery/wild-berry-fizzy-pop/wild-berry-fizzy-pop-powder-5.webp)
|
||||
|
||||
Upon lighting, a long, angry red ember took hold, quickly working its way down the electric blue trail and turning it into a spookily dark black ash. The fragrance that emerged immediately alerted me to the fact that this experiment was a grave mistake. While scrambling to get away without knocking over my camera, I scribbled onto an upside-down notepad:
|
||||
|
||||
> fishy , burning laundry-detergent. metallic. ~~Like~~ smelled like ~~in~~ the ashes of incense. <u>Diabolical</u>. maybe the faintest hint of sprite.
|
||||
|
||||
As I paced the living room, trying to come to terms with what I was experiencing, I realized that I was going to have to sit back down next to the burning incense to take more pictures. Behind the camera the fishy smoke followed me, flying straight at my face like I'd offended it. I covered my mouth with my shirt; it did little good. Even the ember looked like it had it in for me.
|
||||
|
||||
[.")](/img/gallery/wild-berry-fizzy-pop/wild-berry-fizzy-pop-powder-6.webp)
|
||||
|
||||
In the aftermath of this ordeal, It occurred to me that I may not have managed to write in sufficient detail to constitute a review. I thought about burning another trail to analyze the incense more closely, but I just can't bring myself to do it.
|
||||
|
||||
[](/img/wild-berry-fizzy-pop-powder/diabolical.webp)
|
||||
|
||||
But, really, what more can I say? In my struggle to record the many emotions and sensations I was experiencing, I don't know that I could do much better than "<u>Diabolical</u>" at the time, and I don't know that I can do better now. Yes, I think I'm done with Wild Berry for good at this point. After two, frankly, *harrowing* experiences with the brand, I don't even know that I can muster the courage to try the "Mystic Meadow" sample sticks they've sent me. Not to put too fine a point on it, but how a company can develop, approve, and sell an incense powder that smells so strikingly, aggressively, offensively bad is truly beyond me.
|
||||
@@ -1,7 +1,12 @@
|
||||
---
|
||||
eleventyExcludeFromCollections: true
|
||||
layout: layouts/base.njk
|
||||
hideBlogTitleFromHeader: true
|
||||
title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch"
|
||||
tags:
|
||||
- metadata
|
||||
- postList
|
||||
- tagList
|
||||
structuredData: none
|
||||
pagination:
|
||||
data: collections.posts
|
||||
@@ -15,31 +20,28 @@ paginationRootDir: blog
|
||||
<h1>The Stochastic Bletherist</h1>
|
||||
|
||||
<p class="page-block nodropcap">
|
||||
The personal blog of Nathan Upchurch, where he writes about everything from <a href="/tags/storytime">personal stories</a> to <a href="/tags/gnu-linux">tech</a>, <a href="/tags/vegan-cooking">food</a>, and <a href="/tags/incense">incense</a>.<br />
|
||||
|
||||
<a href="/tags/">
|
||||
<button type="button">Topics »</button>
|
||||
</a>
|
||||
<a href="../blogroll/">
|
||||
<button type="button">Blogroll »</button>
|
||||
</a>
|
||||
<em>The Stochastic Bletherist</em> is the personal blog of Nathan Upchurch, where he writes about whatever he fancies at the time. <a href="/feed/feed.xml">Subscribe</a> if you’re interested in musings on life, music, and technology, weird and wonderful incense reviews, the occasional bit of spicy discourse, or learning how to make things like vegan ranch dressing or incense sticks. There’s something for everyone here.
|
||||
<span class="buttonContainer">
|
||||
<a href="../blogroll/">
|
||||
<button type="button">Blogroll</button>
|
||||
</a>
|
||||
<a href="/search/">
|
||||
<button type="button">Search</button>
|
||||
</a>
|
||||
<a href="/tags/">
|
||||
<button type="button">Topics</button>
|
||||
</a>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<h2>What’s New:</h2>
|
||||
{% else %}
|
||||
<h1>The Stochastic Bletherist Blog</h1>
|
||||
<p class="page-block nodropcap">
|
||||
Writing about everything from <a href="/tags/storytime">personal stories</a> to <a href="/tags/gnu-linux">tech</a>, <a href="/tags/vegan-cooking">food</a>, and <a href="/tags/incense">incense</a>.<br />
|
||||
<h1>The Stochastic Bletherist</h1>
|
||||
|
||||
<a href="/tags/">
|
||||
<button type="button">Topics »</button>
|
||||
</a>
|
||||
<a href="../blogroll/">
|
||||
<button type="button">Blogroll »</button>
|
||||
</a>
|
||||
<p class="page-block nodropcap">
|
||||
<em>The Stochastic Bletherist</em> is the personal blog of Nathan Upchurch, where he writes about whatever he fancies at the time. <a href="/feed/feed.xml">Subscribe</a> if you’re interested in musings on life, music, and technology, weird and wonderful incense reviews, the occasional bit of spicy discourse, or learning how to make things like vegan ranch dressing or incense sticks. There’s something for everyone here.
|
||||
</p>
|
||||
|
||||
<h2>More posts:</h2>
|
||||
<h2 class="postlist-header">More posts:</h2>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ date: 2025-02-04
|
||||
tags:
|
||||
- Site Updates
|
||||
- Eleventy
|
||||
- Web Development
|
||||
synopsis: "Remember when internet quizzes were a thing? I wanted to bring them to my website."
|
||||
imageURL: ""
|
||||
imageAlt: ""
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
title: "Incense Gum? Reviewing the Viral Nathan and Sons Underbrush Remineralizing Gum"
|
||||
description: "You know I had to try a chewing gum made from incense ingredients."
|
||||
date: 2026-02-23
|
||||
tags:
|
||||
- Incense
|
||||
- Incense Review
|
||||
- Other Review
|
||||
- Food and Beverage
|
||||
synopsis: "You know I had to try a chewing gum made from incense ingredients."
|
||||
imageURL: "/img/nathan_and_sons_underbrush_remineralizing_gum/nathan-and-sons-underbrush-remineralizing-gum.webp"
|
||||
imageAlt: "A tealight cup containing a melted puddle of gum on an MHP30 mini heater. Beside it are packages of the gum."
|
||||
mastodon_id: "116122384966857793"
|
||||
---
|
||||
|
||||
Maybe this is just my algorithm, but I just can't escape
|
||||
[Nathan and Sons Underbrush Remineralizing Gum](https://nathanandsons.com/) on
|
||||
[Instagram](https://www.instagram.com/nathan.and.sons/). In case your feed
|
||||
isn't absolutely inundated with Underbrush content like mine, Underbrush is a
|
||||
chewing gum brand that uses natural botanicals rather than the, well,
|
||||
[plastic](https://en.wikipedia.org/wiki/Chewing_gum#Microplastics) that is
|
||||
commonly used as a gum base. Instead, Underbrush contains chicle, mastic,
|
||||
spruce, and acacia gum, myrrh and other natural ingredients. Are you beginning
|
||||
to see why I'm interested in the stuff? Some of these ingredients might sound
|
||||
more at home in an incense build than something you put in your mouth, but the
|
||||
truth is that plant gums have been chewed for centuries. Hell, people died over mastic in antiquity, such was its acclaim as a herbal medicine, flavoring,
|
||||
and chewing gum. Native Americans used spruce gum in this way, and frankincense
|
||||
has also traditionally been used as a chewing gum.
|
||||
|
||||
Naturally, I *had* to try a gum made, essentially, out of incense materials. The
|
||||
price deterred me for a while, but my curiosity eventually won out. I elbowed
|
||||
my way through the aggressive salesy cruft on the Nathan and Sons website and
|
||||
put in an order for the berry variety (the only vegan option).
|
||||
|
||||
[](/img/nathan_and_sons_underbrush_remineralizing_gum/nathan-and-sons-underbrush-remineralizing-gum.webp)
|
||||
|
||||
## Underbrush as intended: gum
|
||||
|
||||
With a texture nigh-indistinguishable from any gum you might find on a
|
||||
supermarket shelf, I found Underbrush pleasantly sweet with a mild berry flavor
|
||||
as I began to chew. Unfortunately, this only lasts for, quite literally,
|
||||
seconds before settling down into an ashtray meets lapsang-souchong smoky black
|
||||
tea flavor. It's genuinely pretty shocking how quickly the flavor changes. I
|
||||
can only assume that the lingering note comes from the myrrh. It really is
|
||||
quite unfortunate that this is the only resin with any flavor left in it—myrrh
|
||||
is [infamous](https://en.wikipedia.org/wiki/Myrrh#Etymology) for its bitter
|
||||
flavor[^1].
|
||||
|
||||
In the ads for this gum, they show the resins being heated in order to mix them
|
||||
together, and I can't help but wonder whether that's the culprit here. With
|
||||
plain old frankincense or mastic, the pronounced flavor of the resin lasts for
|
||||
just about as long as you can be bothered to chew. As an incense maker, I am
|
||||
well aware of how quickly heat can evaporate out all of those lovely aromatic
|
||||
volatile compounds—even now I'm grinding some costus root twenty seconds at a
|
||||
time, ensuring that the temperature of the material doesn't rise beyond 100°F
|
||||
with an infrared thermometer. I don't really care about the berry flavor, but
|
||||
it seems like abject sacrilege to have all of these nice, rare, and expensive
|
||||
tree resins in a product with their flavor cooked out of them.
|
||||
|
||||
After spending close to $40 for 36 pieces of gum,
|
||||
[my disappointment is immeasurable.](https://knowyourmeme.com/memes/my-disappointment-is-immeasurable-and-my-day-is-ruined)
|
||||
That said, I didn't buy the stuff just to chew it all anyway. If it's no good
|
||||
as a gum, how will it fare as incense?
|
||||
|
||||
## Underbrush as not intended: incense
|
||||
|
||||
At 185°C the gum presents a candy-like sweetness and a fruity acidity with *maybe*
|
||||
a tiny hint of mastic? Imagine a bag of skittles left in a hot car. The
|
||||
fragrance didn't change at 250°, but at 300° a toasty note enters and the
|
||||
acidity ramps up before it begins to darken in color and smell burned.
|
||||
|
||||
Even as incense, the resins are practically nowhere to be found. What a shame.
|
||||
|
||||
## Conclusion
|
||||
|
||||
I'm not at all enamored with this stuff. While the gum circumvents the usual
|
||||
issues inherent to chewing resin with its excellent texture, all of those
|
||||
beautiful natural ingredients present little to no flavor. The added flavoring
|
||||
disappears so quickly that it may as well not be there. I can't speak to
|
||||
the health claims made by Nathan and Sons, but in purely sensory terms, I prefer
|
||||
the stuff on an incense heater. And I don't like it much there.
|
||||
|
||||
On an emotional level, cooking the flavor out of these beautiful
|
||||
resins—precious materials that
|
||||
[wars have been fought over](https://en.wikipedia.org/wiki/Chios_massacre)
|
||||
—feels like an
|
||||
[Ecce Homo](https://en.wikipedia.org/wiki/Ecce_Homo_(Garc%C3%ADa_Mart%C3%ADnez_and_Gim%C3%A9nez))
|
||||
moment. Continuing on the religious theme, perhaps more apt is the famous line
|
||||
from the Gospel of Matthew: "…neither cast ye your pearls before swine, lest
|
||||
they trample them under their feet…." Whether you're looking for something to
|
||||
chew or a fragrance to enjoy, my recommendation would be to use a chunk of mastic instead.
|
||||
|
||||
[^1]: Honestly, it's quite difficult to make myrrh smell nice in incense too.
|
||||
|
||||
@@ -5,6 +5,7 @@ date: 2024-10-23
|
||||
tags:
|
||||
- Music
|
||||
- Site Updates
|
||||
- Web Development
|
||||
synopsis: "I've gone and built a not-so-fancy audio component for my blog."
|
||||
imageURL: /audio/covers/ballin.webp
|
||||
imageAlt: An uncapped fountain pen on top of a pretty, gold-foiled pad of paper beside some envelopes with stamps featuring coffee drinks on them.
|
||||
|
||||
42
content/blog/revisiting-sweet-agarwood.md
Normal file
42
content/blog/revisiting-sweet-agarwood.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: "Revisiting Sweet Agarwood, and a Bonus Quiz"
|
||||
description: "Another attempt at making a sweet-agarwood style incense stick using agarwood skins."
|
||||
date: 2026-04-26
|
||||
tags:
|
||||
- Incense
|
||||
- Incense Making
|
||||
- Incense Builds (Recipes)
|
||||
synopsis: "Another attempt at making a sweet-agarwood style incense stick using agarwood skins."
|
||||
imageURL: /img/incense-recipe-an-attempt-at-a-sweet-agarwood-incense-stick/agarwood-skins.webp
|
||||
imageAlt: "Small flat slivers, or skins, of agarwood showing darker resinated wood streaked with white unresinated wood."
|
||||
mastodon_id: "116474435778369320"
|
||||
---
|
||||
My [last attempt](/blog/incense-recipe-an-attempt-at-a-sweet-agarwood-incense-stick/#fn2) at a sweet agarwood stick was okay but, as I noted, there was room for improvement. My goals with the original build were to create a decent amount of agarwood fragrance, while mitigating the harsh note that comes with cheaper wood. Following my notes from the old build, my new objectives are to increase the amount of agarwood fragrance, reduce sweetness, and add complexity.
|
||||
|
||||
### The Build
|
||||
|Ingredient |Grams|% of Build|
|
||||
|------------------------|-----|----------|
|
||||
|Agarwood |3 |24.90% |
|
||||
|Benzoin Siam |0.4 |3.32% |
|
||||
|Borneol Camphor |0.7 |5.81% |
|
||||
|Cassia |1.0 |8.30% |
|
||||
|Clove |1.2 |9.96% |
|
||||
|Guar Gum |0.35 |2.90% |
|
||||
|Musk Root |0.4 |3.32% |
|
||||
|Santalum album |4.0 |33.20% |
|
||||
|Santalum spicatum |1.0 |8.30% |
|
||||
|
||||
First of all, I included S. album *and* S. spicatum this time. I was curious to try Indian sandalwood in this version, but I also wanted to use at least a little of my superfine Australian sandalwood powder because of how it helps to make a smooth, easily extruded dough.
|
||||
|
||||
### Results
|
||||
Rather than extruding sticks right away, I decided to burn the powder as an incense-seal to trial it. Once again, the incense is very sweet. Adding a heaping helping of S. album surely didn't help this, but I think it may be time to consider forgoing the benzoin altogether. I'm not sure I like musk root with benzoin either.
|
||||
|
||||
The spices are there but, as everything is muddied by the excessive sweetness, it's hard to form an opinion on the spice levels. That said, this attempt is definitely missing something. I think I may include anise in a future iteration.
|
||||
|
||||
I like the level of camphor; the coolness is close to something like Yamadamatsu's *Suifu*, although I will have to wait and see how I like it without the benzoin. One thing I do miss from *Suifu* is that rich, sort of dried-fruit note. My guess is that this comes from using a better quality agarwood.
|
||||
|
||||
I am happier with the quantity of agarwood this time. There is still a harshness to the agarwood fragrance when the incense is burning nearby, but with a little distance everything mellows out significantly. The agarwood is pretty distinctly sour, which I'm not the biggest fan of, but I don't think there's much I can do about that as it seems to be a characteristic of the wood I'm using. So although I'm not a great fan of this particular wood in combustible incense, it's showing up and doing what it's supposed to, and I'm just going to have to be content with that.
|
||||
|
||||
## Bonus: take the incense ingredient quiz!
|
||||
|
||||
After building [the quiz feature](/quizzes/) something like a year ago, I have finally gotten around to making another quiz! This time, it's a test of your whole-botanical incense ingredient knowledge. So if you think you know your lavender from your labdanum, why not test your mettle and [give it a shot](/quizzes/incense-ingredient-quiz/)?
|
||||
@@ -8,6 +8,7 @@ tags:
|
||||
- Meat Alternatives
|
||||
- Chicago
|
||||
- Restaurants
|
||||
- Food and Beverage
|
||||
imageURL: /img/seitan.webp
|
||||
imageAlt: Two wee logs of seitan wrapped tightly in cheesecloth and kitchen twine on a piece of foil next top a pair of kitchen tongs.
|
||||
---
|
||||
|
||||
297
content/blog/thoughts-on-incense-quality-price-and-snobbery.md
Normal file
297
content/blog/thoughts-on-incense-quality-price-and-snobbery.md
Normal file
@@ -0,0 +1,297 @@
|
||||
---
|
||||
title: "Incense: Thoughts on Quality, Price, and Snobbery"
|
||||
description: "Some thoughts on how we think about quality, how incense pricing relates to it, snobbery, and my service-industry past."
|
||||
date: 2026-01-31
|
||||
tags:
|
||||
- Incense
|
||||
synopsis: "Some thoughts on how we think about quality, how incense pricing relates to it, snobbery, and my service-industry past."
|
||||
imageURL: /img/thoughts-on-incense-quality-price-and-snobbery/tennendo-kyara-incense-stick-macro-shot.webp
|
||||
imageAlt: "A macro shot of a burning stick of incense with shallow depth of field."
|
||||
mastodon_id: "115993146633109522"
|
||||
---
|
||||
Whether discussing wine, spirits, perfumes, or incense, there is much back and
|
||||
forth on the subject of quality. On the one hand, there are the connoisseurs
|
||||
flashing their three-plus digit purchases on enthusiast forums, and on the
|
||||
other, there are the humble, salt-of-the-earth naysayers gleefully reminding
|
||||
them of that time a bottle of supermarket swill beat out a premium bottle in a
|
||||
wine competition. From fractions of a penny per stick for "hand dipped" fare,
|
||||
to
|
||||
[over ten dollars each for premium Japanese sticks](https://kikohincense.com/collections/kyara-incense/products/gyokushodo-en-no-sho)
|
||||
, the world of incense has something for every budget. It seems that for every
|
||||
person opining on the sublime beauty of the .5mm green-oil kyara and musk
|
||||
sticks they picked up for a trifling four-figures, there is another insisting
|
||||
that dollar-store punks soaked in a pungent bath of
|
||||
[liquid plastic](https://en.wikipedia.org/wiki/Dipropylene_glycol) and
|
||||
industrial aroma chemicals are just as good, and that anyone enjoying incense
|
||||
that cost more than pennies per stick is either a poseur or a rube brainwashed
|
||||
by the flashy marketing[^1] and pretty boxes of the Japanese incense industry.
|
||||
Amidst the bickering, newcomers to this fragrant world want to understand what
|
||||
quality means in the context of incense. How do they know that they're buying
|
||||
high quality incense? Where do they find it? How does quality relate to price?
|
||||
The reality is that there are as many answers as there are people, but I hope
|
||||
that I can add some nuance to the conversation, address some misconceptions,
|
||||
and, if I'm lucky, provide a little clarity on the subject.
|
||||
|
||||
[](/img/flora_botanical_incense_abundance_oud/agarwood_skins_vs_white_kinam_bead_waste.webp)
|
||||
|
||||
## What is quality, anyway?
|
||||
|
||||
In order to talk about quality, we first have to come to some agreement as to
|
||||
what the word means. In the Tibetan and Chinese traditions, incense is used not
|
||||
only for fragrance, but also as medicine. Therefore, a stick made with a
|
||||
preponderance of very fresh and pungent material prized for its medicinal
|
||||
properties might be considered high quality, although to you and I it may smell
|
||||
like burning twigs with a hint of sulfur. If, like me, you understand that
|
||||
there is approximately zero compelling evidence that incense is of any
|
||||
medicinal value whatsoever, you will likely disagree with this assessment. I
|
||||
have also heard that consumers of Chinese incense value incense that uses few
|
||||
to no concentrates, whether natural extracts or synthetics. To this market, a
|
||||
dry and subtle sandalwood stick might be perceived as being of high quality,
|
||||
whereas consumers of Indian incense—today almost entirely a product of
|
||||
perfumery—may find it utterly underwhelming compared to their usual nag champa,
|
||||
powerful enough to fragrance a large open space during puja. In the west, there
|
||||
is significant consumer demand for natural products[^2], so incense marketed as
|
||||
"natural" will be perceived as being higher quality.
|
||||
|
||||
It's plain to see that quality means different things to different people. But
|
||||
I wonder if it might be simply described as the degree to which something meets
|
||||
the *multiple* goals or needs of the person assessing its quality. As we'll see,
|
||||
enjoyment comes from many places. I strongly believe that, where it relates to
|
||||
consumables, the hang-up on raw sensory pleasure as the stick by which quality
|
||||
is measured needs to be put to bed. Was the week in which you had the most
|
||||
orgasms or ate the tastiest meals the highest quality week in your life?
|
||||
Perhaps it was, but I think that's unlikely.
|
||||
|
||||
I rarely drink wine, but even I have become radically bored with hearing
|
||||
countless recitations of the time a handful of sommeliers roundly embarrassed
|
||||
themselves by preferring a glass of supermarket wine over the competing *Chateau
|
||||
Au Frou-Frou 1995*. Beyond the tiresome repetition, this sneering retort to
|
||||
those who enjoy wines priced beyond a box of Barefoot belies a fundamental
|
||||
misunderstanding of why people buy expensive wines in the first place. Sure,
|
||||
posturing happens, but an enthusiast will snag that $400 grand cru not because
|
||||
they want to show off on Instagram, nor because they necessarily think it will
|
||||
taste better than a cheap bottle, but because they want to know what the output
|
||||
of the estate tastes like. They want the 2008 vintage because they hear that
|
||||
the humidity that year had a unique effect on the grapes. They aren't familiar
|
||||
with the profile of César grapes, and would like to try a single-varietal
|
||||
bottle using them. They like the floral notes that biodynamic wine-making
|
||||
methods offer. And sure, if you put a glass of bottom-shelf Chardonnay in their
|
||||
left hand and a glass of "the good stuff" in the right, the left hand may well
|
||||
meet the lips more often, but that's beside the point.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/FOH-Work-Event.jpg)
|
||||
|
||||
In another life, I worked at an up-market cocktail lounge where we stocked
|
||||
high-end spirits. One whiskey sold for $7,000[^3] a bottle. Pours of another
|
||||
went for over $400 apiece[^4]. But the fifteen year old Pappy Van Winkle in the
|
||||
middle of the right-hand side of those bar-shelves was just as good as that
|
||||
$7,000 bottle. Although it was over $200 less per glass than our most expensive
|
||||
pour, most people agreed that it tasted better. This was irrelevant; people
|
||||
paid the extra money because those more expensive whiskeys were close to
|
||||
impossible to get. By tasting them, you were tasting history—a precious liquid
|
||||
that would, sooner or later, be lost to time. To the guests buying these
|
||||
whiskeys, they were not of the utmost quality because they tasted the best.
|
||||
They were of the utmost quality because they met desires beyond the want of a
|
||||
tasty drink: a desire for knowledge, for experience, for a connection with the
|
||||
past. All the same, after a long shift, a bartender I worked with once quipped:
|
||||
"At the end of the night, I'm not looking for nuance," as he took a shot of
|
||||
bottom-shelf whiskey and cracked open a can of lager.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/In-The-Kitchen.jpg)
|
||||
|
||||
## On snobbery
|
||||
|
||||
If we take a closer look at practices that are often dismissed as snobbery, we
|
||||
soon realize that, even if they are weaponized as rituals of the upper class,
|
||||
they nonetheless have working class origins.
|
||||
|
||||
Complex lists of flavor notes are a best-effort by those who produce a
|
||||
wine/spirit/coffee/what-have-you to describe the product of their labor to
|
||||
people who haven't tried it. Sticking one's nose into a Glencairn glass and
|
||||
breathing in through the mouth will keep alcohol from instantly nose-blinding a
|
||||
bartender-in-training, one who will be smelling hundreds of spirits over the
|
||||
coming weeks. The precise weighing of coffee beans packed into a portafilter
|
||||
provides consistency of flavor from drink to drink throughout a busy service.
|
||||
Even the haughtiest bottle of champagne has a team of *workers* behind it who,
|
||||
in pursuit of excellence, devise practices that will later be derided as
|
||||
pretensions because of their association with the class of people that can
|
||||
afford the product.
|
||||
|
||||
Working people are the taste-makers. They always have been. They create
|
||||
excellence every day, categorize it, describe it, devise the best ways to
|
||||
discern and appreciate the differences between one product and another. Working
|
||||
people are best positioned to take on these tasks. Their deep familiarity with
|
||||
what they produce is a far-cry from the shallow collection and consumption that
|
||||
has been rendered into a hobby by the affluent.
|
||||
|
||||
## Does price matter?
|
||||
|
||||
So, with all that said, what exactly does *price* tell us? Obviously it will
|
||||
give us a clue as to how the brand is positioned in the market but, uniquely to
|
||||
incense, pricing can give us a very good clue as to the ingredients used in a
|
||||
stick. Sure, there are differently priced coffee beans, but the sheer breadth
|
||||
of the range of prices for incense ingredients is perhaps paralleled only by
|
||||
natural perfumery.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/a-lot-of-coffee-beans.JPG)
|
||||
|
||||
Scarce does not begin to describe the dearth of highly fragrant and resinated
|
||||
agarwood in today's world. Oman's prized frankincense is so terribly
|
||||
over-exploited that the Omani government has all but taken over the industry in
|
||||
the country, only allowing a small amount of the precious resin to be released
|
||||
each year—at a premium price. Woe betide you if you are caught so much as
|
||||
looking at a sandalwood tree the wrong way in India these days, and as hard as
|
||||
they try, Indonesia and Australia are not yet able to match the quantity or
|
||||
quality of output by India's sandalwood industry in its heyday. Typically, as
|
||||
the price increases for East Asian incense, so too does the quality and/or
|
||||
quantity of these precious aromatics, and any incongruence here would quickly
|
||||
be noticed by enthusiasts. From
|
||||
[pennies per gram for eucalyptus leaf](https://web.archive.org/web/20250906194216/https://scents-of-earth.com/eucalyptus-leaf-eucalyptus-globulus-india/)
|
||||
to well beyond the price of gold for
|
||||
[top-end agarwood](https://web.archive.org/web/20250428184307/https://www.ensaroud.com/product/white-kinam/)
|
||||
, the range is extreme. While modern lifestyle brands market low-to-mid-range
|
||||
sticks for obscene prices, whole-botanical based East Asian incense from well
|
||||
known incense houses are all but forced align their pricing with the quality of
|
||||
the ingredients. When your incense uses whole-plant materials, the best-grown,
|
||||
freshest, rarest, and most fragrant plants come at a significant price premium
|
||||
due to their rarity and the labor involved in cultivating them.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/sifting-ground-sage-for-incense-sticks_copy.webp)
|
||||
|
||||
For Indian style incense this situation is a little different. While higher
|
||||
prices might reflect the use of expensive natural oils as opposed to aroma
|
||||
chemicals, unfortunately, and as far as I know, incense using top-end natural
|
||||
materials is all but extinct in Indian brands. I am sure there are small
|
||||
artisans making premium incense in India, but it seems to be mostly smaller
|
||||
western operations such as [Jeomra's Räucherwelt](https://raeucherwelt.de/) that offer Indian-style
|
||||
incense made with premium natural materials. More-so than in Japanese incense,
|
||||
however, pricing seems to indicate effort for Indian sticks. As opposed to
|
||||
Japan's extruded sticks, it isn't at all uncommon to find agarbatti that are
|
||||
hand-rolled. It's debatable as to what difference this makes to the final
|
||||
fragrance. Some contend that the density of machine-extruded sticks negatively
|
||||
impacts the fragrance. I have also heard that machine extrusion limits the
|
||||
ingredients and composition of the incense dough. Regardless, it is inevitable
|
||||
that, in very cheap commodity products, corners will be cut. Some of these
|
||||
missing corners will surely affect fragrance. And of course, individual
|
||||
artisans will not have the benefit of industrial equipment or processes, and
|
||||
will thus charge more for their incense as it takes significantly more time to
|
||||
make.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/extruded-incense-sticks.webp)
|
||||
|
||||
What do all of these pricing details say about quality, then? Little.
|
||||
|
||||
While price can tell us about market positioning, ingredients, and effort, this
|
||||
may not mean much to you or I when it comes to our own ideas of quality. As I
|
||||
look in my incense-drawer I see a $12 box of vanilla Morning Star sticks from
|
||||
Nippon Kodo beside a tube of Brunei agarwood sticks from Yi-Xin Craft Incense:
|
||||
$50 for two grams. I've been burning the former since I was 15 years old and
|
||||
first discovered Japanese incense, a vast improvement over the cheap dipped
|
||||
sticks available to me previously. It's one of the few things capable of
|
||||
soothing sadness or anxiety in me, and I've been relying on it for this purpose
|
||||
ever since that first encounter. On the other hand, the Brunei represents an
|
||||
opportunity to sample the work of a small artisan. It's a chance to experience
|
||||
an extremely rare natural material and understand how the agarwood from Brunei
|
||||
differs from that found in Cambodia. I also very much enjoy the fragrance
|
||||
before bed. I wouldn't dare say that one of these sticks is better than the
|
||||
other. They are both competently prepared, low on off-notes, and offer a
|
||||
pleasing (to me) aroma. If the prices were exchanged tomorrow, I'd still buy
|
||||
both.
|
||||
|
||||
## Have Americans been bamboozled?
|
||||
|
||||
There seems to be a stereotype that American incense enthusiasts have been
|
||||
bamboozled into preferring quiet Japanese incense over cheaper, more fragrant
|
||||
Indian-style sticks by flashy marketing, product positioning, and fancy
|
||||
packaging. As an incense enthusiast and half-American, I must object on this
|
||||
point. Stick incense in this country is largely associated with stoner culture.
|
||||
It's seen as a cheap, smoky way to disguise the smell of burning cannabis
|
||||
(which is still illegal in many states). The incense most commonly available is
|
||||
typically bottom-of-the-barrel commodity fare with all of the burning oil,
|
||||
sawdust, and wood glue off-notes that it entails. Better Indian sticks, if
|
||||
available, are very strong for our modern, hermetically-sealed homes. And in
|
||||
the rooms of my small Chicago apartment, the powerful fragrances of Indian
|
||||
incense can quickly begin to feel like suffering for my sensitive nose, even if
|
||||
I might otherwise like them. There is also history at play. According to
|
||||
Michael Cousineau in *The Fragrant Path: A Guide to the Art of Incense,*
|
||||
Shoyeido introduced Japanese incense to the U.S.A. when the company made its
|
||||
debut in the 1893 Chicago World's Fair, where the "fragrance of incense wafting
|
||||
from the bazaar filled the Japanese Pavilion." For the event, Japan had far
|
||||
outspent any other foreign countries in constructing Phoenix Hall, a permanent
|
||||
and stunning example of Japanese architecture modeled on an ancient Buddhist
|
||||
temple. The response to the exhibit was such that Shoyeido developed the
|
||||
incense cone, a shape more likely to survive the long journey at sea, and
|
||||
demand soon became greater than the company's production capacity.
|
||||
|
||||
[.")](/img/thoughts-on-incense-quality-price-and-snobbery/hooden-phoenix-hall.webp)
|
||||
|
||||
By describing the rationale for any perceived preference for Japanese incense
|
||||
in the U.S.A., I don't mean to make any sort of value statement with respect to
|
||||
the incense of either India or Japan. But I will say that, for my needs,
|
||||
quality is largely to be found in Japanese sticks. That said, the Indian
|
||||
incense sent over by [Irene](https://blog.rauchfahne.de/en/) has been something
|
||||
of a revelation for me: well-balanced fragrances from well-made sticks that
|
||||
(mostly) speak up without becoming overpowering. I have been enjoying these
|
||||
sticks tremendously and I will almost certainly buy more. Nonetheless, they
|
||||
fulfill a different role than my usual choices. Japanese sticks give me the
|
||||
opportunity to experience genuine high-end botanicals in a way that Indian
|
||||
incense rarely does. And, at least so far, no Indian sticks have come to soothe
|
||||
my soul like those boring, beige little vanilla sticks from Nippon
|
||||
Kodo—although I'm sure they may, given time.
|
||||
|
||||
## Is natural better?
|
||||
|
||||
Perhaps, depending on your goals, but not inherently. People have very strong
|
||||
opinions on the topic of natural botanicals versus synthetic aroma chemicals,
|
||||
but here's the truth: when it comes to health, natural botanicals are no better
|
||||
tested for burning than synthetics. If anything, the opposite is true. I also
|
||||
suspect that most people who get headaches from strong incense are reacting to
|
||||
the strength of fragrance, not its constituent ingredients. After all, many
|
||||
aroma chemicals are identical to the compounds found in nature.
|
||||
|
||||
Another harsh truth is that consumers have no way of knowing whether the
|
||||
incense they burn is natural or not. Very few companies publish ingredients.
|
||||
Fewer publish all of them. There are also a wide variety of fragrances that
|
||||
you're simply not going to get without synthetics. Violet notes are practically
|
||||
never naturally derived, and whether or not synthetics are used, you're
|
||||
certainly not going to be getting any real kyara in your $14.99 box of
|
||||
[Tennendo Kyara](https://kikohincense.com/products/tennendo-kyara-incense) (as
|
||||
good as it is). The fact is that any respectable incense collection is going to
|
||||
contain a mixture of aroma chemicals and natural botanicals, so it's worth
|
||||
getting over this particular hangup early on.
|
||||
|
||||
That said, if you want to understand what, for instance, Australian sandalwood
|
||||
smells like in incense, you'll likely reach for a stick that at least
|
||||
prominently features the wood itself. Likewise, faux-and-low-agarwood sticks
|
||||
scratch an entirely different itch than those that make liberal use of high-end
|
||||
wood. They're both nice for different reasons.
|
||||
|
||||
[](/img/thoughts-on-incense-quality-price-and-snobbery/tennendo-kyara-incense-stick-macro-shot.webp)
|
||||
|
||||
## Putting it all together
|
||||
|
||||
I recognize that I haven't offered any concrete answers here, but I hope that I
|
||||
might have been able to provide a little context for the discussion around
|
||||
quality in incense. We know that price indicates, at very least, market
|
||||
positioning and, so long as we're not dealing with a lifestyle brand, it also
|
||||
gives us a clue as to the ingredients and effort that went into an incense,
|
||||
although to what degree depends on its origin. What represents quality to us
|
||||
depends on our preferences and goals. Are we interested in experiencing and
|
||||
understanding the fragrances of natural materials? Do we want to analyze the
|
||||
work of our favorite Indian perfumer? Are we looking for something that reduces
|
||||
anxiety? Do we simply want to perfume a space as efficiently as possible?
|
||||
Physical, emotional, intellectual, and yes, sometimes social desires will all
|
||||
contribute to our degree of satisfaction and perception of quality, regardless
|
||||
as to whether an incense is predominantly natural or not.
|
||||
|
||||
[^1]: I would like to point out that Japanese incense companies do close to no
|
||||
marketing at all here in the U.S.A., these days and what does occur is
|
||||
[not especially compelling](https://www.instagram.com/shoyeido_incense_usa/).
|
||||
|
||||
[^2]: Which often conflicts with your average consumer's exposure to highly
|
||||
concentrated synthetic fragrances and the expectations that this exposure
|
||||
implants in them when it comes to incense.
|
||||
|
||||
[^3]: For the curious, it was a Pappy 17 with the wax-dipped bottle.
|
||||
|
||||
[^4]: This was years ago; I dread to think what they'd go for now.
|
||||
@@ -4,6 +4,7 @@ description: QOwnNotes is a terminally underrated native markdown note-taking ap
|
||||
synopsis: QOwnNotes is a terminally underrated native markdown note-taking app, despite the fact that you'll rarely see it mentioned on the internet.
|
||||
date: 2023-08-09
|
||||
tags:
|
||||
- Enshittification
|
||||
- FOSS/FLOSS
|
||||
- Underrated Apps
|
||||
imageURL: /img/qownnotes.webp
|
||||
@@ -13,7 +14,7 @@ mastodon_id: "110862579682916657"
|
||||
[](/img/qownnotes.webp)
|
||||
|
||||
## What makes a good note taking app?
|
||||
After its author decided to make future versions closed-source, I found myself searching for a replacement for the excellent [Notable](https://notable.app/). Unfortunately, while note-taking applications are a dime a dozen, they're also common ground for the [Notable](https://notable.app/) / [SimpleNote](https://simplenote.com/) style FLOSS bait-and-switch: developers release an outstanding note-taking app, only to make future versions closed-source, or make it inordinately difficult to properly and fully make use of the software without paying for a hosted service. Victim to the former, I set out to find a note-taking app that I felt could not only be trusted to operate in the spirit of FLOSS philosophy, but also met some key criteria:
|
||||
After its author decided to make future versions closed-source, I found myself searching for a replacement for the excellent [Notable](https://notable.app/). Unfortunately, while note-taking applications are a dime a dozen, they're also common ground for the [Notable](https://notable.app/) / [Standard Notes](https://standardnotes.com/) style FLOSS bait-and-switch: developers release an outstanding note-taking app, only to make future versions closed-source, or make it inordinately difficult to properly and fully make use of the software without paying for a hosted service. Victim to the former, I set out to find a note-taking app that I felt could not only be trusted to operate in the spirit of FLOSS philosophy, but also met some key criteria:
|
||||
|
||||
1. Native Code
|
||||
|
||||
|
||||
45
content/blog/vegan-ranch-dressing.md
Normal file
45
content/blog/vegan-ranch-dressing.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Making a Decent Vegan Ranch Dressing
|
||||
description: Veganizing the corpulegenic condiment at the pinnacle of American sauces.
|
||||
synopsis: Veganizing the corpulegenic condiment at the pinnacle of American sauces.
|
||||
date: 2026-05-25
|
||||
tags:
|
||||
- Vegan Cooking
|
||||
- Food and Beverage
|
||||
imageURL: /img/ranch/vegan-ranch-dressing.webp
|
||||
imageAlt: My hand holding a bottle of vegan ranch dressing labeled with blue tape.
|
||||
mastodon_id: "116638231076499180"
|
||||
---
|
||||
If, like me, you have ever lived in the U.S.A., and if, like me, you are of a sufficiently distinguished BMI so as to rank highly the invention of comestibles, you will agree[^1] that Ranch (enPR: rāyŭnch) dressing is one of the great American inventions—right up there with the cotton gin, surgical anesthesia, and the modern assembly line.
|
||||
|
||||
[](/img/ranch/vegan-ranch-dressing.webp)
|
||||
|
||||
For those unfamiliar with the condiment, Ranch dressing is a tangy, herbaceous, and unsettlingly white sauce of moderate viscosity intended for use as a salad dressing. In practice, it is also used as a dip for everything from fresh vegetables to fried foods, and a general purpose condiment that you might find in or on anything from pizzas to sandwiches. These days, Ranch dressing is essentially a cool, green-flecked, less-sweet alternative to ketchup, only limited in its uses by your imagination. The flavor is peculiar. It's creamy, tangy, savory, and herbal all at once in a way that is all its own. Is it any good? Here's what Dan Howell of the internet's most famous gaslighting gay couple had to say about it:
|
||||
|
||||
<figure><div style="position: relative; padding-top: 56.25%;"><iframe title="Dan on Ranch dressing, from @rosegoldphil on TikTok" width="100%" height="100%" src="https://makertube.net/videos/embed/owfr1z6dBtLTWkgNYKoHFa" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms" style="position: absolute; inset: 0px;"></iframe></div><figcaption>They could hide their relationship for sixteen years, but nothing could obscure Dan’s love of Ranch dressing.</figcaption></figure>
|
||||
|
||||
I've been vegan for some twelve years now, and store-bought vegan ranch dressing is unfortunately expensive and rarely scratches the itch for me anyway. Dry Ranch seasoning mixes usually contain dairy, so they're out of the question. Surprisingly, even if this were an affordable avenue, not a single vegan restaurant in the city of Chicago seems to have a decent Ranch dressing either, so I set out to see whether the carnists might have a recipe that I could adapt. I landed on [a homemade Ranch seasoning mix recipe from The Pioneer Woman](https://www.thepioneerwoman.com/food-cooking/recipes/a91701/homemade-ranch-seasoning-mix/). The recipe helpfully includes instructions for making a dressing from the mix, which I also adapted. Making it is easy. Simply whisk together the following dry ingredients:
|
||||
|
||||
|Qty|Unit|Ingredient|
|
||||
|--|--|--|
|
||||
|1|Tbsp|Dried Parsley|
|
||||
|2|tsp|Dried Dill|
|
||||
|1|tsp|Dried Chives|
|
||||
|1|Tbsp|Garlic Powder|
|
||||
|1/2|tsp|Ground Black Pepper|
|
||||
|n/a|n/a|MSG to Taste|
|
||||
|1|Tbsp|Onion Powder|
|
||||
|n/a|n/a|Salt to Taste|
|
||||
|
||||
then whisk the mixture with these wet ingredients until well combined:
|
||||
|
||||
|Qty|Unit|Ingredient|
|
||||
|--|--|--|
|
||||
|1/4|cup|Lemon Juice|
|
||||
|1|cup|Vegan Mayonnaise|
|
||||
|2/3|cup|Vegan Sour Cream|
|
||||
|3/4|cup|Water|
|
||||
|
||||
Now store your homemade vegan Ranch dressing in the fridge, and use it within five days. I'm sure this won't present a challenge.
|
||||
|
||||
[^1]: By continuing readers agree to indemnify, defend, and hold the author harmless from any and all claims arising from or related to neck sprains and other injuries sustained through vigorous nodding in agreement.
|
||||
70
content/blog/what-would-you-do-if-you-didnt-have-to-work.md
Normal file
70
content/blog/what-would-you-do-if-you-didnt-have-to-work.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "Re: What Would You Do if You Didn't Have to Work?"
|
||||
description: "Oh the lives we could lead without capitalism in the way."
|
||||
date: 2026-05-18
|
||||
tags:
|
||||
- Life
|
||||
- Quick Thoughts
|
||||
synopsis: "Oh the lives we could lead without capitalism in the way."
|
||||
imageURL: /img/what-would-you-do-if-you-didnt-have-to-work/ducc.webp
|
||||
imageAlt: "A close up shot of a well fed mallard with a shiny green head bobbing about in the Chicago River."
|
||||
mastodon_id: "116596651947015321"
|
||||
---
|
||||
|
||||
In response to [this recent post](https://gary.onl/what-would-you-do-if-you-didnt-have-to-work/) by [gary online](https://gary.onl/): I am *absolutely* not someone who derives their worth or identity by what they do
|
||||
to earn a crust. If I didn't have to work, I'd lead a richness of life that
|
||||
would put to shame both the wastrels[^1] of ~~inherited~~ *stolen* means who live by
|
||||
the labor of others, and the wealthy denizens of the c-suite who earn their
|
||||
exorbitant salaries by becoming professional whip-crackers for the former. Here
|
||||
are a few things I'd like to do.
|
||||
|
||||
[](/img/what-would-you-do-if-you-didnt-have-to-work/ducc.webp)
|
||||
|
||||
- Learn
|
||||
[Launy Grøndahl's Trombone Concerto](https://www.youtube.com/watch?v=AY8VJ6n83Qs&list=RDAY8VJ6n83Qs&start_radio=1)
|
||||
so well I could play it in the middle of a battlefield.
|
||||
- Finally get around to learning tenor clef in order to be able to do so.
|
||||
- Cook for people: great big trays of vegan mac and cheese, spaghetti squash
|
||||
with all sorts of sauces, coconut curries, baked beans, cornbread, teriyaki,
|
||||
pizzas, burgers in homemade pretzel rolls, foccacia with olive oil and
|
||||
balsamic vinegar for dipping, crunchy palmiers, millionaire's shortbread, tablet,
|
||||
dosa, sambar, kale salads with pickled vegetables and crispy tofu, orange
|
||||
faux chicken, seitan deli meats and country-fried steaks, biscuits and
|
||||
"sausage" gravy, and more.
|
||||
- Learn to make stovies, vegan haggis, peshwari naan, and sourdough bread, and
|
||||
other delicious things.
|
||||
- Get really good at programming.
|
||||
- Learn C++ so that I can contribute code to open source projects like
|
||||
[Scribus](https://www.scribus.net/), [Inkscape](https://inkscape.org/), and
|
||||
[KDE](https://kde.org/).
|
||||
- Focus on my health and fitness.
|
||||
- Go to college and/or university, something I never had the chance to do, and
|
||||
learn about psychology, computer science, music, mathematics, statistics,
|
||||
design, and electrical engineering.
|
||||
- Take courses for the fun of learning something new.
|
||||
- Write more.
|
||||
- Spend more time with my partner.
|
||||
- Spend more time socializing.
|
||||
- Go on more walks.
|
||||
- Feed peas to the ducks on the river more days than not.
|
||||
- Make more incense.
|
||||
- Get really good at making incense.
|
||||
- Try my hand at enfleurage
|
||||
- Learn perfumery.
|
||||
- Take a first-aid course.
|
||||
- Design signage and informational material for public benefit.
|
||||
- Get back into welding.
|
||||
- Attempt to make soap.
|
||||
- Lay in the grass on sunny days drinking shandy and eating vegan cheese and
|
||||
crackers.
|
||||
- Get my Spanish into shape.
|
||||
- Learn German.
|
||||
- Learn more Scots. Maybe write something in it.
|
||||
- Write music.
|
||||
- Wile away afternoons in cafés drinking tea.
|
||||
- Search for resins and local aromatics.
|
||||
- Take the bus to different towns just to walk around.
|
||||
- Read more books.
|
||||
- Not worry about what time it is.
|
||||
|
||||
[^1]: You ever meet one of those modern Bertie Wooster types? It's all bottle service, trips to Dubai, and overpriced yet under-seasoned lunches. Wealth truly is wasted on the wealthy.
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Woo-Woo Incense Description Generator and Other Site Updates"
|
||||
description: "New on this website: a handy tool to generate woo, comments, and weather."
|
||||
date: 2026-02-05
|
||||
tags:
|
||||
- Site Updates
|
||||
imageURL: /img/woo-woo-incense-description-generator-and-other-updates/woo-woo-incense-description-generator_copy.webp
|
||||
imageAlt: "A screenshot of the woo generator page. Swirling rainbow colors form the background."
|
||||
synopsis: "New on this website: a handy tool to generate woo, comments, and weather."
|
||||
mastodon_id: "116021705122518903"
|
||||
---
|
||||
## Woo-woo incense description generator
|
||||
Whether they are spiritually inclined or mere earth-bound fragrance-heads, all sorts of people are attracted to the fragrant world of incense. It's no surprise, then, that the language people use to describe the incense they make can get pretty colorful. If you've ever wished you could write so… *interestingly* about incense, my brand new [Woo-woo incense description generator](/special/woo-woo-incense-description-generator/) is just the ticket! Occupying the "special" section of [my sitemap](/sitemap/) along-side the flying toasters, with but one click of a button it spits out a fresh serving of woo, complete with ingredients and "medicinal effects."[^1] Why not [give it a try?](/special/woo-woo-incense-description-generator/)
|
||||
|
||||
[](/img/woo-woo-incense-description-generator-and-other-updates/woo-woo-incense-description-generator_copy.webp)
|
||||
|
||||
## Woo mode
|
||||
You may have noticed a "site settings" button at the bottom of the page. I set this up after the holidays with a "show weather" toggle to allow visitors who miss the snowflakes to enable them once again. In addition to this, there is now a "woo mode" toggle that allows you to have the psychedelic woo-woo incense description generator background on every page of the site! Both settings save to your browser's local storage, handily retaining the setting between visits for you with no cookies.
|
||||
|
||||
[](/img/woo-woo-incense-description-generator-and-other-updates/site-settings.webp)
|
||||
|
||||
## Guestbook back up
|
||||
For a while, the service that powers my [guestbook](/guestbook/) went down due to [some drama with Azure](https://meadow.cafe/blog/0008-azure-disabled-my-account-trip-to-the-cabin/) and lost some data. Therefore, if you notice that your message is missing, know that I didn't delete it on purpose and feel free to leave another.
|
||||
|
||||
## Comments now available
|
||||
I have, at long last, set up commenting via [Isso](https://isso-comments.de/) on blog posts and, as an unintended side effect, [quizzes](/quizzes), which I kind of like so I left it (there's only one quiz at the minute anyway). I wanted to do this ages ago, but I couldn't get Isso working on my [YunoHost](https://yunohost.org/index.en.html) server until recently. YunoHost is fantastic, but support can be scarce as hen's teeth, so we'll see how things go. Hopefully, it'll be rock solid and serve me well for years to come. Hopefully people will leave polite, thoughtful comments. Hopefully, spam is thin on the ground. Time will tell all!
|
||||
|
||||
[^1]: For the love of all that is good in this world do not take these seriously.
|
||||
@@ -1,20 +1,18 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Blogroll
|
||||
tags:
|
||||
- blogroll
|
||||
- tagList
|
||||
structuredData: none
|
||||
h1: Blogroll
|
||||
includeTOC: true
|
||||
---
|
||||
<h1>Blogroll</h1>
|
||||
<p class="nodropcap">Here are some blogs and independent news outlets I like to read. You can click the RSS icon next to each to subscribe using <a href="../about-feeds/">your newsreader</a>, or import all of them at once by downloading and importing this convenient <a href="./nathanUpchurchBlogroll.opml" download>.opml file</a>.</p>
|
||||
<p class="page-block">
|
||||
<em>Skip to category:
|
||||
{% for category in blogroll.categories %}
|
||||
<a href="#{{ category.name | slugify }}">{{ category.name }}</a>{% if loop.last %}.{% else %},{% endif %}
|
||||
{% endfor %}
|
||||
</em></p>
|
||||
<p class="nodropcap">Here are some blogs and independent news outlets I like to read. You can click the RSS icon next to each to subscribe using <a href="../about-feeds/">your newsreader</a>, or import all of them at once by downloading and importing this convenient <a href="./nathanUpchurchBlogroll.opml" download>.opml file</a>.</p>
|
||||
|
||||
{% for category in blogroll.categories %}
|
||||
<section class="blogroll">
|
||||
<h2 id="{{ category.name | slugify }}">{{ category.name }}:<a class="header-anchor" href="#{{ category.name | slugify }}">#</a></h2>
|
||||
{% for category in blogroll.categories %}
|
||||
<section class="blogroll">
|
||||
<h2 id="{{ category.name | slugify }}">{{ category.name }}<a class="header-anchor" href="#{{ category.name | slugify }}">#</a></h2>
|
||||
{% for blog in category.blogs %}
|
||||
<div class="blogroll-category-group">
|
||||
<a href="{{ blog.url }}"><h3>{{ blog.title }}</h3></a>
|
||||
@@ -33,4 +31,4 @@ structuredData: none
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -2,13 +2,96 @@
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Changelog
|
||||
structuredData: none
|
||||
h1: Changelog
|
||||
includeTOC: true
|
||||
---
|
||||
# Changelog
|
||||
## 2026
|
||||
### May
|
||||
* 2026-05-26
|
||||
* Updated [blogroll](/blogroll).
|
||||
* Updated [/links](/links).
|
||||
* 2026-05-15
|
||||
* Updated [/links](/links).
|
||||
* 2026-05-12
|
||||
* Implement pet bird in settings.
|
||||
* Refactor settings implementation. As a result:
|
||||
* Weather now no longer active by default for users with JavaScript disabled.
|
||||
* Settings check-boxes are disabled when the site has a hard setting default which ignores user preferences (such as in the case of the [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator/) page, which should always have woo-mode enabled).
|
||||
* 2026-05-03
|
||||
* Updated [/incense](/incense).
|
||||
|
||||
### April
|
||||
* 2026-04-27
|
||||
* Improved the appearance of the site settings modal and backdrop, including a nice fade-in effect.
|
||||
* 2026-04-26
|
||||
* Updated [/incense](/incense).
|
||||
* Updated weather to cherry blossoms for spring.
|
||||
* 2026-04-23
|
||||
* Updated [/referrals](/referrals).
|
||||
* Updated [/links](/links).
|
||||
* Updated [/incense](/incense).
|
||||
* 2026-04-20
|
||||
* Updated [/links](/links).
|
||||
* 2026-04-17
|
||||
* Added tables of contents to list pages where it makes sense.
|
||||
* Refactored CSS so that unnecessary styles are not loaded on every page.
|
||||
* 2026-04-16
|
||||
* Updated [/incense](/incense).
|
||||
* Some type styling changes.
|
||||
* 2026-04-15
|
||||
* Updated [/incense](/incense).
|
||||
* Updated [/not-amazon](/not-amazon).
|
||||
* 2026-04-07
|
||||
* Updated [/wish](/wish).
|
||||
|
||||
### March
|
||||
* 2026-03-16
|
||||
* Updated [/incense](/incense).
|
||||
* Updated [/links](/links).
|
||||
* Updated [/not-amazon](/not-amazon).
|
||||
* 2026-03-12
|
||||
* Added [/not-amazon](/not-amazon) page.
|
||||
* 2026-03-11
|
||||
* Implemented [search](/search).
|
||||
* 2026-03-06
|
||||
* Updated [/incense](/incense).
|
||||
* 2026-03-05
|
||||
* Updated [/wish](/wish) and [/incense](/incense).
|
||||
|
||||
### February
|
||||
* 2026-02-07
|
||||
* Updated [/wish](/wish).
|
||||
* 2026-02-04
|
||||
* Added post comments via [Isso](https://isso-comments.de/). Please don't make me regret this.
|
||||
* Add [Mochi](https://mochi.meadow.cafe/) privacy respecting analytics.
|
||||
* Implement togglable site-wide Woo-Mode™ in site settings.
|
||||
* 2026-02-01
|
||||
* Added [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator).
|
||||
|
||||
### January
|
||||
* 2026-01-21
|
||||
* Updated [blogroll](/blogroll).
|
||||
* 2026-01-16
|
||||
* Updated [/wish](/wish).
|
||||
* 2026-01-15
|
||||
* Embedded lighthouse score on [/about/colophon](/about/colophon).
|
||||
* 2026-01-13
|
||||
* Updated [/wish](/wish).
|
||||
* 2026-01-11
|
||||
* Added markdown parsing to [status](/status) entries.
|
||||
* 2026-01-09
|
||||
* Updated [/wish](/wish).
|
||||
* Updated [/links](/links).
|
||||
* 2026-01-07
|
||||
* Added [status](/status) function.
|
||||
* 2026-01-01
|
||||
* Added [/slashes](/slashes).
|
||||
* Updated [/sitemap](/sitemap).
|
||||
* Organized site source files.
|
||||
* Added estimated read time to blog posts with [a neat plugin](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-emoji-readtime).
|
||||
|
||||
## 2025
|
||||
### December
|
||||
* 2025-12-16
|
||||
* Updated [/links](/links).
|
||||
* 2025-12-08
|
||||
@@ -17,6 +100,8 @@ structuredData: none
|
||||
* Added [/ai](/ai) [slashpage](https://slashpages.net/) a la [the /ai 'manifesto'](https://www.bydamo.la/p/ai-manifesto).
|
||||
* Added [/blank](/blank) [slashpage](https://slashpages.net/).
|
||||
* Added [/referrals](/referrals) [slashpage](https://slashpages.net/).
|
||||
|
||||
### November
|
||||
* 2025-11-28
|
||||
* Added styling for [guestbook](/guestbook) replies now that [the reply feature](https://codeberg.org/meadowingc/guestbooks/issues/25) is live.
|
||||
* The [main RSS feed](/feed/feed.xml) now includes [now](/now) entries.
|
||||
@@ -29,6 +114,8 @@ structuredData: none
|
||||
* Updated [/incense](/incense).
|
||||
* Added snow / weather, and site settings button and dialog.
|
||||
* Added [/links](/links).
|
||||
|
||||
### October
|
||||
* 2025-10-20
|
||||
* Added [Moist Poetry Journal](https://moistpoetryjournal.com) to the [blogroll](/blogroll).
|
||||
* Removed some less active and/or abandoned blogs from the [blogroll](/blogroll).
|
||||
@@ -42,10 +129,14 @@ structuredData: none
|
||||
* Created [/incense](/incense).
|
||||
* Added "not by AI" badge.
|
||||
* Updated [/sitemap](/sitemap).
|
||||
|
||||
### August
|
||||
* 2025-08-22
|
||||
* Updated [/wish](/wish).
|
||||
* 2025-08-14
|
||||
* Implemented a [guestbook](/guestbook/).
|
||||
|
||||
### July
|
||||
* 2025-07-29
|
||||
* Added [The 74](https://www.the74million.org/) to the [blogroll](/blogroll).
|
||||
* 2025-07-14
|
||||
@@ -59,6 +150,8 @@ structuredData: none
|
||||
* Added [Toxel](https://www.toxel.com/) to the [blogroll](/blogroll).
|
||||
* 2025-07-02
|
||||
* Added [A Tea Addict's Journal](https://marshaln.com), [Bear Blog Discover](https://bearblog.dev/discover/), [Essence of Tea Blog](https://essenceoftea.com/blogs/blog), [Tea DB](https://teadb.org/), and [white2tea](https://white2tea.com/blogs/blog) to the [blogroll](/blogroll).
|
||||
|
||||
### June
|
||||
* 2025-06-26
|
||||
* Added [Justine the Incenseur](https://justinetheincenseur.substack.com) to the [blogroll](/blogroll).
|
||||
* 2025-06-24
|
||||
@@ -67,6 +160,8 @@ structuredData: none
|
||||
* Added [Freethought Blogs](https://freethoughtblogs.com/) and [Cwyn's Death by Tea](https://deathbytea.blogspot.com/) to the [blogroll](/blogroll).
|
||||
* 2025-06-06
|
||||
* Implement [/now-burning](/now-burning/) and [/once-burned](/once-burned/).
|
||||
|
||||
### April
|
||||
* 2025-04-19
|
||||
* Improve post list image sizing on mobile.
|
||||
* 2025-04-08
|
||||
@@ -75,6 +170,8 @@ structuredData: none
|
||||
* Updated the [colophon](/about/colophon/).
|
||||
* 2025-04-03
|
||||
* Added [Graphic Rage with Aubrey Hirsch](https://aubreyhirsch.substack.com/) and [Usermag](https://www.usermag.co/) to the [blogroll](/blogroll).
|
||||
|
||||
### March
|
||||
* 2025-03-28
|
||||
* Updated header on [/tags/](/tags/).
|
||||
* 2025-03-27
|
||||
@@ -85,6 +182,8 @@ structuredData: none
|
||||
* Removed [Kevin Drum's blog](https://jabberwocking.com/) from the [blogroll](/blogroll) in light of [his passing](https://jabberwocking.com/health-update-100/) on the seventh of March, 2025. Rest in peace, Kevin.
|
||||
* 2025-03-11
|
||||
* Updated [/wish](/wish).
|
||||
|
||||
### February
|
||||
* 2025-02-21
|
||||
* Updated [/wish](/wish) again as my mum bought me some incense sticks for my birthday.
|
||||
* 2025-02-20
|
||||
@@ -106,6 +205,8 @@ structuredData: none
|
||||
* Add "image" meta tag for all pages, using either the image specified for the page / post, or my smiling face as a default.
|
||||
* Fix issue with metadata output on gallery image pages.
|
||||
* Stopped bundling CSS and injecting it into pages as I was sick of 1,000 lines of CSS on *every single page* (My build times are now a third of what they were).
|
||||
|
||||
### January
|
||||
* 2025-01-31
|
||||
* Update the copyright notice in the footer.
|
||||
* 2025-1-29
|
||||
@@ -119,6 +220,9 @@ structuredData: none
|
||||
* Prettier date formatting throughout.
|
||||
* 2025-1-13
|
||||
* Added [Popular Information](https://popular.info/) to the [blogroll](/blogroll).
|
||||
|
||||
## 2024
|
||||
### December
|
||||
* 2024-12-16
|
||||
* Update PeerTube instance on [/me](/me).
|
||||
* 2024-12-15
|
||||
@@ -132,4 +236,3 @@ structuredData: none
|
||||
* Added [Aftermath](https://aftermath.site/) to the [blogroll](/blogroll).
|
||||
* Implemented [/changelog](/changelog) 🎉.
|
||||
* Implemented [/ai](/ai) a la [slashai.page](https://slashai.page/).
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ pagination:
|
||||
size: 1
|
||||
alias: picture
|
||||
layout: layouts/base.njk
|
||||
tags:
|
||||
- galleryImage
|
||||
structuredData: none
|
||||
eleventyComputed:
|
||||
imageURL: "{{ picture.baseUrl }}/{{ picture.filename }}"
|
||||
@@ -11,20 +13,20 @@ eleventyComputed:
|
||||
permalink: "/gallery/{{ picture.containingGallery | slugify }}/{{ picture.filename | slugify }}/"
|
||||
description: "{{ picture.title }} from gallery: {{ picture.containingGallery}}"
|
||||
---
|
||||
<article>
|
||||
<article data-pagefind-body>
|
||||
<h1>{{ picture.title }}</h1>
|
||||
<div class="buttonContainer galleryButtons">
|
||||
{% if picture.previousImage %}
|
||||
<a href="../{{ picture.previousImage | slugify }}">
|
||||
<button type="button">Previous</button>
|
||||
<button type="button">← Previous</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
<a href="/gallery/{{ picture.containingGallery | slugify }}/">
|
||||
<button type="button">Gallery</button>
|
||||
<button type="button">🕮 Gallery</button>
|
||||
</a>
|
||||
{% if picture.nextImage %}
|
||||
<a href="../{{ picture.nextImage | slugify }}">
|
||||
<button type="button">Next</button>
|
||||
<button type="button">Next →</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -4,16 +4,20 @@ pagination:
|
||||
size: 1
|
||||
alias: gallery
|
||||
layout: layouts/base.njk
|
||||
tags: gallery
|
||||
tags:
|
||||
- gallery
|
||||
- galleryImage
|
||||
structuredData: none
|
||||
eleventyExcludeFromCollections: true
|
||||
eleventyComputed:
|
||||
title: "{{ gallery.title }}"
|
||||
permalink: "/gallery/{{ gallery.title | slugify }}/"
|
||||
description: "{{ gallery.description }}"
|
||||
---
|
||||
<h1>{{ gallery.title }}</h1>
|
||||
<p class="page-block nodropcap">{{ gallery.description }}</p>
|
||||
<section class="gallery-images">
|
||||
<div data-pagefind-body>
|
||||
<h1>{{ gallery.title }}</h1>
|
||||
<p class="page-block nodropcap">{{ gallery.description }}</p>
|
||||
<section class="gallery-images">
|
||||
{% for picture in gallery.pictures %}
|
||||
<a href="/gallery/{{ gallery.title | slugify }}/{{ picture.filename | slugify }}/">
|
||||
<wc-card class="gallery-image-container">
|
||||
@@ -21,4 +25,5 @@ eleventyComputed:
|
||||
</wc-card>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
tags:
|
||||
- metadata
|
||||
- postList
|
||||
---
|
||||
<h1>My image galleries.</h1>
|
||||
<p class="page-block nodropcap">
|
||||
Photography trips, memes, and other pictures I thought would be worth sharing.
|
||||
</p>
|
||||
{% include "gallerieslist.njk" %}
|
||||
<div data-pagefind-body>
|
||||
<h1>My image galleries</h1>
|
||||
<p class="page-block nodropcap">
|
||||
Photography trips, memes, and other pictures I thought would be worth sharing.
|
||||
</p>
|
||||
{% include "gallerieslist.njk" %}
|
||||
</div>
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Guestbook
|
||||
structuredData: none
|
||||
tags:
|
||||
- guestbook
|
||||
---
|
||||
<h1>Sign My Guestbook</h1>
|
||||
<!-- Guestbook Script -->
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Incense
|
||||
structuredData: none
|
||||
includeTOC: true
|
||||
h1: "Incense: Writing & Resources"
|
||||
---
|
||||
|
||||
# Incense: Writing & Resources
|
||||
::: info
|
||||
For my writing on incense see [the incense tag page](/tags/incense). Is this page missing something? [Let me know](/me).
|
||||
:::
|
||||
@@ -25,12 +25,15 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
||||
### Resources
|
||||
* [/r/incense posts flaired with "incense making"](https://www.reddit.com/r/Incense/?f=flair_name%3A%22Incense%20Making%22)—For better or worse, the incense subreddit is *the* place to go for incense discussion and advice. I'm working on changing that, but it's slow-going; see the forums / discussion boards section below.
|
||||
* [incensemaking.com](https://incensemaking.com/)—A useful site, particularly for listing many of the aromatics used in incense making. Be careful, however, as not all of the ingredients listed may be suited for [combustible incense](https://en.wikipedia.org/wiki/Incense#Types).
|
||||
* [Jarguna Incense YouTube playlist](https://www.youtube.com/watch?v=ZzPT3nU1j70&list=PLWogy1GQgvfECuf-F3kIrsuiBFXh1ctNr&index=1)
|
||||
* [The Incense Dragon YouTube channel](https://www.youtube.com/c/IncenseDragon)
|
||||
|
||||
## Advanced Incense Making Techniques
|
||||
### Articles
|
||||
* [*Enfleurage an Esoteric and Ancient Art*, Be-en-Foret](https://mermadearts.com/i/enfleurage-an-esoteric-and-ancient-art)
|
||||
* [*Filtering Conifer Resins*, Dave of The World Makes Scents](https://incensemakers.org/d/20-filtering-conifer-resins)
|
||||
* [*Incorporating Soft Resin Into Your Incense Recipe*, Dave of The World Makes Scents](https://incensemakers.org/d/26-incorporating-soft-resin-into-your-incense-recipe)
|
||||
* [*Powder Enfleurage! An Ancient Fragrant Art*, Anya’s Garden Perfumes](https://anyasgarden.com/powder-enfleurage-ancient-fragrant-art-giveaway/)
|
||||
* [*Traditional Processing of Aloeswood*, Dr. Incense](https://dr-incense.com/blogs/dr-incense-blog/traditional-processing-of-aloeswood)
|
||||
* [*Washing Frankincense*, Nathan Upchurch](/blog/washing-frankincense/)
|
||||
|
||||
@@ -39,10 +42,13 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
||||
|
||||
## Writing on Incense and Related Topics
|
||||
### Articles
|
||||
* [A New Incense Bibliography Part 1: History & Art, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-1)
|
||||
* [A New Incense Bibliography Part 2: Worldwide Incense Traditions, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-2)
|
||||
* [*A New Incense Bibliography Part 1*: History & Art, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-1)
|
||||
* [*A New Incense Bibliography Part 2*: Worldwide Incense Traditions, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-2)
|
||||
* [Ancient Chinese kneaded incense recipes translated from Zhou Jiaxuan's *History of Incense* (香乘 / xiāng shèng)](https://web.archive.org/web/20230216230731/https://talesofincense.com/scent-materia/)
|
||||
* [*Bakhour (Turaren Wuta) In Nigeria*, Dr Ruqayya Abba Tofa](https://www.fragrantica.com/news/Bakhour-Turaren-Wuta-In-Nigeria-21456.html)
|
||||
* [*Bakhour (Turaren Wuta) in Nigeria (Part 2)*, Dr Ruqayya Abba Tofa](https://www.fragrantica.com/news/Bakhour-Turaren-Wuta-in-Nigeria-Part-2-21989.html)
|
||||
* [Chinese incense ingredient name translations](https://web.archive.org/web/20230216230731/https://talesofincense.com/scent-materia/)
|
||||
* [*Goose Pear Tent Incense*, Be-en-Foret](https://mermadearts.com/i/chinese-goose-pear-tent-incense)
|
||||
* [*Japanese Incense Types*, Kyarazen](https://www.kyarazen.com/japanese-incense-types-in-modern-day/)
|
||||
* [*Pressed Incense Tablets*, Kyarazen](https://www.kyarazen.com/pressed-incense-tablets/)
|
||||
* [*The Wisdom of Traditional Processing Methods*, Dr. Incense](https://dr-incense.com/blogs/dr-incense-blog/the-wisdom-of-traditional-processing-methods)
|
||||
@@ -93,18 +99,27 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
||||
* [Mothers Goods (Germany)](https://mothersgoods.com)—Herbs, Resins, Woods
|
||||
* [Mountain Rose Herbs (USA)](https://mountainroseherbs.com/)—Extracts, Herbs, Tinctures, Oils, Resins
|
||||
* [New Mountain Merchants (Australia)](https://newmountain.com.au/)—Oils, Woods
|
||||
* [ResinaeBotanica (UK)](https://www.etsy.com/shop/ResinaeBotanica)—Resins
|
||||
* [Scents of Earth (USA)](https://scents-of-earth.com/)—Absolutes, Herbs, Oils, Resins, Woods
|
||||
* [Tame the Spirit Herbs (USA)](https://tamethespiritherbs.com/)—Herbs, Resins, Woods
|
||||
* [The Incense Dragon (USA)](https://www.theincensedragon.com/supplies)—Herbs, Resins, Woods
|
||||
* [The World Makes Scents (USA)](https://theworldmakesscents.com/)—Herbs, Resins, Woods
|
||||
* [Youherbit (Greece)](https://www.youherbit.com/)—Herbs, Resins, Woods
|
||||
|
||||
|
||||
## Studies on Incense and Related Topics
|
||||
* [*Odor Tenacity of Perfumery Materials*, Hayato Hosokawa and Takayuki Shibamoto](https://web.archive.org/web/20240616105228/https://img.perfumerflavorist.com/files/base/allured/all/document/2016/04/pf.7775.pdf)
|
||||
* [*Key Issues and Challenges in Spice Grinding*, HPramod P. Aradwad, Arun Kumar T V, P.K. Sahoo, Indra Mani (PDF, 3.7 MiB)](/documents/key_issues_and_challenges_in_spice_grinding.pdf)
|
||||
* [*Odor Tenacity of Perfumery Materials*, Hayato Hosokawa and Takayuki Shibamoto (PDF, 158.8 KiB)](/documents/odor_tenacity_of_perfume_materials.pdf)
|
||||
|
||||
## Forums / Discussion Boards
|
||||
* [Reddit (/r/incense)](https://reddit.com/r/incense)—Unfortunately, this is currently *the* place to discuss incense and incense making on the English-speaking internet. If you would like to avoid a platform that spies on you and uses your writing to train AI, you are welcome to help me bring some life to the following alternative option (currently pretty much only populated by me):
|
||||
* [Lemmy (lemmy.ml/c/incense)](https://lemmy.ml/c/incense)—Lemmy is a free and open source alternative to Reddit on [the fediverse](https://jointhefediverse.net/?lang=en-us). If you're new to the fediverse, the easiest way to participate is to [create a Lemmy account](https://lemmy.ml/signup) and subscribe to the [/c/incense](https://lemmy.ml/c/incense) community. You can also subscribe and participate from [other Lemmy instances](https://join-lemmy.org/instances) and [other federated platforms](https://jointhefediverse.net/join?lang=en-us) such as [Friendica](https://friendi.ca/#try).
|
||||
* [Ouddict](https://www.ouddict.com/)—Mostly focused on agarwood (oud) oil and wood, incense threads can and do appear.
|
||||
* [The Incense Makers' Guild](https://incensemakers.org/)—An invitation-only forum for experienced incense makers hosted by yours truly. Currently pretty quiet, but some good info can be found there already.
|
||||
|
||||
## Fun
|
||||
* [Incense Ingredient Quiz](/quizzes/incense-ingredient-quiz/)
|
||||
* [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator)
|
||||
|
||||
|
||||
[^1]: Here I am referring to traditional incense making, using actual plants as aromatics. There is certainly no lack of knowledge or production of "dipped" incense here, an extremely easy to make category of incense which is considered the absolute bottom of the barrel in terms of quality.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
layout: layouts/home.njk
|
||||
eleventyNavigation:
|
||||
key: Home
|
||||
order: 1
|
||||
---
|
||||
{% include "navigator.njk" %}
|
||||
|
||||
@@ -2,16 +2,21 @@
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Links
|
||||
structuredData: none
|
||||
h1: Links
|
||||
includeTOC: true
|
||||
---
|
||||
|
||||
# Links
|
||||
Here are some links to pages and resources that I believe are worth sharing.
|
||||
## Design tools and resources
|
||||
### Education
|
||||
## Creative resources
|
||||
### General
|
||||
* [Creazilla](https://creazilla.com/)—A huge collection of media files under a Public Domain license including photos, illustrations, scanned art images, vectors, videos, and audio files.
|
||||
* [Pixabay](https://pixabay.com/)—Free stock photos, illustrations, vector graphics, videos, music and sounds effects.
|
||||
|
||||
### Graphic Design
|
||||
#### Education
|
||||
* [Butterick’s Practical Typography](https://practicaltypography.com/)
|
||||
### Reference
|
||||
#### Reference
|
||||
* [Design Systems Gallery](https://designsystemsrepo.com/design-systems-recent/)
|
||||
### Software
|
||||
#### Software
|
||||
* [Converseen](https://converseen.fasterland.net/)—A Batch Image Converter and Resizer Tool for Windows, Linux and macOS
|
||||
* [darktable](https://www.darktable.org/)—An open source photography workflow application and raw developer
|
||||
* [digiKam](https://www.digikam.org/)—Open-source digital asset manager and image editor
|
||||
@@ -22,16 +27,18 @@ Here are some links to pages and resources that I believe are worth sharing.
|
||||
* [Krita](https://krita.org/en/)—A professional FLOSS painting and raster editing tool
|
||||
* [RawTherapee](https://www.rawtherapee.com/)—A free, cross-platform raw image processing program
|
||||
* [Scribus](https://www.scribus.net/)—The Go-To Libre Desktop Publishing Application
|
||||
### Stock graphics
|
||||
#### Stock graphics
|
||||
* [Artvee](https://artvee.com/)—Browse and download high-resolution, public domain paintings, posters and illustrations
|
||||
* [CocoMaterial](https://cocomaterial.com/)—The Open Source hand-drawn illustration library with 3,293 images
|
||||
* [Free and open source icons](https://www.toools.design/free-open-source-icon-libraries)
|
||||
* [Getty Search Gateway](https://search.getty.edu/gateway/search?q=&cat=type&r=%22Paintings%22&types=%22Paintings$Paintings%22&highlights=%22Open%20Content%20Images$Recent%20Acquisitions%22&rows=10&srt=a&dir=s&dsp=0&img=0&pg=1)
|
||||
* [Getty Museum Collection](https://www.getty.edu/art/collection/search?open_content=true)
|
||||
* [Getty Research Collections](https://www.getty.edu/research/collections/search?is_open_content=true)
|
||||
* [Museo](https://museo.app/)—A visual search engine that connects you with the Art Institute of Chicago, the Rijksmuseum, the Harvard Art Museums, the Minneapolis Institute of Art, the The Cleveland Museum of Art, and the New York Public Library Digital Collection
|
||||
* [National Gallery of Art](https://www.nga.gov/artwork-search?download=1)—Search and download from a collection of tens of thousands of artworks.
|
||||
* [Pexels](https://www.pexels.com/)—The best free stock photos, royalty free images & videos shared by creators
|
||||
* [Pixabay](https://pixabay.com/)—Stunning royalty-free images & royalty-free stock
|
||||
* [Public Domain Image Archive](https://pdimagearchive.org/galleries/all/random/desc)—The Public Domain Image Archive is a curated collection of more than 10,000 out-of-copyright historical images, free for all to explore and reuse.
|
||||
* [Smithsonian Open Access](https://www.si.edu/openaccess)—Download, share, and reuse millions of the Smithsonian’s images
|
||||
### Typefaces
|
||||
#### Typefaces
|
||||
* [Badass Libre Fonts By Womxn](https://www.design-research.be/by-womxn/)
|
||||
* [Collletttivo](https://www.collletttivo.it/)—An Open-Source type foundry and a network of people promoting the practice of type design through mutual exchange and collaboration
|
||||
* [coolLabs Fonts](https://fonts.coollabs.io/)—A privacy-friendly drop-in replacement for Google Fonts
|
||||
@@ -70,6 +77,8 @@ Here are some links to pages and resources that I believe are worth sharing.
|
||||
## Eleventy resources
|
||||
* [11tyBundle](https://11tybundle.dev/)—Learn how others are making the most of 11ty, an exceptionally simple, flexible, and performant, open-source static site generator
|
||||
* [11tyCMS](https://11tycms.com/)—A local, serverless, dependable, and FLOSS CMS for websites made with Eleventy
|
||||
* [Pagefind](https://pagefind.app/)—A fully static search library that runs after Hugo, Eleventy, Jekyll, Next, Astro, SvelteKit, or any other website framework
|
||||
* [Uncharted](https://uncharted.seanlunsford.com/)—A CSS-based chart plugin for Eleventy.
|
||||
|
||||
## Free/libre software
|
||||
* [Free Software Foundation](https://fsf.org)—A nonprofit with a worldwide mission to promote computer user freedom
|
||||
@@ -83,37 +92,65 @@ Here are some links to pages and resources that I believe are worth sharing.
|
||||
## Health / Medical
|
||||
* [smelltrainingapp.com](https://smelltrainingapp.com/)—A free tool from Stockholms Universitet and and Karolinska Institutet to help patients with hyposmia or anosmia improve their sense of smell.
|
||||
|
||||
## Indieweb: discovery
|
||||
## Indieweb / personal web: discovery
|
||||
* [Akregator](https://apps.kde.org/akregator/)—A news feed reader available for GNU/Linux and Windows
|
||||
* [Alligator](https://apps.kde.org/alligator/)—A convergent, cross-platform feed reader, supporting standard RSS/Atom feeds available for GNU/Linux
|
||||
* [blogroll.org](https://blogroll.org/)—Because blogs are the soul of the web
|
||||
* [blogs.hn](https://blogs.hn/)—A directory of tech sites, primarily sourced from HackerNews
|
||||
* [blogscroll.com](https://blogscroll.com/)—An open directory of personal sites and blogs
|
||||
* [blogsearch.io](https://blogsearch.io/)—A search engine for personal blogs and independent websites
|
||||
* [Feeder](https://github.com/spacecowboy/Feeder)—An open source feed reader (RSS/Atom/JSONFeed) for Android
|
||||
* [Feedle](https://feedle.world/)—A search engine for blogs and podcasts
|
||||
* [FreshRSS](https://www.freshrss.org/cloud-providers.html)—A self-hosted RSS and Atom feed aggregator
|
||||
* [indieblog.page](https://indieblog.page/)—Discover the indieweb
|
||||
* [Kagi Smallweb](https://kagi.com/smallweb/)
|
||||
* [Marginalia Search](https://marginalia-search.com/)—Search that prioritizes non-commercial content
|
||||
* [Mire](https://mire.meadow.cafe/)—A minimal, no-bullshit web-based rss/atom feed reader
|
||||
* [Mwmbl](https://mwmbl.org/)—A crowd-sourced search engine
|
||||
* [Mydora](https://mydora.restorativland.org/)—A continuous streaming player that gives you a deep dive into the lost archives of Myspace Music
|
||||
* [ooh.directory](https://ooh.directory/)—A collection of 2,358 blogs about every topic
|
||||
* [Raven](https://ravenreader.app/)—A cross-platform feed reader
|
||||
* [RSS Guard](https://github.com/martinrotter/rssguard)—Feed reader (podcast player and also Gemini protocol client) which supports RSS/ATOM/JSON and many web-based feed services
|
||||
* [searchmysite.net](https://searchmysite.net/)—Search real content by real people from their personal websites
|
||||
* [Wiby](https://wiby.me/)—Search engine for the classic web
|
||||
|
||||
## Indieweb: resources
|
||||
## Indieweb / personal web: resources
|
||||
* [88x31 Archive](https://hellnet.work/8831/)—An archive of tens of thousands of 88x31 buttons
|
||||
* [88x31 Button Viewer](https://pilosophos.com/88x31-viewer/)—A searchable archive of tens of thousands of 88x31 buttons
|
||||
* [90s Cursor Effects](https://tholman.com/cursor-effects/)
|
||||
* [blinkies.cafe](https://blinkies.cafe/)—Blinkie maker
|
||||
* [Blot](https://blot.im/)—A tool that turns a folder into a website (paid)
|
||||
* [Button / badge generator](https://88x31.datakra.sh/)—Generate your very own 88x31 buttons
|
||||
* [Button / badge generator (2)]https://hekate2.github.io/buttonmaker/)—Another 88x31 button maker
|
||||
* [Button / badge generator (3)](https://sadgrlonline.github.io/archived-sadgrl.online/projects/88x31-button-maker.html)—Another one!
|
||||
* [GIF Printer 2000](https://melonking.net/frames/pixelsea)
|
||||
* [GifCities](https://gifcities.org/)—The Geocities animated gif search from Internet Archive
|
||||
* [Gify Pet](https://melonking.net/frames/pet)—Who is there to watch over your site when you are gone? GifyPet will!
|
||||
* [goatcounter.com](https://www.goatcounter.com/)—An open source web analytics platform available as a free donation-supported hosted service or self-hosted app
|
||||
* [Guestbooks](https://guestbooks.meadow.cafe/)—A free guestbook service for your website
|
||||
* [Guestbooks (2)](https://guestbooks.kamiscorner.xyz/)—Another free guestbook service for your website
|
||||
* [Hit counters](https://www.websiteout.net/counter.php)
|
||||
* [Kitty](https://kitty.meadow.cafe/)—A cozy, minimal content platform focused on helping you write & publish without fuss
|
||||
* [Mochi](https://mochi.meadow.cafe/)—Friendly analytics and webmentions for your little corner of the web
|
||||
* [Nekoweb](https://nekoweb.org/)—A free static website hosting service
|
||||
* [neocities.org](https://neocities.org/)—Create your own free website.
|
||||
Unlimited creativity, zero ads.
|
||||
* [Pride button / badge generator](https://badge.les.bi/)—Generate pride buttons
|
||||
* [tamaNOTchi](https://tamanotchi.world/)—cute virtual pets you can customize, grow, and share on your blog or website
|
||||
* [tilde.fun](https://tilde.fun/)—A Linux machine on the internet where you can get a shell account
|
||||
* [tildepages](https://tildepages.org/)—Free & fast web hosting
|
||||
* [Tile-able website backgrounds](https://tiled-bg.blogspot.com/)
|
||||
* [Userbar generator](https://350x19.datakra.sh/)—Generate 250x19 userbar graphics
|
||||
|
||||
## Literature
|
||||
* [Standard Ebooks](https://standardebooks.org/)—A volunteer-driven effort to produce a collection of high quality, carefully formatted, accessible, open source, and free public domain ebooks that meet or exceed the quality of commercially produced ebooks.
|
||||
* [TypeLit.io](https://www.typelit.io/)—Test your typing online by practicing on your favorite literature
|
||||
* [Wee Windaes—A continuum o the Scots Leid](https://wee-windaes.nls.uk/)
|
||||
|
||||
## Music
|
||||
* [Free Music Archive](https://freemusicarchive.org/home)—Free Music Archive (FMA) offers free access to open licensed, original music by independent artists around the world.
|
||||
* [Musopen](https://musopen.org/)—Musopen is a 501(c) 3 non-profit working to increase access to music education by providing free music recordings, sheet music, apps, and educational materials.
|
||||
|
||||
## Privacy-respecting tools and services
|
||||
* [Autistici](https://www.autistici.org/)—A collective offering free digital services, including:
|
||||
* Anonymity services
|
||||
@@ -231,3 +268,10 @@ Here are some links to pages and resources that I believe are worth sharing.
|
||||
* Microblogging
|
||||
* Search
|
||||
* VPN
|
||||
## Random cool stuff
|
||||
* [intertapes.net](https://intertapes.net/)—An updating collection of found cassette tapes from different locations. The audio fragments include: voice memos, field recordings, mixtapes, bootlegs and more.
|
||||
* [Pocket Bird](https://idreesinc.itch.io/pocket-bird)—A pet bird that flies around web pages as you browse. Collect feathers to unlock different birds, and find hats for your bird to wear.
|
||||
## Sounds & Samples
|
||||
* [FreeSound](https://freesound.org/)
|
||||
* [LooperMan](https://www.looperman.com/)
|
||||
* [SampleSwap](https://sampleswap.org/index.php)
|
||||
|
||||
135
content/not-amazon/index.md
Normal file
135
content/not-amazon/index.md
Normal file
@@ -0,0 +1,135 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
title: "Nathan Upchurch | Not Amazon"
|
||||
structuredData: none
|
||||
h1: Not Amazon
|
||||
includeTOC: true
|
||||
---
|
||||
Mostly for my own use, this is a list of U.S.-based online shops that are not Amazon. If you are looking to stop paying for J-Beezy's yacht maintenance while his workers piss in bottles, and you're based in the U.S.A., you might find this list useful too. Vegan and small independent brands get priority, of course. I do not receive any sort of commission or kick-back from any of the below stores. If you do want to buy something that I get a kick-back from, check out my (sparse) [referrals](/referrals) page. I haven't personally tried all of these retailers, so use judgment before purchasing.
|
||||
|
||||
## Clothing & Apparel
|
||||
* [Bombas](https://bombas.com/)—Decent socks.
|
||||
* [Suavs](https://www.suavshoes.com/)—Very comfortable ultra-casual shoes with a nice wide toe-box.
|
||||
* [Means Workwear](https://www.meansworkwear.com/)—Clothing, patches, and hats that may get you put on a list.
|
||||
* [Very Cool](https://shirtz.cool/)—Ultra casual clothing.
|
||||
* [Will's Vegan Store](https://www.wills-vegan-store.com/)—Vegan faux-leather[^1] shoes, mostly smart-casual and up, plus some nice coats, jackets, and bags.
|
||||
|
||||
## Electronics
|
||||
* [CircuitMess](https://circuitmess.com/)—STEM kits.
|
||||
* [Handheld Legend](https://handheldlegend.com/)—Retro handheld console mods and upgrades.
|
||||
* [Micro Center](https://www.microcenter.com/)—Computers and computer components, maker products, networking equipment, and more.
|
||||
* [Minis Forum](https://www.minisforum.com/)—Mini PCs.
|
||||
* [KPRepublic](https://kprepublic.com/)—Keyboards and keyboard accessories.
|
||||
* [Retroid](https://www.goretroid.com/)—Handheld retro game emulation devices.
|
||||
* [Slimbook](https://slimbook.com/en/)—Laptops made for GNU/Linux.
|
||||
* [StarLabs](https://us.starlabs.systems/)—Computers made for GNU/Linux.
|
||||
* [System76](https://system76.com/)—Computers and accessories made for GNU/Linux.
|
||||
* [Tindie](https://www.tindie.com/)—Buy unique electronics directly from makers.
|
||||
* [Tuxedo Computers](https://www.tuxedocomputers.com/en)—Laptops made for GNU/Linux.
|
||||
* [X-Tronic USA](https://xtronicusa.com/)—Soldering stations and related items.
|
||||
|
||||
## Emergency Preparedness
|
||||
* [Sparrows Lock Picks](https://www.sparrowslockpicks.com/)—Lock picks, sets, and escape and evasion tools.
|
||||
* [Veggie Mush](https://www.veggiemush.com/)—Dried plant-based meals for camping or emergencies.
|
||||
|
||||
## Entertainment
|
||||
* [Abe Books](https://www.abebooks.com/)—Books, fine art, and collectibles.
|
||||
* [itch.io](https://itch.io/)—Indie video games.
|
||||
* [Perfectly Acceptable](https://www.perfectly-acceptable.com/)—Independently published books and zines.
|
||||
* [Means TV](https://means.tv/)—A TV subscription that may get you put on a list.
|
||||
|
||||
## Food & Beverage
|
||||
### Baked Goods
|
||||
* [Little Moon Bakehouse](https://littlemoonbakehouse.com/)—Vegan mooncakes and pastries.
|
||||
|
||||
### Groceries
|
||||
* [Anthony's Goods](https://anthonysgoods.com/)—Pantry staples: flours, sugars and sweeteners, nuts and seeds, spices, and more.
|
||||
* [Canaan Palestine](https://canaanpalestine.com/)—Premium olive oils from Palestine's 2,000 year old olive trees. They also carry a small selection of tapenades and other pantry items.
|
||||
* [Nuts.com](https://nuts.com/)—Nuts, chocolate, sweets, trail mix, teas, flours, spices, dried fruit, and more. Don't blindly trust their vegan filter.
|
||||
* [Weee!](https://www.sayweee.com/en)—America's largest online Asian supermarket. Great for vegetables and interesting stuff you won't find anywhere else.
|
||||
|
||||
### Non-Alcoholic
|
||||
* [The Zero Proof](https://thezeroproof.com/)—Non-alcoholic beer, wine, spirits, cocktails, amaros, aperitifs, and digestifs, and more.
|
||||
|
||||
### Sweets
|
||||
* [Alegio Chocolaté](https://www.alegio.com/)—High-end chocolate grown in São Tomé.
|
||||
* [No Whey Foods](https://nowheychocolate.com/)—Vegan and kosher chocolates free from common allergens.
|
||||
* [Rose City](https://rosecitychocolates.com/)—Has a wide array of (very nice) vegan chocolates.
|
||||
* [Shrivers](https://shrivers.com/)—Salt water taffy that you'll actually want to eat.
|
||||
|
||||
### Tea
|
||||
* [Spirit Tea](https://spirittea.co/)—Farm-direct loose leaf tea. Based in Chicago.
|
||||
* [Yunnan Sourcing](https://yunnansourcing.us/)—A wide array of high quality teas and tea resins, including puerh.
|
||||
|
||||
### Vegan / Vegetarian Alternatives
|
||||
* [All Vegetarian Inc.](https://veganforall.com/)—Vegan substitutes for bacon, shrimp, eggs, and more.
|
||||
* [Fake Meats](https://www.fakemeats.com/default.asp)—Vegetarian and vegan meat substitutes, snacks, seasonings, sauces, jerky, and more. Seems like this store isn't totally vegan: check ingredients before buying.
|
||||
* [vegefood.com](https://vegefood.com/)—All sorts of weird and wonderful vegan and vegetarian meat alternatives. Not totally vegan: check ingredients before buying.
|
||||
* [WebstaurantStore](https://www.webstaurantstore.com/search/vegan.html)—If you're willing to buy by the case, you can get all sorts of vegan alternatives here on the cheap.
|
||||
* [Yang Kee Trading](https://yangkeetrading.com/)—Large dried TVP chunks, slices, and strips, vegan pork floss, teas, and more.
|
||||
|
||||
## General
|
||||
* [Public Goods](https://www.publicgoods.com/)—Simple products within the bath and body, cleaning, kitchen and dining, and home decor categories.
|
||||
* [GoodEarth Products](https://goodearthproducts.com/)—Office supplies, cleaning, food service, medical, and industrial goods. Also sells the very economical 40-pound buckets of Boardwalk laundry detergent. I have hardly managed to put a dent in my bucket after sixteen months.
|
||||
* [Grove](https://www.grove.co/)—Products across home and kitchen, garden, cleaning, bath and body, and more. Also sells a very affordable 3-ply bamboo toilet paper.
|
||||
* [Ten Thousand Villages](https://www.tenthousandvillages.com/)—Fair trade kitchen items, soaps, handwoven baskets, games and puzzles, jewelry, and more from artisans across the world.
|
||||
|
||||
## Home
|
||||
### Art
|
||||
* [Prints: The Public Domain Review](https://publicdomainreview.org/shop/fine-art-prints/)—The Public Domain Review prints shop offers custom-made Giclée prints from a selection of more than 900 public domain images. All proceeds from sales go back into The Public Domain Review (a not-for-profit project).
|
||||
|
||||
### Cleaning Supplies
|
||||
* [Friendswood Brooms](https://friendswoodbrooms.com/)—Handmade corn brooms.
|
||||
* [Meckley Brooms](https://www.meckleybrooms.com/)—Handmade corn brooms.
|
||||
|
||||
### Furniture
|
||||
* [Joybird](https://rigbyhandcraft.com/ornaments)—Decent quality furniture (not flat-pack) that doesn't cost the earth. They have a decent warranty, too, but do be prepared to go to battle if you intend to use it.[^2]
|
||||
|
||||
### Holiday Decorations
|
||||
* [Rigby Handcraft](https://rigbyhandcraft.com/ornaments)—Reproductions of antique tin Christmas tree ornaments.
|
||||
|
||||
### Incense
|
||||
* [Exotic Incense](https://www.exoticincense.com/)—Sells a wide array of incense from India, Tibet, Japan, and more.
|
||||
* [Fred Soll](https://www.fredsoll.com/)—An independent U.S. incense maker who pioneered the "resin on a stick" category.
|
||||
* [Goyo](https://www.goyo.space/shop)—Incense by artisan Hyungi Park.
|
||||
* [Japan Incense](https://www.japanincense.com/)—Japanese incense shop with a huge selection.
|
||||
* [Kikoh](https://kikohincense.com/)—Japanese incense shop that packages every order very nicely.
|
||||
* [Mermade Magickal Arts](https://www.mermadearts.com/)—High-end incense from a number of independent artisans.
|
||||
* [Nippon Kodo](https://nipponkodostore.com/)—The official U.S. web-store for Nippon Kodo.
|
||||
* [Shoyeido](https://shoyeido.com/)—The official U.S. web-store for Shoyeido.
|
||||
* [The World Makes Scents](https://theworldmakesscents.com/)—A Chicago-local independent incense brand focusing on Cambodian-style natural, whole-plant incense.
|
||||
|
||||
### Kitchen
|
||||
* [John Boos & Co.](https://www.johnboos.com/)—High quality cutting boards, butcher blocks, carts, kitchen islands, tables, and more.
|
||||
* [Made In](https://madeincookware.com/)—5-ply stainless clad cookware, cutlery, plates, bowls, and more.
|
||||
* [Oxo](https://www.oxo.com/)—Kitchenware, cleaning and organization products, and more.
|
||||
* [WebstaurantStore](https://www.webstaurantstore.com/)—Commercial kitchen equipment from freezers to disposable cups and janitorial supplies. This is where I got my [Boos Block prep table](https://www.johnboos.com/products/1-1-2-thick-wood-top-work-tables-with-galvanized-shelf-24-wide?Size=36%22+x+24%22+x+1-1%2F2%22) on the cheap.
|
||||
|
||||
### Organization
|
||||
* [North Mountain Supply](https://www.northmountainsupply.com/)—Jars, bottles, and supplies for beer making, wine making, distilling, and more.
|
||||
|
||||
## Office
|
||||
### Stationery
|
||||
* [Blackwing](https://blackwing602.com/)—Home of the legendary Blackwing pencil.
|
||||
* [The Goulet Pen Co.](https://www.gouletpens.com/)—Fountain pens (the environmentally friendly option!), ink, paper, stationery sets, and more.
|
||||
|
||||
## Personal Care
|
||||
### Bath & Body
|
||||
* [Ethique](https://ethique.com/)—Shampoo and conditioner bars from Aotearoa New Zealand.
|
||||
* [Dr. Jen](https://drjennatural.com/)—Nano-Hydroxyapatite toothpaste. They also sell a strawberry flavor for those sensitive to mint.
|
||||
* [HiBAR](https://hellohibar.com/)—Vegan and plastic free deodorant, body wash, hair care, and more.
|
||||
* [J•R•Liggett's](https://jrliggett.com/)—All natural shampoo bars.
|
||||
* [Palestinian Soap Cooperative](https://palestiniansoap.coop/)—Olive oil soap from Nablus, Palestine, made using a traditional process practiced for well over four millennia.
|
||||
* [Phoenix Shaving](https://phoenixshaving.com/)—A wide array of razors, aftershaves, brushes, and other wet-shaving products, including the fantastic [CK-6 line of vegan shaving soaps](https://phoenixshaving.com/collections/ultra-premium-formula-ck-6).
|
||||
* [Smart Life Co.](https://www.smartlifeco.com/)—Floss picks and other oral hygiene products.
|
||||
* [The Earthling Co.](https://theearthlingco.com/)—Shampoo and conditioner bars.
|
||||
* [TNG Worldwide](https://tngworldwide.com/)—Bulk vegan soap, shampoo, conditioner, lotion, and more from the Ginger Lily Farms brand. They also sell spa supplies and salt lamps. Ignore the "Available at Amazon" buttons.
|
||||
* [Triple Bristle](https://www.triplebristle.com/)—Neat three-sided toothbrushes that really get every surface of your teeth with little effort.
|
||||
|
||||
### Supplements
|
||||
* [Complement](https://lovecomplement.com/)—Vegan multivitamins and supplements.
|
||||
* [vivanaturals](https://vivanaturals.com/)—Supplements, beauty, and food items.
|
||||
|
||||
[^1]: I know what you're thinking, but I have not once had any issues with peeling or damage on the faux-leather uppers from this brand (most intentionally vegan brands have this handled). In fact, they last and look good for longer than animal-skin shoes because the material is not damaged by moisture or road salt. If you really want a true buy-it-for-life option, though (and if they have them in your size), go for the Goodyear welt options so that the shoes are properly resoleable at a cobbler.
|
||||
|
||||
[^2]: I bought a sofa with angled legs; not the most structurally sound arrangement. When one broke, it took me years to get around to making a warranty claim. They honored it, but I first had to send the couch back. They then told me that the model I bought was no longer available, but I could select one from the website of the same value before any sales or discounts. There were two problems with this. First, years had passed and prices had risen. Second, just about everything on that website seems to be perpetually on sale. And so I went to war. There were mysterious email deliverability issues, negotiations, and many phone calls. Eventually, I got a nice new replacement couch for Sol to leave crumbs on with entirely vertical legs. Result.
|
||||
7
content/now-burning/Now Burning_2026-01-08_17:47.md
Normal file
7
content/now-burning/Now Burning_2026-01-08_17:47.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Kaden Kobunboku
|
||||
manufacturer: Baieido
|
||||
date: 2026-01-08 17:47:00
|
||||
time: 5:47 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-08_18:43.md
Normal file
7
content/now-burning/Now Burning_2026-01-08_18:43.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Sarasoju
|
||||
manufacturer: Shunkohdo
|
||||
date: 2026-01-08 18:42:00
|
||||
time: 6:42 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-13_09:33.md
Normal file
7
content/now-burning/Now Burning_2026-01-13_09:33.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Pearl
|
||||
manufacturer: Les Encens Du Monde
|
||||
date: 2026-01-13 09:32:00
|
||||
time: 9:32 AM
|
||||
---
|
||||
I'm finding that I quite like charcoal based incense for my small bathroom.
|
||||
7
content/now-burning/Now Burning_2026-01-13_15:31.md
Normal file
7
content/now-burning/Now Burning_2026-01-13_15:31.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Atlas Cedar Experiment
|
||||
manufacturer: Irene of rauchfahne.de
|
||||
date: 2026-01-13 15:30:00
|
||||
time: 3:30 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-16_14:01.md
Normal file
7
content/now-burning/Now Burning_2026-01-16_14:01.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Kobunboku
|
||||
manufacturer: Baieido
|
||||
date: 2026-01-16 14:01:00
|
||||
time: 2:01 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-21_18:56.md
Normal file
7
content/now-burning/Now Burning_2026-01-21_18:56.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Kyara
|
||||
manufacturer: Tennendo
|
||||
date: 2026-01-21 18:56:00
|
||||
time: 6:56 PM
|
||||
---
|
||||
Absolute banger of a daily agarwood stick.
|
||||
7
content/now-burning/Now Burning_2026-01-23_10:08.md
Normal file
7
content/now-burning/Now Burning_2026-01-23_10:08.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Rose Sawayaka
|
||||
manufacturer: Baieido
|
||||
date: 2026-01-23 10:08:00
|
||||
time: 10:08 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-23_11:57.md
Normal file
7
content/now-burning/Now Burning_2026-01-23_11:57.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Suifu
|
||||
manufacturer: Yamadamatsu
|
||||
date: 2026-01-23 11:56:00
|
||||
time: 11:56 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-27_17:37.md
Normal file
7
content/now-burning/Now Burning_2026-01-27_17:37.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: "Matsu no Tomo - Friend of Pine"
|
||||
manufacturer: Shoyeido
|
||||
date: 2026-01-27 17:37:00
|
||||
time: 5:37 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-01-28_09:22.md
Normal file
7
content/now-burning/Now Burning_2026-01-28_09:22.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Awaji Island Koh-shi Coffee
|
||||
manufacturer: Kunjudo
|
||||
date: 2026-01-28 9:21:00
|
||||
time: 9:21 AM
|
||||
---
|
||||
Coming to dislike this one less as the days go by. Still not sure it smells like coffee though.
|
||||
7
content/now-burning/Now Burning_2026-01-30_09:56.md
Normal file
7
content/now-burning/Now Burning_2026-01-30_09:56.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Moonlit Night
|
||||
manufacturer: Les Encens du Monde
|
||||
date: 2026-01-30 9:57:00
|
||||
time: 9:57 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-04_15:27.md
Normal file
7
content/now-burning/Now Burning_2026-02-04_15:27.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Morikage
|
||||
manufacturer: Hikali Koh
|
||||
date: 2026-02-04 15:27:00
|
||||
time: 3:27 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-05_10:13.md
Normal file
7
content/now-burning/Now Burning_2026-02-05_10:13.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Musk
|
||||
manufacturer: "The Mother’s Fragrances"
|
||||
date: 2026-02-05 10:12:00
|
||||
time: 10:12 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-05_10:38.md
Normal file
7
content/now-burning/Now Burning_2026-02-05_10:38.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Agarwood
|
||||
manufacturer: Ganesha
|
||||
date: 2026-02-05 10:38:00
|
||||
time: 10:38 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-09_13:28.md
Normal file
7
content/now-burning/Now Burning_2026-02-09_13:28.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Agarwood
|
||||
manufacturer: Ganesha
|
||||
date: 2026-02-09 13:20:00
|
||||
time: 1:20 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-09_22:56.md
Normal file
7
content/now-burning/Now Burning_2026-02-09_22:56.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Musk
|
||||
manufacturer: "The Mother’s Fragrances"
|
||||
date: 2026-02-09 22:56:00
|
||||
time: 10:56 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-10_10:06.md
Normal file
7
content/now-burning/Now Burning_2026-02-10_10:06.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Patchouli
|
||||
manufacturer: "The Mother’s Fragrances"
|
||||
date: 2026-02-10 10:06:00
|
||||
time: 10:06 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-10_12:42.md
Normal file
7
content/now-burning/Now Burning_2026-02-10_12:42.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Oud
|
||||
manufacturer: Flora Botanical Incense
|
||||
date: 2026-02-10 12:42:00
|
||||
time: 12:42 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-11_10:17.md
Normal file
7
content/now-burning/Now Burning_2026-02-11_10:17.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Hawaiian Summer
|
||||
manufacturer: Incense Apprentice
|
||||
date: 2026-02-11 10:16:00
|
||||
time: 10:16 AM
|
||||
---
|
||||
I think a little age has done this stick good. It's got a pleasant coolness.
|
||||
7
content/now-burning/Now Burning_2026-02-13_10:03.md
Normal file
7
content/now-burning/Now Burning_2026-02-13_10:03.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Frankincense & Myrrh with Sacred Sage
|
||||
manufacturer: Fred Soll
|
||||
date: 2026-02-13T10:02:00.000Z
|
||||
time: '10:02 AM'
|
||||
---
|
||||
An incredibly strong stick. Ventilation is key!
|
||||
7
content/now-burning/Now Burning_2026-02-16_11:59.md
Normal file
7
content/now-burning/Now Burning_2026-02-16_11:59.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Sweet Frankincense
|
||||
manufacturer: Fred Soll
|
||||
date: 2026-02-16 11:59:00
|
||||
time: 11:59 AM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-02-18_14:15.md
Normal file
7
content/now-burning/Now Burning_2026-02-18_14:15.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Sumire
|
||||
manufacturer: Tennendo
|
||||
date: 2026-02-18 14:14:00
|
||||
time: 2:14 PM
|
||||
---
|
||||
I've heard it called “soapy,” but I quite enjoy this violet incense.
|
||||
7
content/now-burning/Now Burning_2026-02-20_08:59.md
Normal file
7
content/now-burning/Now Burning_2026-02-20_08:59.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Excellentia (Shira-giku)
|
||||
manufacturer: Shoyeido
|
||||
date: 2026-02-20 8:59:00
|
||||
time: 8:59 AM
|
||||
---
|
||||
With a 7-8 hour burn time, this coil is a bit of a commitment!
|
||||
7
content/now-burning/Now Burning_2026-02-27_15:27.md
Normal file
7
content/now-burning/Now Burning_2026-02-27_15:27.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Hawaiian Summer
|
||||
manufacturer: Incense Apprentice
|
||||
date: 2026-02-27 15:27:00
|
||||
time: 3:27 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-03-02_11:38.md
Normal file
7
content/now-burning/Now Burning_2026-03-02_11:38.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Calm
|
||||
manufacturer: Esprit de la Nature
|
||||
date: 2026-03-02 11:37:00
|
||||
time: 11:37 AM
|
||||
---
|
||||
A nice spicy, woody composition
|
||||
7
content/now-burning/Now Burning_2026-03-04_14:00.md
Normal file
7
content/now-burning/Now Burning_2026-03-04_14:00.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Suzaku
|
||||
manufacturer: Gyokushodo
|
||||
date: 2026-03-04 13:59:00
|
||||
time: 1:59 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-03-04_15:04.md
Normal file
7
content/now-burning/Now Burning_2026-03-04_15:04.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Brunei
|
||||
manufacturer: Yi-Xin Craft Incense
|
||||
date: 2026-03-04 15:04:00
|
||||
time: 3:04 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-03-06_12:56.md
Normal file
7
content/now-burning/Now Burning_2026-03-06_12:56.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Warming
|
||||
manufacturer: "Faircense / Pema of Tibet"
|
||||
date: 2026-03-06 12:56:00
|
||||
time: 12:56 PM
|
||||
---
|
||||
|
||||
7
content/now-burning/Now Burning_2026-03-12_11:43.md
Normal file
7
content/now-burning/Now Burning_2026-03-12_11:43.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Tokusen Kobunboku
|
||||
manufacturer: Baieido
|
||||
date: 2026-03-12 11:43:00
|
||||
time: 11:43 AM
|
||||
---
|
||||
I like this one a lot.
|
||||
7
content/now-burning/Now Burning_2026-03-13_13:29.md
Normal file
7
content/now-burning/Now Burning_2026-03-13_13:29.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Kobunboku
|
||||
manufacturer: Baieido
|
||||
date: 2026-03-13 13:29:00
|
||||
time: 1:29 PM
|
||||
---
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user