Compare commits
20 Commits
961d4ba3c3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c28f4fdb77 | |||
| 163de4c46a | |||
| 9eed69252a | |||
| 8bd8f518d4 | |||
| 82f47093a7 | |||
| e728ddac2c | |||
| 0d40f6fb54 | |||
| 93a3ae7bf0 | |||
| a45890d660 | |||
| 58b04186ed | |||
| 54ed7902db | |||
| c054d0c3c9 | |||
| 9d9bfc895b | |||
| f4f3cb4e91 | |||
| 72f8eee9cd | |||
| 0909926bde | |||
| 874ec4c434 | |||
| 0cec181ec3 | |||
| 92e077bc57 | |||
| 4f0df71c13 |
@@ -1,6 +1,8 @@
|
|||||||
TODO:
|
TODO:
|
||||||
---------------------
|
---------------------
|
||||||
Move hard-coded copy to metadata.
|
Move hard-coded copy to metadata.
|
||||||
|
Fix permanent snowing when user doesn't have JS enabled.
|
||||||
|
Implement bold text style
|
||||||
|
|
||||||
Quiz Ideas:
|
Quiz Ideas:
|
||||||
---------------------
|
---------------------
|
||||||
|
|||||||
@@ -10,18 +10,16 @@ My blog, originally based on the very helpful eleventy-base-blog v8, although it
|
|||||||
* Pretty 401 and 403 error pages
|
* Pretty 401 and 403 error pages
|
||||||
|
|
||||||
### Fediverse Integration
|
### 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
|
* Link to post discussion on Mastodon
|
||||||
|
|
||||||
### Indieweb
|
### 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"`
|
* [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)
|
* 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
|
* All blog posts
|
||||||
* Each individual tag
|
* Each individual tag
|
||||||
* /now page that nicely handles posts tagged with "now"
|
* /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
|
* Blogroll generated from _data/blogroll.js, with an automatically updated .opml so that visitors can import every blog in the list
|
||||||
* Image galleries
|
|
||||||
|
|
||||||
### Fun
|
### Fun
|
||||||
* Image galleries
|
* Image galleries
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ export default {
|
|||||||
name: "Incense, Fragrance, and Perfumery",
|
name: "Incense, Fragrance, and Perfumery",
|
||||||
blogs: [
|
blogs: [
|
||||||
{
|
{
|
||||||
title: "Apothecary's Garden Blog",
|
title: "Apothecary’s Garden Blog",
|
||||||
feedUrl: "https://apothecarysgarden.com/blogs/blog.atom",
|
feedUrl: "https://apothecarysgarden.com/blogs/blog.atom",
|
||||||
url: "https://apothecarysgarden.com/blogs/blog",
|
url: "https://apothecarysgarden.com/blogs/blog",
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ export default {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
weatherOnByDefault: false,
|
weatherOnByDefault: false,
|
||||||
weatherSymbol: "❅",
|
weatherSymbol: "🌸",
|
||||||
webrings: [
|
webrings: [
|
||||||
{
|
{
|
||||||
name: "Fediring",
|
name: "Fediring",
|
||||||
|
|||||||
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 -->
|
||||||
@@ -17,6 +17,6 @@
|
|||||||
<a href="https://notbyai.fyi/">
|
<a href="https://notbyai.fyi/">
|
||||||
<img src="/img/written-by-human-not-by-ai-white.svg" alt="Written by humans, not by AI.">
|
<img src="/img/written-by-human-not-by-ai-white.svg" alt="Written by humans, not by AI.">
|
||||||
</a>
|
</a>
|
||||||
{% include "siteSettings.njk" %}
|
{% include "settings/siteSettings.njk" %}
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
<!-- ISSO style -->
|
|
||||||
<style>
|
|
||||||
.isso-comment-header {
|
|
||||||
height: var(--space-2xl) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4.isso-thread-heading {
|
|
||||||
color: var(--text-color) !important;
|
|
||||||
font-size: var(--step-2) !important;
|
|
||||||
font-variation-settings: "opsz" 50, "wght" 350, "SOFT" 20, "WONK" 1 !important;
|
|
||||||
line-height: calc(var(--step-2) * 0.25 + var(--step-2)) !important;
|
|
||||||
margin-bottom: var(--space-m) !important;
|
|
||||||
margin-top: var(--space-m) !important;
|
|
||||||
padding-bottom: 0 !important;
|
|
||||||
padding-top: 0 !important;
|
|
||||||
text-wrap: pretty !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.isso-text > h1, .isso-text > h2 {
|
|
||||||
padding: 0 0 0 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.isso-form-wrapper > .isso-auth-section > .isso-post-action > input {
|
|
||||||
background-color: var(--contrast-color) !important;
|
|
||||||
border: none !important;
|
|
||||||
border-radius: var(--border-radius) !important;
|
|
||||||
color: var(--background-color) !important;
|
|
||||||
font-family: var(--font-family-ui) !important;
|
|
||||||
font-size: var(--step--2) !important;
|
|
||||||
font-variation-settings: var(--font-variation-ui) !important;
|
|
||||||
height: var(--space-m-l) !important;
|
|
||||||
letter-spacing: var(--ui-letter-spacing) !important;
|
|
||||||
margin: var(--space-xs) 0 0 0 !important;
|
|
||||||
padding: 0 var(--space-xs) !important;
|
|
||||||
text-transform: uppercase !important;
|
|
||||||
transition: var(--transition-normal) !important;
|
|
||||||
white-space: nowrap !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.isso-input-wrapper {
|
|
||||||
display: block !important;
|
|
||||||
max-width: 100% !important;
|
|
||||||
& > label, & > input {
|
|
||||||
font-family: var(--font-family-ui) !important;
|
|
||||||
font-size: var(--step--2) !important;
|
|
||||||
font-variation-settings: var(--font-variation-ui) !important;
|
|
||||||
}
|
|
||||||
& input {
|
|
||||||
margin-block: inherit !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.isso-post-action {
|
|
||||||
display: inline-block !important;
|
|
||||||
float: inherit !important;
|
|
||||||
margin: 0 var(--space-2xs) 0 0 !important;
|
|
||||||
&::after {
|
|
||||||
content: "" !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea.isso-textarea {
|
|
||||||
background-color: var(--background-color) !important;
|
|
||||||
border: var(--border-details) !important;
|
|
||||||
border-color: var(--contrast-color) !important;
|
|
||||||
border-radius: var(--border-radius) !important;
|
|
||||||
color: var(--text-color) !important;
|
|
||||||
font-family: var(--font-family) !important;
|
|
||||||
font-size: var(--step-0) !important;
|
|
||||||
font-variation-settings: var(--font-variation-default) !important;
|
|
||||||
margin-block: 0 1lh !important;
|
|
||||||
min-height: var(--space-l) !important;
|
|
||||||
padding: 0 var(--space-3xs) !important;
|
|
||||||
resize: vertical !important;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<!-- /ISSO style -->
|
|
||||||
@@ -4,11 +4,55 @@
|
|||||||
{% include "metadata.njk" %}
|
{% include "metadata.njk" %}
|
||||||
<link rel="stylesheet" type="text/css" href="/css/index.css" />
|
<link rel="stylesheet" type="text/css" href="/css/index.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="/css/webfonts/webfonts.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('metadata') %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/metadata.css" />
|
||||||
|
{% endif %}
|
||||||
|
{% if tags and tags.includes('navigator') %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/navigator.css" />
|
||||||
|
{% endif %}
|
||||||
|
{% if tags and tags.includes('profilePic') %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/profile-pic.css" />
|
||||||
|
{% endif %}
|
||||||
|
{% if tags and tags.includes('postList') %}
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/post-list.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/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 %}
|
{% if search %}
|
||||||
<link rel="stylesheet" href="/pagefind/pagefind-ui.css">
|
<link rel="stylesheet" href="/pagefind/pagefind-ui.css">
|
||||||
<link rel="stylesheet" type="text/css" href="/css/search.css" />
|
<link rel="stylesheet" type="text/css" href="/css/search.css" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<script src="/js/main.js"></script>
|
||||||
<!-- Mochi webmentions -->
|
<!-- Mochi webmentions -->
|
||||||
<link rel="webmention" href="https://mochi-webmentions.meadow.cafe/webmention/mochi@upchur.ch/1/receive" />
|
<link rel="webmention" href="https://mochi-webmentions.meadow.cafe/webmention/mochi@upchur.ch/1/receive" />
|
||||||
<!-- Indieweb profile links -->
|
<!-- Indieweb profile links -->
|
||||||
@@ -16,19 +60,36 @@
|
|||||||
<!-- /Indieweb profile links -->
|
<!-- /Indieweb profile links -->
|
||||||
{% include "structuredData.njk" %}
|
{% include "structuredData.njk" %}
|
||||||
{% include "analytics.html" %}
|
{% include "analytics.html" %}
|
||||||
{% include "issoStyle.njk" %}
|
|
||||||
{% include "weatherStyle.njk" %}
|
|
||||||
{% include "wooModeStyle.njk" %}
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{% include "header.njk" %}
|
{% include "header.njk" %}
|
||||||
<main id="skip">
|
<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>
|
<section>
|
||||||
{{ content | safe }}
|
{{ content | safe }}
|
||||||
</section>
|
</section>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
|
{% if not includeTOC %}
|
||||||
|
<section>
|
||||||
|
{{ content | safe }}
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
</main>
|
</main>
|
||||||
|
{% include "birb.njk" %}
|
||||||
{% include "footer.njk" %}
|
{% include "footer.njk" %}
|
||||||
{% include "weather.njk" %}
|
{% include "weather.njk" %}
|
||||||
{% include "wooMode.njk" %}
|
{% include "wooMode.njk" %}
|
||||||
|
{% include "settings/settingsConfig.njk" %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
showPostListHeader: yep
|
showPostListHeader: yep
|
||||||
|
tags:
|
||||||
|
- navigator
|
||||||
---
|
---
|
||||||
<h1>I’m Nathan; welcome friend.</h1>
|
<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>
|
<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>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ layout: layouts/linksPage.njk
|
|||||||
<div class="links-container h-card" data-pagefind-body>
|
<div class="links-container h-card" data-pagefind-body>
|
||||||
<img class="profilePic u-photo" src="{{ metadata.author.profilePic }}">
|
<img class="profilePic u-photo" src="{{ metadata.author.profilePic }}">
|
||||||
<h1 class="socialTitle p-name">Nathan Upchurch</h1>
|
<h1 class="socialTitle p-name">Nathan Upchurch</h1>
|
||||||
<p class="page-block nodropcap">Beside what I do to earn a crust, among other things, I’m an incense maker and enthusiast, a classical trombonist, vegan cook, writer, mediocre photographer, and a fan of, advocate for, and occasional contributor to free and open source software. Here’s where you can find me on the internet:</p>
|
<p class="page-block nodropcap">Here’s where you can find me on the internet:</p>
|
||||||
<div class="socialLinks">
|
<div class="socialLinks">
|
||||||
{% for link in metadata.socialLinks %}
|
{% for link in metadata.socialLinks %}
|
||||||
<a class="link-button u-url" {% if link.customAttribute %} {{ link.customAttribute | safe }} {% endif %} href="{{ link.linkURL }}">
|
<a class="link-button u-url" {% if link.customAttribute %} {{ link.customAttribute | safe }} {% endif %} href="{{ link.linkURL }}">
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ layout: layouts/base.njk
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="post-metadata-copy">
|
<div class="post-metadata-copy">
|
||||||
<p>{% if metadata.author.url %}<a href="{{ metadata.author.url }}">{% endif %}
|
<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>
|
{% if metadata.author.name %}By {{ metadata.author.name }}{% endif %}{% if metadata.author.url %}</a> • {% endif %}<time datetime="{{ page.date | htmlDateString }}">{{ page.date | niceDate }}</time>{% if tags and not tags.includes('quiz') %} • {{ content | emojiReadTime }}{% endif %}</p>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -8,4 +8,3 @@
|
|||||||
<meta name="generator" content="{{ eleventy.generator }}">
|
<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.xml" type="application/atom+xml" title="{{ metadata.title }}">
|
||||||
<link rel="alternate" href="/feed/feed.json" type="application/json" 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,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 %}
|
|
||||||
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>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="siteSettingsToggle" id="weatherController">
|
<form class="siteSettingsToggle" id="weatherController">
|
||||||
<input type="checkbox" id="weatherToggle" {% if metadata.weatherOnByDefault %}checked{% endif %} />
|
<input type="checkbox" id="weatherToggle" {% if metadata.weatherOnByDefault %}checked{% endif %} />
|
||||||
<label for="weatherToggle">Show weather?</label>
|
<label for="weatherToggle">Weather</label>
|
||||||
</form>
|
</form>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<form class="siteSettingsToggle" id="wooModeController">
|
<form class="siteSettingsToggle" id="wooModeController">
|
||||||
<input type="checkbox" id="wooToggle" {% if metadata.wooModeOnByDefault %}checked{% endif %} />
|
<input type="checkbox" id="wooToggle" {% if metadata.wooModeOnByDefault %}checked{% endif %} />
|
||||||
<label for="wooToggle">Woo mode?</label>
|
<label for="wooToggle">Woo mode</label>
|
||||||
</form>
|
</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 -->
|
||||||
@@ -2,8 +2,9 @@
|
|||||||
<button onclick="siteSettings.showModal();">Site Settings</button>
|
<button onclick="siteSettings.showModal();">Site Settings</button>
|
||||||
<dialog id="siteSettings">
|
<dialog id="siteSettings">
|
||||||
<h2>Site Settings</h2>
|
<h2>Site Settings</h2>
|
||||||
{% include "weatherController.njk" %}
|
{% include "settings/controllers/birbController.njk" %}
|
||||||
{% include "wooModeController.njk" %}
|
{% include "settings/controllers/weatherController.njk" %}
|
||||||
|
{% include "settings/controllers/wooModeController.njk" %}
|
||||||
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
||||||
</dialog>
|
</dialog>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<!-- weather -->
|
<!-- weather -->
|
||||||
<!-- Based on https://codepen.io/codeconvey/pen/xRzQay -->
|
<!-- 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. #}
|
{# This include causes a symbol (text, emoji, et cetera; from metadata.weatherSymbol) to fall from the top of the viewport like snow. #}
|
||||||
<div class="fallingObjects" id="weather" aria-hidden="true">
|
<div class="fallingObjects hidden" id="weather" aria-hidden="true">
|
||||||
<div class="fallingObject">
|
<div class="fallingObject">
|
||||||
<div>{{ metadata.weatherSymbol }}</div>
|
<div>{{ metadata.weatherSymbol }}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -35,28 +35,14 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const weather = document.getElementById("weather");
|
const turnOnWeather = (containerId) => {
|
||||||
const weatherToggle = document.getElementById("weatherToggle");
|
const container = document.getElementById(containerId);
|
||||||
const weatherPreference = localStorage.getItem("weather");
|
|
||||||
|
|
||||||
// Initial weather preference check on page load
|
|
||||||
if ({% if metadata.weatherOnByDefault == false %}!weatherPreference || {% endif %}weatherPreference == 0) {
|
|
||||||
weather.classList.add("hidden");
|
|
||||||
weatherToggle.checked = false;
|
|
||||||
} else {
|
|
||||||
weather.classList.remove("hidden");
|
weather.classList.remove("hidden");
|
||||||
weatherToggle.checked = true;
|
}
|
||||||
};
|
|
||||||
|
|
||||||
// Handle weather setting toggle
|
const turnOffWeather = (containerId) => {
|
||||||
weatherToggle.addEventListener('change', function() {
|
const container = document.getElementById(containerId);
|
||||||
if (this.checked) {
|
|
||||||
localStorage.setItem("weather", 1);
|
|
||||||
weather.classList.remove("hidden");
|
|
||||||
} else {
|
|
||||||
localStorage.setItem("weather", 0);
|
|
||||||
weather.classList.add("hidden");
|
weather.classList.add("hidden");
|
||||||
};
|
}
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
<!-- /weather -->
|
<!-- /weather -->
|
||||||
|
|||||||
@@ -1,112 +0,0 @@
|
|||||||
<!-- Weather style -->
|
|
||||||
<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>
|
|
||||||
<!-- / Weather style -->
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<!-- Based on https://codepen.io/tommyho/pen/JjgoZLK -->
|
<!-- Based on https://codepen.io/tommyho/pen/JjgoZLK -->
|
||||||
{# This include replaces the page background with a crazy rainbow animated shader #}
|
{# This include replaces the page background with a crazy rainbow animated shader #}
|
||||||
|
|
||||||
<canvas id="shaderCanvas"></canvas>
|
<canvas class="hidden" id="shaderCanvas"></canvas>
|
||||||
<script src="/js/three.min.js"></script>
|
<script src="/js/three.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
let scene, camera, renderer, uniforms, material, mesh;
|
let scene, camera, renderer, uniforms, material, mesh;
|
||||||
@@ -171,30 +171,11 @@
|
|||||||
uniforms.time.value = timestamp * 0.001;
|
uniforms.time.value = timestamp * 0.001;
|
||||||
renderer.render(scene, camera);
|
renderer.render(scene, camera);
|
||||||
}
|
}
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const wooCanvas = document.getElementById("shaderCanvas");
|
const wooCanvas = document.getElementById("shaderCanvas");
|
||||||
const wooToggle = document.getElementById("wooToggle");
|
|
||||||
const wooPreference = localStorage.getItem("wooMode");
|
|
||||||
let forcedWoo = false;
|
|
||||||
|
|
||||||
// Initial preference check on page load
|
|
||||||
if ({% if metadata.wooModeOnByDefault == false %}!wooPreference || {% endif %}wooPreference == 0) {
|
|
||||||
forcedWoo ? null : wooCanvas.classList.add("hidden");
|
|
||||||
wooToggle.checked = false;
|
|
||||||
} else {
|
|
||||||
wooCanvas.classList.remove("hidden");
|
|
||||||
wooToggle.checked = true;
|
|
||||||
initWoo();
|
|
||||||
animate(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle setting toggle
|
|
||||||
wooToggle.addEventListener('change', function() {
|
|
||||||
if (this.checked) {
|
|
||||||
localStorage.setItem("wooMode", 1);
|
|
||||||
|
|
||||||
|
// Function for when wooMode is toggled on
|
||||||
|
const deployWoo = () => {
|
||||||
let wooAudio = new Audio("/audio/30995__unclesigmund__woo-2.mp3");
|
let wooAudio = new Audio("/audio/30995__unclesigmund__woo-2.mp3");
|
||||||
wooAudio.volume = 0.4;
|
wooAudio.volume = 0.4;
|
||||||
wooAudio.play();
|
wooAudio.play();
|
||||||
@@ -202,21 +183,19 @@
|
|||||||
wooCanvas.classList.remove("hidden");
|
wooCanvas.classList.remove("hidden");
|
||||||
initWoo();
|
initWoo();
|
||||||
animate(0);
|
animate(0);
|
||||||
} else {
|
}
|
||||||
localStorage.setItem("wooMode", 0);
|
|
||||||
forcedWoo ? null : wooCanvas.classList.add("hidden");
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
{% if forcedWoo %}
|
// Function for when wooMode is enabled by default
|
||||||
// Handle forced woo
|
const wooSensibleDefault = () => {
|
||||||
forcedWoo = true;
|
|
||||||
console.log("Forcing woo mode: woo!");
|
|
||||||
wooCanvas.classList.remove("hidden");
|
wooCanvas.classList.remove("hidden");
|
||||||
initWoo();
|
initWoo();
|
||||||
animate(0);
|
animate(0);
|
||||||
{% endif %}
|
}
|
||||||
|
|
||||||
|
// Function for when wooMode is toggled off
|
||||||
|
const withdrawWoo = () => {
|
||||||
|
wooCanvas.classList.add("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<!-- /weather -->
|
<!-- /Woo Mode -->
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
<!-- Woo mode style -->
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
canvas {
|
|
||||||
display: block;
|
|
||||||
opacity: .35;
|
|
||||||
pointer-events: none;
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<!-- / Woo mode style -->
|
|
||||||
@@ -4,7 +4,8 @@ title: Nathan Upchurch | Colophon
|
|||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
|
||||||
# Colophon
|
<h1>Colophon</h1>
|
||||||
|
|
||||||
## What I used to build this website
|
## 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/) (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/).
|
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/).
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ title: Nathan Upchurch | Privacy
|
|||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
|
||||||
# Privacy Statement
|
<h1>Privacy Statement</h1>
|
||||||
|
|
||||||
## Data collection and use
|
## 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) 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.
|
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.
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ structuredData: none
|
|||||||
|
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# AI
|
<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.
|
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)
|
[](/img/the-office-no.gif)
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
export default {
|
export default {
|
||||||
tags: [
|
tags: ["posts", "metadata", "profilePic", "tagList"],
|
||||||
"posts"
|
layout: "layouts/post.njk",
|
||||||
],
|
|
||||||
"layout": "layouts/post.njk",
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ 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."
|
synopsis: "Taking a look at Boy Vienna's viral cigarette incense sticks."
|
||||||
mastodon_id: "114462578542598320"
|
mastodon_id: "114462578542598320"
|
||||||
---
|
---
|
||||||
|
::: 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.
|
[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)
|
[](/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/).
|
||||||
|
|
||||||
@@ -2,6 +2,10 @@
|
|||||||
eleventyExcludeFromCollections: true
|
eleventyExcludeFromCollections: true
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch"
|
title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch"
|
||||||
|
tags:
|
||||||
|
- metadata
|
||||||
|
- postList
|
||||||
|
- tagList
|
||||||
structuredData: none
|
structuredData: none
|
||||||
pagination:
|
pagination:
|
||||||
data: collections.posts
|
data: collections.posts
|
||||||
|
|||||||
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/)?
|
||||||
@@ -1,22 +1,18 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Blogroll
|
title: Nathan Upchurch | Blogroll
|
||||||
|
tags:
|
||||||
|
- blogroll
|
||||||
|
- tagList
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
h1: Blogroll
|
||||||
|
includeTOC: true
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
|
||||||
|
|
||||||
<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="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>
|
|
||||||
|
|
||||||
{% for category in blogroll.categories %}
|
{% for category in blogroll.categories %}
|
||||||
<section class="blogroll">
|
<section class="blogroll">
|
||||||
<h2 id="{{ category.name | slugify }}">{{ category.name }}:<a class="header-anchor" href="#{{ category.name | slugify }}">#</a></h2>
|
<h2 id="{{ category.name | slugify }}">{{ category.name }}<a class="header-anchor" href="#{{ category.name | slugify }}">#</a></h2>
|
||||||
{% for blog in category.blogs %}
|
{% for blog in category.blogs %}
|
||||||
<div class="blogroll-category-group">
|
<div class="blogroll-category-group">
|
||||||
<a href="{{ blog.url }}"><h3>{{ blog.title }}</h3></a>
|
<a href="{{ blog.url }}"><h3>{{ blog.title }}</h3></a>
|
||||||
@@ -36,5 +32,3 @@ structuredData: none
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|||||||
@@ -2,12 +2,44 @@
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Changelog
|
title: Nathan Upchurch | Changelog
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
h1: Changelog
|
||||||
|
includeTOC: true
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
## 2026
|
||||||
|
### May
|
||||||
|
* 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).
|
||||||
|
|
||||||
# Changelog
|
### 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
|
* 2026-04-07
|
||||||
* Updated [/wish](/wish).
|
* Updated [/wish](/wish).
|
||||||
|
|
||||||
|
### March
|
||||||
* 2026-03-16
|
* 2026-03-16
|
||||||
* Updated [/incense](/incense).
|
* Updated [/incense](/incense).
|
||||||
* Updated [/links](/links).
|
* Updated [/links](/links).
|
||||||
@@ -20,6 +52,8 @@ structuredData: none
|
|||||||
* Updated [/incense](/incense).
|
* Updated [/incense](/incense).
|
||||||
* 2026-03-05
|
* 2026-03-05
|
||||||
* Updated [/wish](/wish) and [/incense](/incense).
|
* Updated [/wish](/wish) and [/incense](/incense).
|
||||||
|
|
||||||
|
### February
|
||||||
* 2026-02-07
|
* 2026-02-07
|
||||||
* Updated [/wish](/wish).
|
* Updated [/wish](/wish).
|
||||||
* 2026-02-04
|
* 2026-02-04
|
||||||
@@ -28,6 +62,8 @@ structuredData: none
|
|||||||
* Implement togglable site-wide Woo-Mode™ in site settings.
|
* Implement togglable site-wide Woo-Mode™ in site settings.
|
||||||
* 2026-02-01
|
* 2026-02-01
|
||||||
* Added [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator).
|
* Added [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator).
|
||||||
|
|
||||||
|
### January
|
||||||
* 2026-01-21
|
* 2026-01-21
|
||||||
* Updated [blogroll](/blogroll).
|
* Updated [blogroll](/blogroll).
|
||||||
* 2026-01-16
|
* 2026-01-16
|
||||||
@@ -48,6 +84,9 @@ structuredData: none
|
|||||||
* Updated [/sitemap](/sitemap).
|
* Updated [/sitemap](/sitemap).
|
||||||
* Organized site source files.
|
* 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).
|
* 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
|
* 2025-12-16
|
||||||
* Updated [/links](/links).
|
* Updated [/links](/links).
|
||||||
* 2025-12-08
|
* 2025-12-08
|
||||||
@@ -56,6 +95,8 @@ structuredData: none
|
|||||||
* Added [/ai](/ai) [slashpage](https://slashpages.net/) a la [the /ai 'manifesto'](https://www.bydamo.la/p/ai-manifesto).
|
* 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 [/blank](/blank) [slashpage](https://slashpages.net/).
|
||||||
* Added [/referrals](/referrals) [slashpage](https://slashpages.net/).
|
* Added [/referrals](/referrals) [slashpage](https://slashpages.net/).
|
||||||
|
|
||||||
|
### November
|
||||||
* 2025-11-28
|
* 2025-11-28
|
||||||
* Added styling for [guestbook](/guestbook) replies now that [the reply feature](https://codeberg.org/meadowingc/guestbooks/issues/25) is live.
|
* 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.
|
* The [main RSS feed](/feed/feed.xml) now includes [now](/now) entries.
|
||||||
@@ -68,6 +109,8 @@ structuredData: none
|
|||||||
* Updated [/incense](/incense).
|
* Updated [/incense](/incense).
|
||||||
* Added snow / weather, and site settings button and dialog.
|
* Added snow / weather, and site settings button and dialog.
|
||||||
* Added [/links](/links).
|
* Added [/links](/links).
|
||||||
|
|
||||||
|
### October
|
||||||
* 2025-10-20
|
* 2025-10-20
|
||||||
* Added [Moist Poetry Journal](https://moistpoetryjournal.com) to the [blogroll](/blogroll).
|
* Added [Moist Poetry Journal](https://moistpoetryjournal.com) to the [blogroll](/blogroll).
|
||||||
* Removed some less active and/or abandoned blogs from the [blogroll](/blogroll).
|
* Removed some less active and/or abandoned blogs from the [blogroll](/blogroll).
|
||||||
@@ -81,10 +124,14 @@ structuredData: none
|
|||||||
* Created [/incense](/incense).
|
* Created [/incense](/incense).
|
||||||
* Added "not by AI" badge.
|
* Added "not by AI" badge.
|
||||||
* Updated [/sitemap](/sitemap).
|
* Updated [/sitemap](/sitemap).
|
||||||
|
|
||||||
|
### August
|
||||||
* 2025-08-22
|
* 2025-08-22
|
||||||
* Updated [/wish](/wish).
|
* Updated [/wish](/wish).
|
||||||
* 2025-08-14
|
* 2025-08-14
|
||||||
* Implemented a [guestbook](/guestbook/).
|
* Implemented a [guestbook](/guestbook/).
|
||||||
|
|
||||||
|
### July
|
||||||
* 2025-07-29
|
* 2025-07-29
|
||||||
* Added [The 74](https://www.the74million.org/) to the [blogroll](/blogroll).
|
* Added [The 74](https://www.the74million.org/) to the [blogroll](/blogroll).
|
||||||
* 2025-07-14
|
* 2025-07-14
|
||||||
@@ -98,6 +145,8 @@ structuredData: none
|
|||||||
* Added [Toxel](https://www.toxel.com/) to the [blogroll](/blogroll).
|
* Added [Toxel](https://www.toxel.com/) to the [blogroll](/blogroll).
|
||||||
* 2025-07-02
|
* 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).
|
* 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
|
* 2025-06-26
|
||||||
* Added [Justine the Incenseur](https://justinetheincenseur.substack.com) to the [blogroll](/blogroll).
|
* Added [Justine the Incenseur](https://justinetheincenseur.substack.com) to the [blogroll](/blogroll).
|
||||||
* 2025-06-24
|
* 2025-06-24
|
||||||
@@ -106,6 +155,8 @@ structuredData: none
|
|||||||
* Added [Freethought Blogs](https://freethoughtblogs.com/) and [Cwyn's Death by Tea](https://deathbytea.blogspot.com/) to the [blogroll](/blogroll).
|
* Added [Freethought Blogs](https://freethoughtblogs.com/) and [Cwyn's Death by Tea](https://deathbytea.blogspot.com/) to the [blogroll](/blogroll).
|
||||||
* 2025-06-06
|
* 2025-06-06
|
||||||
* Implement [/now-burning](/now-burning/) and [/once-burned](/once-burned/).
|
* Implement [/now-burning](/now-burning/) and [/once-burned](/once-burned/).
|
||||||
|
|
||||||
|
### April
|
||||||
* 2025-04-19
|
* 2025-04-19
|
||||||
* Improve post list image sizing on mobile.
|
* Improve post list image sizing on mobile.
|
||||||
* 2025-04-08
|
* 2025-04-08
|
||||||
@@ -114,6 +165,8 @@ structuredData: none
|
|||||||
* Updated the [colophon](/about/colophon/).
|
* Updated the [colophon](/about/colophon/).
|
||||||
* 2025-04-03
|
* 2025-04-03
|
||||||
* Added [Graphic Rage with Aubrey Hirsch](https://aubreyhirsch.substack.com/) and [Usermag](https://www.usermag.co/) to the [blogroll](/blogroll).
|
* Added [Graphic Rage with Aubrey Hirsch](https://aubreyhirsch.substack.com/) and [Usermag](https://www.usermag.co/) to the [blogroll](/blogroll).
|
||||||
|
|
||||||
|
### March
|
||||||
* 2025-03-28
|
* 2025-03-28
|
||||||
* Updated header on [/tags/](/tags/).
|
* Updated header on [/tags/](/tags/).
|
||||||
* 2025-03-27
|
* 2025-03-27
|
||||||
@@ -124,6 +177,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.
|
* 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
|
* 2025-03-11
|
||||||
* Updated [/wish](/wish).
|
* Updated [/wish](/wish).
|
||||||
|
|
||||||
|
### February
|
||||||
* 2025-02-21
|
* 2025-02-21
|
||||||
* Updated [/wish](/wish) again as my mum bought me some incense sticks for my birthday.
|
* Updated [/wish](/wish) again as my mum bought me some incense sticks for my birthday.
|
||||||
* 2025-02-20
|
* 2025-02-20
|
||||||
@@ -145,6 +200,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.
|
* 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.
|
* 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).
|
* 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
|
* 2025-01-31
|
||||||
* Update the copyright notice in the footer.
|
* Update the copyright notice in the footer.
|
||||||
* 2025-1-29
|
* 2025-1-29
|
||||||
@@ -158,6 +215,9 @@ structuredData: none
|
|||||||
* Prettier date formatting throughout.
|
* Prettier date formatting throughout.
|
||||||
* 2025-1-13
|
* 2025-1-13
|
||||||
* Added [Popular Information](https://popular.info/) to the [blogroll](/blogroll).
|
* Added [Popular Information](https://popular.info/) to the [blogroll](/blogroll).
|
||||||
|
|
||||||
|
## 2024
|
||||||
|
### December
|
||||||
* 2024-12-16
|
* 2024-12-16
|
||||||
* Update PeerTube instance on [/me](/me).
|
* Update PeerTube instance on [/me](/me).
|
||||||
* 2024-12-15
|
* 2024-12-15
|
||||||
@@ -171,5 +231,3 @@ structuredData: none
|
|||||||
* Added [Aftermath](https://aftermath.site/) to the [blogroll](/blogroll).
|
* Added [Aftermath](https://aftermath.site/) to the [blogroll](/blogroll).
|
||||||
* Implemented [/changelog](/changelog) 🎉.
|
* Implemented [/changelog](/changelog) 🎉.
|
||||||
* Implemented [/ai](/ai) a la [slashai.page](https://slashai.page/).
|
* Implemented [/ai](/ai) a la [slashai.page](https://slashai.page/).
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ pagination:
|
|||||||
size: 1
|
size: 1
|
||||||
alias: picture
|
alias: picture
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
|
tags:
|
||||||
|
- galleryImage
|
||||||
structuredData: none
|
structuredData: none
|
||||||
eleventyComputed:
|
eleventyComputed:
|
||||||
imageURL: "{{ picture.baseUrl }}/{{ picture.filename }}"
|
imageURL: "{{ picture.baseUrl }}/{{ picture.filename }}"
|
||||||
|
|||||||
@@ -4,8 +4,11 @@ pagination:
|
|||||||
size: 1
|
size: 1
|
||||||
alias: gallery
|
alias: gallery
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
tags: gallery
|
tags:
|
||||||
|
- gallery
|
||||||
|
- galleryImage
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
eleventyComputed:
|
eleventyComputed:
|
||||||
title: "{{ gallery.title }}"
|
title: "{{ gallery.title }}"
|
||||||
permalink: "/gallery/{{ gallery.title | slugify }}/"
|
permalink: "/gallery/{{ gallery.title | slugify }}/"
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
|
tags:
|
||||||
|
- metadata
|
||||||
|
- postList
|
||||||
---
|
---
|
||||||
<div data-pagefind-body>
|
<div data-pagefind-body>
|
||||||
<h1>My image galleries.</h1>
|
<h1>My image galleries</h1>
|
||||||
<p class="page-block nodropcap">
|
<p class="page-block nodropcap">
|
||||||
Photography trips, memes, and other pictures I thought would be worth sharing.
|
Photography trips, memes, and other pictures I thought would be worth sharing.
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Guestbook
|
title: Nathan Upchurch | Guestbook
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
tags:
|
||||||
|
- guestbook
|
||||||
---
|
---
|
||||||
<h1>Sign My Guestbook</h1>
|
<h1>Sign My Guestbook</h1>
|
||||||
<!-- Guestbook Script -->
|
<!-- Guestbook Script -->
|
||||||
|
|||||||
@@ -2,10 +2,9 @@
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Incense
|
title: Nathan Upchurch | Incense
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
includeTOC: true
|
||||||
|
h1: "Incense: Writing & Resources"
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
|
||||||
|
|
||||||
# Incense: Writing & Resources
|
|
||||||
::: info
|
::: info
|
||||||
For my writing on incense see [the incense tag page](/tags/incense). Is this page missing something? [Let me know](/me).
|
For my writing on incense see [the incense tag page](/tags/incense). Is this page missing something? [Let me know](/me).
|
||||||
:::
|
:::
|
||||||
@@ -31,8 +30,10 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
|||||||
|
|
||||||
## Advanced Incense Making Techniques
|
## Advanced Incense Making Techniques
|
||||||
### Articles
|
### 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)
|
* [*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)
|
* [*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)
|
* [*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/)
|
* [*Washing Frankincense*, Nathan Upchurch](/blog/washing-frankincense/)
|
||||||
|
|
||||||
@@ -41,10 +42,13 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
|||||||
|
|
||||||
## Writing on Incense and Related Topics
|
## Writing on Incense and Related Topics
|
||||||
### Articles
|
### 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 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 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/)
|
* [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/)
|
* [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/)
|
* [*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/)
|
* [*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)
|
* [*The Wisdom of Traditional Processing Methods*, Dr. Incense](https://dr-incense.com/blogs/dr-incense-blog/the-wisdom-of-traditional-processing-methods)
|
||||||
@@ -97,12 +101,15 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
|||||||
* [New Mountain Merchants (Australia)](https://newmountain.com.au/)—Oils, Woods
|
* [New Mountain Merchants (Australia)](https://newmountain.com.au/)—Oils, Woods
|
||||||
* [ResinaeBotanica (UK)](https://www.etsy.com/shop/ResinaeBotanica)—Resins
|
* [ResinaeBotanica (UK)](https://www.etsy.com/shop/ResinaeBotanica)—Resins
|
||||||
* [Scents of Earth (USA)](https://scents-of-earth.com/)—Absolutes, Herbs, Oils, Resins, Woods
|
* [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 Incense Dragon (USA)](https://www.theincensedragon.com/supplies)—Herbs, Resins, Woods
|
||||||
* [The World Makes Scents (USA)](https://theworldmakesscents.com/)—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
|
## 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
|
## 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):
|
* [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):
|
||||||
@@ -111,8 +118,8 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
|||||||
* [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.
|
* [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
|
## Fun
|
||||||
|
* [Incense Ingredient Quiz](/quizzes/incense-ingredient-quiz/)
|
||||||
* [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator)
|
* [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]: 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.
|
||||||
</article>
|
|
||||||
|
|||||||
@@ -2,11 +2,9 @@
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Links
|
title: Nathan Upchurch | Links
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
h1: Links
|
||||||
|
includeTOC: true
|
||||||
---
|
---
|
||||||
|
|
||||||
<article data-pagefind-body>
|
|
||||||
|
|
||||||
# Links
|
|
||||||
Here are some links to pages and resources that I believe are worth sharing.
|
Here are some links to pages and resources that I believe are worth sharing.
|
||||||
## Design tools and resources
|
## Design tools and resources
|
||||||
### Education
|
### Education
|
||||||
@@ -261,5 +259,9 @@ Unlimited creativity, zero ads.
|
|||||||
* VPN
|
* VPN
|
||||||
## Random cool stuff
|
## 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.
|
* [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.
|
||||||
</article>
|
## Sounds & Samples
|
||||||
|
* [FreeSound](https://freesound.org/)
|
||||||
|
* [LooperMan](https://www.looperman.com/)
|
||||||
|
* [Pixabay](https://pixabay.com/sound-effects/)
|
||||||
|
* [SampleSwap](https://sampleswap.org/index.php)
|
||||||
|
|||||||
@@ -2,10 +2,9 @@
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: "Nathan Upchurch | Not Amazon"
|
title: "Nathan Upchurch | Not Amazon"
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
h1: Not Amazon
|
||||||
|
includeTOC: true
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
|
||||||
|
|
||||||
# Not Amazon
|
|
||||||
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.
|
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
|
## Clothing & Apparel
|
||||||
@@ -114,6 +113,7 @@ Mostly for my own use, this is a list of U.S.-based online shops that are not Am
|
|||||||
### Bath & Body
|
### Bath & Body
|
||||||
* [Ethique](https://ethique.com/)—Shampoo and conditioner bars from Aotearoa New Zealand.
|
* [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.
|
* [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.
|
* [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.
|
* [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).
|
* [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).
|
||||||
@@ -129,5 +129,3 @@ Mostly for my own use, this is a list of U.S.-based online shops that are not Am
|
|||||||
[^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.
|
[^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.
|
[^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.
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|||||||
7
content/now-burning/Now Burning_2026-04-07_10:46.md
Normal file
7
content/now-burning/Now Burning_2026-04-07_10:46.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Morning Star Pine
|
||||||
|
manufacturer: Nippon Kodo
|
||||||
|
date: 2026-04-07 10:46:00
|
||||||
|
time: 10:46 AM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-04-08_15:58.md
Normal file
7
content/now-burning/Now Burning_2026-04-08_15:58.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Frankincense & Myrrh with Sacred Sage"
|
||||||
|
manufacturer: Fred Soll
|
||||||
|
date: 2026-04-08 15:57:00
|
||||||
|
time: 3:57 PM
|
||||||
|
---
|
||||||
|
A very powerfully fragranced stick.
|
||||||
7
content/now-burning/Now Burning_2026-04-13_13:02.md
Normal file
7
content/now-burning/Now Burning_2026-04-13_13:02.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Hagi
|
||||||
|
manufacturer: Tennendo
|
||||||
|
date: 2026-04-13 13:02:00
|
||||||
|
time: 1:02 PM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-04-14_19:33.md
Normal file
7
content/now-burning/Now Burning_2026-04-14_19:33.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Koin
|
||||||
|
manufacturer: Gyokushodo
|
||||||
|
date: 2026-04-14 19:33:00
|
||||||
|
time: 7:33 PM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-04-15_11:31.md
Normal file
7
content/now-burning/Now Burning_2026-04-15_11:31.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Friend of Pine
|
||||||
|
manufacturer: Shoyeido
|
||||||
|
date: 2026-04-15 11:31:00
|
||||||
|
time: 11:31 AM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-04-18_19:16.md
Normal file
7
content/now-burning/Now Burning_2026-04-18_19:16.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Nag Champa Cotton Candy
|
||||||
|
manufacturer: Satya
|
||||||
|
date: 2026-04-18 19:15:00
|
||||||
|
time: 7:15 PM
|
||||||
|
---
|
||||||
|
Smells like burning sugar.
|
||||||
7
content/now-burning/Now Burning_2026-04-27_10:18.md
Normal file
7
content/now-burning/Now Burning_2026-04-27_10:18.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Suzaku
|
||||||
|
manufacturer: Gyokushodo
|
||||||
|
date: 2026-04-27 10:18:00
|
||||||
|
time: 10:18 AM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-04-29_09:38.md
Normal file
7
content/now-burning/Now Burning_2026-04-29_09:38.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Kin-Kaku (Golden Pavilion)"
|
||||||
|
manufacturer: Shoyeido
|
||||||
|
date: 2026-04-29 09:37:00
|
||||||
|
time: 9:37 AM
|
||||||
|
---
|
||||||
|
It took me a while to warm up to these sticks. No idea why—they're lovely.
|
||||||
7
content/now-burning/Now Burning_2026-04-29_11:11.md
Normal file
7
content/now-burning/Now Burning_2026-04-29_11:11.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Butterfly Spring Incense
|
||||||
|
manufacturer: Lijiali
|
||||||
|
date: 2026-04-29 11:11:00
|
||||||
|
time: 11:11 AM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-05-01_13:18.md
Normal file
7
content/now-burning/Now Burning_2026-05-01_13:18.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Moss Garden (Nokiba)"
|
||||||
|
manufacturer: Shoyeido
|
||||||
|
date: 2026-05-01 13:18:00
|
||||||
|
time: 1:18 PM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-05-01_19:57.md
Normal file
7
content/now-burning/Now Burning_2026-05-01_19:57.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Boswellia Carterii
|
||||||
|
manufacturer: Scents of Earth
|
||||||
|
date: 2026-05-01 19:57:00
|
||||||
|
time: 7:57 PM
|
||||||
|
---
|
||||||
|
Lovely notes of cold cantaloupe and honey.
|
||||||
7
content/now-burning/Now Burning_2026-05-04_10:00.md
Normal file
7
content/now-burning/Now Burning_2026-05-04_10:00.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Sarasoju
|
||||||
|
manufacturer: Shunkohdo
|
||||||
|
date: 2026-05-04 10:00:00
|
||||||
|
time: 10:00 AM
|
||||||
|
---
|
||||||
|
Killer daily sandalwood stick.
|
||||||
7
content/now-burning/Now Burning_2026-05-05_09:11.md
Normal file
7
content/now-burning/Now Burning_2026-05-05_09:11.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Suzaku
|
||||||
|
manufacturer: Gyokushodo
|
||||||
|
date: 2026-05-05 9:11:00
|
||||||
|
time: 9:11 AM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-05-05_11:44.md
Normal file
7
content/now-burning/Now Burning_2026-05-05_11:44.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Menthamericana
|
||||||
|
manufacturer: Xinú
|
||||||
|
date: 2026-05-05 11:44:00
|
||||||
|
time: 11:44 PM
|
||||||
|
---
|
||||||
|
|
||||||
7
content/now-burning/Now Burning_2026-05-09_14:52.md
Normal file
7
content/now-burning/Now Burning_2026-05-09_14:52.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Frankincense Oman
|
||||||
|
manufacturer: Tennendo
|
||||||
|
date: 2026-05-09 14:52:00
|
||||||
|
time: 2:52 PM
|
||||||
|
---
|
||||||
|
Only three sticks left! :[
|
||||||
7
content/now-burning/Now Burning_2026-05-11_09:52.md
Normal file
7
content/now-burning/Now Burning_2026-05-11_09:52.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Excellentia (Shira-giku)"
|
||||||
|
manufacturer: Shoyeido
|
||||||
|
date: 2026-05-11 9:51:00
|
||||||
|
time: 9:51 AM
|
||||||
|
---
|
||||||
|
Some days you just find yourself in the mood for nine hours of continuous fragrance.
|
||||||
@@ -3,9 +3,13 @@ eleventyExcludeFromCollections: true
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Now
|
title: Nathan Upchurch | Now
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
tags:
|
||||||
|
- metadata
|
||||||
|
- postList
|
||||||
|
- tagList
|
||||||
---
|
---
|
||||||
<article class="post" data-pagefind-body>
|
<article class="post" data-pagefind-body>
|
||||||
<h1>Now: Life updates.</h1>
|
<h1>Now: Life updates</h1>
|
||||||
{% set now = collections.now | last %}
|
{% set now = collections.now | last %}
|
||||||
<h2>{{ now.data.title }} • {{ now.date | niceDate }}</h2>
|
<h2>{{ now.data.title }} • {{ now.date | niceDate }}</h2>
|
||||||
{{ now.content | safe }}
|
{{ now.content | safe }}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export default {
|
export default {
|
||||||
tags: ["now"],
|
tags: ["now", "metadata", "profilePic", "tags"],
|
||||||
layout: "layouts/post.njk",
|
layout: "layouts/post.njk",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: "Nathan Upchurch | Once Burned: Incense I've burning in the past."
|
eleventyExcludeFromCollections: true
|
||||||
|
tags:
|
||||||
|
- nowBurning
|
||||||
|
- metadata
|
||||||
|
title: "Nathan Upchurch | Once Burned: Incense I've burned in the past."
|
||||||
structuredData: none
|
structuredData: none
|
||||||
pagination:
|
pagination:
|
||||||
data: collections.onceBurned
|
data: collections.onceBurned
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
---
|
---
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: "Nathan Upchurch | Prior Thoughts"
|
title: "Nathan Upchurch | Prior Thoughts"
|
||||||
|
tags:
|
||||||
|
- status
|
||||||
pagination:
|
pagination:
|
||||||
data: collections.priorThoughts
|
data: collections.priorThoughts
|
||||||
generatePageOnEmptyData: true
|
generatePageOnEmptyData: true
|
||||||
|
|||||||
300
content/quizzes/incense-ingredient-quiz.md
Normal file
300
content/quizzes/incense-ingredient-quiz.md
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
---
|
||||||
|
title: "Incense Ingredient Quiz"
|
||||||
|
description: "How well do you know your incense ingredients?"
|
||||||
|
date: 2026-04-26
|
||||||
|
imageURL: "/img/quizzes/incense/incense-ingredient-quiz.webp"
|
||||||
|
imageAlt: "A very serene photo of a burning cone of incense."
|
||||||
|
consequences:
|
||||||
|
- title: "What happened buddy?"
|
||||||
|
points: 0
|
||||||
|
spiel: "Damn, this didn’t go so well, did it? I’m sure with some time and effort you’ll do better!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-0.gif"
|
||||||
|
imageAlt: "An animated GIF of Homer Simpson being hit by a thurible. The caption reads: Perfumed by some unseen censer, Doh! Stupid censer."
|
||||||
|
- title: "You’ve got a lot to learn!"
|
||||||
|
points: 20
|
||||||
|
spiel: "You got a handful right, but it’s time to hit the books!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-20.gif"
|
||||||
|
imageAlt: "An animated GIF of Spongebob Squarepants reading a checklist of Mermaid Man and Barnacle Boy merchandise items as the camera pans across a room containing them. The items are: thermometer, ukulele, throw pillow, screensaver, incense, snail cozy, headgear."
|
||||||
|
- title: "Not too bad."
|
||||||
|
points: 40
|
||||||
|
spiel: "You’ve got a way to go, but there's no doubt you know a thing or two about incense!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-40.gif"
|
||||||
|
imageAlt: "An animated GIF of a chunk of frankincense smoking on top of a charcoal disk."
|
||||||
|
- title: "You’ve got a mind for incense!"
|
||||||
|
points: 60
|
||||||
|
spiel: "You got over half of the questions right. This is some obscure knowledge—I hope you’re proud of yourself!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-60.gif"
|
||||||
|
imageAlt: "An animated GIF of Principal Skinner dressed as one of the biblical three kings offering frankincense."
|
||||||
|
- title: "You’re good at this!"
|
||||||
|
points: 80
|
||||||
|
spiel: "You really know your incense ingredients! Well done!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-80.gif"
|
||||||
|
imageAlt: "An animated GIF of a women with strings of jewels around her head blowing out the flame of a stick of incense."
|
||||||
|
- title: "Perfect score!"
|
||||||
|
points: 100
|
||||||
|
spiel: "Either you checked the source code, or you really know your stuff! Congratulations!"
|
||||||
|
image: "/img/quizzes/incense/results/incense-quiz-100.gif"
|
||||||
|
imageAlt: "An animated GIF of smoke rising from a stick of incense."
|
||||||
|
questions:
|
||||||
|
- title: "Which of these ingredients is associated with hippies?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Styrax tonkinensis"
|
||||||
|
points: 0
|
||||||
|
- name: "Pogostemon cablin"
|
||||||
|
points: 5
|
||||||
|
- name: "Cinnamomum camphora"
|
||||||
|
points: 0
|
||||||
|
- name: "Ferula moschata"
|
||||||
|
points: 0
|
||||||
|
- title: "This ingredient is known for its peachy fragrance."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Osmanthus"
|
||||||
|
points: 5
|
||||||
|
- name: "Mastic"
|
||||||
|
points: 0
|
||||||
|
- name: "Acacia gum"
|
||||||
|
points: 0
|
||||||
|
- name: "Opoponax"
|
||||||
|
points: 0
|
||||||
|
- title: "Which of these is a type of frankincense?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Bursera fagaroides"
|
||||||
|
points: 0
|
||||||
|
- name: "Eriodictyon californicum"
|
||||||
|
points: 0
|
||||||
|
- name: "Commiphora wightii"
|
||||||
|
points: 0
|
||||||
|
- name: "Boswellia neglecta"
|
||||||
|
points: 5
|
||||||
|
- title: "Which is a type of myrrh?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Bursera fagaroides"
|
||||||
|
points: 0
|
||||||
|
- name: "Eriodictyon californicum"
|
||||||
|
points: 0
|
||||||
|
- name: "Commiphora wightii"
|
||||||
|
points: 5
|
||||||
|
- name: "Boswellia neglecta"
|
||||||
|
points: 0
|
||||||
|
- title: "Your incense sticks are having trouble burning. Which of these ingredients might you add to fix the problem?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Acacia gum"
|
||||||
|
points: 0
|
||||||
|
- name: "Charcoal"
|
||||||
|
points: 5
|
||||||
|
- name: "Clove"
|
||||||
|
points: 5
|
||||||
|
- name: "Myrrh"
|
||||||
|
points: 0
|
||||||
|
- title: "Your incense sticks are having trouble burning. Which of these ingredients is a likely culprit?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Myrrh"
|
||||||
|
points: 5
|
||||||
|
- name: "Cinnamon"
|
||||||
|
points: 0
|
||||||
|
- name: "Charcoal"
|
||||||
|
points: 0
|
||||||
|
- name: "Guar gum"
|
||||||
|
points: 5
|
||||||
|
- title: "Which of these food items is not commonly used in incense?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Plums"
|
||||||
|
points: 0
|
||||||
|
- name: "Wheat gluten"
|
||||||
|
points: 5
|
||||||
|
- name: "Corn starch"
|
||||||
|
points: 0
|
||||||
|
- name: "Pears"
|
||||||
|
points: 0
|
||||||
|
- title: "Which incense ingredient is not mentioned in the Song of Solomon?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Sandalwood"
|
||||||
|
points: 5
|
||||||
|
- name: "Cedar"
|
||||||
|
points: 0
|
||||||
|
- name: "Frankincense"
|
||||||
|
points: 0
|
||||||
|
- name: "Calamus"
|
||||||
|
points: 0
|
||||||
|
- title: "This ingredient comes from the island of Chios, Greece."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Spikenard"
|
||||||
|
points: 0
|
||||||
|
- name: "Mastic"
|
||||||
|
points: 5
|
||||||
|
- name: "Benzoin"
|
||||||
|
points: 0
|
||||||
|
- name: "Osmanthus"
|
||||||
|
points: 0
|
||||||
|
- title: "This ingredient can sometimes be harvested by combing the beards of goats."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Galbanum"
|
||||||
|
points: 0
|
||||||
|
- name: "Almond tree gum"
|
||||||
|
points: 0
|
||||||
|
- name: "Colophony resin"
|
||||||
|
points: 0
|
||||||
|
- name: "Labdanum"
|
||||||
|
points: 5
|
||||||
|
- title: "This ingredient is banned for use in food in the USA because of its high levels of coumarin."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Tonka beans"
|
||||||
|
points: 5
|
||||||
|
- name: "Ambrette seeds"
|
||||||
|
points: 0
|
||||||
|
- name: "Guggul"
|
||||||
|
points: 0
|
||||||
|
- name: "Valerian"
|
||||||
|
points: 0
|
||||||
|
- title: "Which resin is typically the squishiest?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Guggul"
|
||||||
|
points: 0
|
||||||
|
- name: "Elemi"
|
||||||
|
points: 5
|
||||||
|
- name: "Dragon’s blood"
|
||||||
|
points: 0
|
||||||
|
- name: "Palo santo"
|
||||||
|
points: 0
|
||||||
|
- title: "This wood needs to lay dead for a few years before it develops its characteristic fragrance."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Agarwood"
|
||||||
|
points: 0
|
||||||
|
- name: "Juniper"
|
||||||
|
points: 0
|
||||||
|
- name: "Sandalwood"
|
||||||
|
points: 0
|
||||||
|
- name: "Palo santo"
|
||||||
|
points: 5
|
||||||
|
- title: "This wood develops its fragrance when attacked by insects or fungus."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Sandalwood"
|
||||||
|
points: 0
|
||||||
|
- name: "Cedar"
|
||||||
|
points: 0
|
||||||
|
- name: "Agarwood"
|
||||||
|
points: 5
|
||||||
|
- name: "Rosewood"
|
||||||
|
points: 0
|
||||||
|
- title: "Which of these gums is the weakest binder?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Guar"
|
||||||
|
points: 0
|
||||||
|
- name: "Acacia"
|
||||||
|
points: 5
|
||||||
|
- name: "Xanthan"
|
||||||
|
points: 0
|
||||||
|
- name: "Tragacanth"
|
||||||
|
points: 0
|
||||||
|
- title: "Which of these is not the name of a binder?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Laha"
|
||||||
|
points: 0
|
||||||
|
- name: "Jigat"
|
||||||
|
points: 0
|
||||||
|
- name: "Nanmu"
|
||||||
|
points: 0
|
||||||
|
- name: "Slippery pine"
|
||||||
|
points: 5
|
||||||
|
- title: "Which of these animal parts or secretions is not likely to be found in an incense formula?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Dung"
|
||||||
|
points: 0
|
||||||
|
- name: "Fur"
|
||||||
|
points: 5
|
||||||
|
- name: "Opercula"
|
||||||
|
points: 0
|
||||||
|
- name: "Bezoars"
|
||||||
|
points: 0
|
||||||
|
- title: "Which is not endangered?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Bursera graveolens"
|
||||||
|
points: 5
|
||||||
|
- name: "Nardostachys jatamansi"
|
||||||
|
points: 0
|
||||||
|
- name: "Aquilaria crassna"
|
||||||
|
points: 0
|
||||||
|
- name: "Bulnesia sarmientoi"
|
||||||
|
points: 0
|
||||||
|
- title: "This ingredient is associated with a cluster of love poems by Walt Whitman."
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Calamus"
|
||||||
|
points: 5
|
||||||
|
- name: "Camphor"
|
||||||
|
points: 0
|
||||||
|
- name: "Colophony"
|
||||||
|
points: 0
|
||||||
|
- name: "Costus"
|
||||||
|
points: 0
|
||||||
|
- title: "Which ingredient is not a root?"
|
||||||
|
image:
|
||||||
|
imageAlt:
|
||||||
|
imageCaption:
|
||||||
|
answers:
|
||||||
|
- name: "Rhubarb"
|
||||||
|
points: 0
|
||||||
|
- name: "Calamus"
|
||||||
|
points: 0
|
||||||
|
- name: "Sumbul"
|
||||||
|
points: 0
|
||||||
|
- name: "Styrax"
|
||||||
|
points: 5
|
||||||
|
---
|
||||||
|
Do you know your lavender from your labdanum? Test your knowledge on a range of whole-plant incense ingredients.
|
||||||
@@ -2,17 +2,19 @@
|
|||||||
eleventyExcludeFromCollections: true
|
eleventyExcludeFromCollections: true
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Quizzes
|
title: Nathan Upchurch | Quizzes
|
||||||
|
tags:
|
||||||
|
- metadata
|
||||||
structuredData: none
|
structuredData: none
|
||||||
description: "Bored? Take a fun quiz to while away the time!"
|
description: "Bored? Take a fun quiz to while away the time!"
|
||||||
---
|
---
|
||||||
<div data-pagefind-body>
|
<div data-pagefind-body>
|
||||||
|
|
||||||
<h1>Quizzes</h1>
|
<h1>Take a quiz</h1>
|
||||||
<p>Test your knowledge, learn about yourself, and waste your precious time, right here, right now, with a quiz!</p>
|
<p>Test your knowledge, learn about yourself, and waste your precious time, right here, right now, with a quiz!</p>
|
||||||
|
|
||||||
{% set postsCount = collections.quiz | length %}
|
{% set postsCount = collections.quiz | length %}
|
||||||
<h2>Available Quizzes:</h2>
|
<h2>Available quizzes:</h2>
|
||||||
{% set postslist = collections.quiz %}
|
{% set postslist = collections.quiz | reverse %}
|
||||||
{% set showPostListHeader = false %}
|
{% set showPostListHeader = false %}
|
||||||
{% include "postslist.njk" %}
|
{% include "postslist.njk" %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export default {
|
export default {
|
||||||
tags: ["quiz"],
|
tags: ["quiz", "metadata", "profilePic", "postList"],
|
||||||
layout: "layouts/quizzes.njk",
|
layout: "layouts/quizzes.njk",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,11 +5,15 @@ structuredData: none
|
|||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Referrals / Affiliate Links
|
<h1>Referrals / Affiliate Links</h1>
|
||||||
|
|
||||||
Here are some referral links to services / products that I use and recommend. Yes, I do get a kickback if you buy something using these links.
|
Here are some referral links to services / products that I use and recommend. Yes, I do get a kickback if you buy something using these links.
|
||||||
|
|
||||||
|
## Privacy
|
||||||
|
* [Ingogni](incogni.cello.so/IaqbIpynCTd) is a service that continuously works to get your personal information from data broker databases.
|
||||||
|
* [NordVPN](https://refer-nordvpn.com/PhakTfcNHcX) is a VPN service.
|
||||||
|
|
||||||
## Web Hosting, Storage, and VPS
|
## Web Hosting, Storage, and VPS
|
||||||
I like [Interserver](https://www.interserver.net/r/745483). They've always been quick to resolve any issues, I like the dashboard with integrated VNC, and their storage VPS' are super cheap.
|
* I like [Interserver](https://www.interserver.net/r/745483). They've always been quick to resolve any issues, I like the dashboard with integrated VNC, and their storage VPS' are super cheap.
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ title: Nathan Upchurch | Sitemap
|
|||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
<h1>Sitemap</h1>
|
||||||
|
|
||||||
# Sitemap
|
|
||||||
* [Home](/)
|
* [Home](/)
|
||||||
* [About](/about)
|
* [About](/about)
|
||||||
* [AI](/ai)
|
* [AI](/ai)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ structuredData: none
|
|||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Slashes
|
<h1>Slashes</h1>
|
||||||
|
|
||||||
This is an index of all my [slash pages](https://slashpages.net/). These are pages you can add to your website, usually with a standard slugs like [/now](/now), [/about](/about), or [/sitemap](/sitemap). They tend to describe the individual behind the site and are [common on the IndieWeb](https://indieweb.org/page).
|
This is an index of all my [slash pages](https://slashpages.net/). These are pages you can add to your website, usually with a standard slugs like [/now](/now), [/about](/about), or [/sitemap](/sitemap). They tend to describe the individual behind the site and are [common on the IndieWeb](https://indieweb.org/page).
|
||||||
|
|
||||||
|
|||||||
5
content/status/Status_2026-04-18_09:31.md
Normal file
5
content/status/Status_2026-04-18_09:31.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18 9:29:00
|
||||||
|
emoji: 🍵
|
||||||
|
comment: Starting the day with some pinhead oats with banana and peanut butter, Middle Mountain Duck Shit Aroma Dan Cong Oolong from Yunnan Sourcing, and a stick of Tennendo's Kyara. Got to love Saturday mornings.
|
||||||
|
---
|
||||||
5
content/status/Status_2026-04-28_10:18.md
Normal file
5
content/status/Status_2026-04-28_10:18.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-28 10:15:00
|
||||||
|
emoji: 🌿
|
||||||
|
comment: Shoyeido's Overtones Patchouli is a banger. It really should come in a box of 450 5.25 inch sticks; I'd buy one in a heartbeat.
|
||||||
|
---
|
||||||
@@ -27,8 +27,9 @@ permalink: "/status/index.html"
|
|||||||
</a><br />
|
</a><br />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
|
{% if status.data.comment %}
|
||||||
{{ status.data.comment | markdownify | safe }}<br />
|
{{ status.data.comment | markdownify | safe }}<br />
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<span class="status-metadata">
|
<span class="status-metadata">
|
||||||
{{ status.date | niceDate }}
|
{{ status.date | niceDate }}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ permalink: /tags/
|
|||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
title: Nathan Upchurch | Tags
|
title: Nathan Upchurch | Tags
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
tags:
|
||||||
|
- tagList
|
||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
|
|||||||
@@ -5,18 +5,31 @@ pagination:
|
|||||||
alias: tag
|
alias: tag
|
||||||
filter:
|
filter:
|
||||||
- all
|
- all
|
||||||
|
- blogroll
|
||||||
|
- galleryImage
|
||||||
|
- galleryImages
|
||||||
- post
|
- post
|
||||||
- posts
|
- posts
|
||||||
|
- profilePic
|
||||||
- tagList
|
- tagList
|
||||||
|
- tags
|
||||||
- feed
|
- feed
|
||||||
- onceBurned
|
- onceBurned
|
||||||
|
- metadata
|
||||||
|
- navigator
|
||||||
- nowBurning
|
- nowBurning
|
||||||
|
- postList
|
||||||
- status
|
- status
|
||||||
- priorThoughts
|
- priorThoughts
|
||||||
addAllPagesToCollections: true
|
addAllPagesToCollections: true
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
postlistHeaderText: "Latest Posts:"
|
postlistHeaderText: "Latest Posts:"
|
||||||
structuredData: none
|
structuredData: none
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
|
tags:
|
||||||
|
- tagList
|
||||||
|
- metadata
|
||||||
|
- postList
|
||||||
eleventyComputed:
|
eleventyComputed:
|
||||||
title: Posts tagged “{{ tag }}”
|
title: Posts tagged “{{ tag }}”
|
||||||
permalink: "/tags/{{ tag | slugify }}/"
|
permalink: "/tags/{{ tag | slugify }}/"
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ structuredData: none
|
|||||||
---
|
---
|
||||||
<article data-pagefind-body>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# My Wishlist
|
<h1>My Wishlist</h1>
|
||||||
|
|
||||||
## What is this?
|
## What is this?
|
||||||
This page is a list of wishes, a la [taylor.town/wish-manifesto](https://taylor.town/wish-manifesto), both tangible and intangible.
|
This page is a list of wishes, a la [taylor.town/wish-manifesto](https://taylor.town/wish-manifesto), both tangible and intangible.
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import pluginNavigation from "@11ty/eleventy-navigation";
|
|||||||
import prettier from "prettier";
|
import prettier from "prettier";
|
||||||
import { EleventyHtmlBasePlugin } from "@11ty/eleventy";
|
import { EleventyHtmlBasePlugin } from "@11ty/eleventy";
|
||||||
import { dateSuffixAdder, monthMap } from "./public/js/modules/dateTools.js";
|
import { dateSuffixAdder, monthMap } from "./public/js/modules/dateTools.js";
|
||||||
|
import tocPlugin from "eleventy-plugin-nesting-toc";
|
||||||
// For PageFind
|
// For PageFind
|
||||||
import childProcess from "child_process";
|
import childProcess from "child_process";
|
||||||
|
|
||||||
@@ -127,6 +128,7 @@ export default async function (eleventyConfig) {
|
|||||||
eleventyConfig.addPlugin(emojiReadTime, {
|
eleventyConfig.addPlugin(emojiReadTime, {
|
||||||
label: "minute read time",
|
label: "minute read time",
|
||||||
});
|
});
|
||||||
|
eleventyConfig.addPlugin(tocPlugin);
|
||||||
|
|
||||||
// Filters
|
// Filters
|
||||||
eleventyConfig.addFilter("niceDate", (date) => {
|
eleventyConfig.addFilter("niceDate", (date) => {
|
||||||
@@ -146,14 +148,21 @@ export default async function (eleventyConfig) {
|
|||||||
return arr.slice(0, arr.length - 1);
|
return arr.slice(0, arr.length - 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add abbreviation
|
||||||
eleventyConfig.addFilter("abbr", (abbr, def) => {
|
eleventyConfig.addFilter("abbr", (abbr, def) => {
|
||||||
return `<abbr title="${def}">${abbr}</abbr>`;
|
return `<abbr title="${def}">${abbr}</abbr>`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Parse as markdown
|
||||||
eleventyConfig.addFilter("markdownify", (markdownString) => {
|
eleventyConfig.addFilter("markdownify", (markdownString) => {
|
||||||
return mdLib.renderInline(markdownString);
|
return mdLib.renderInline(markdownString);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Remove trailing "#" from links
|
||||||
|
eleventyConfig.addFilter("removeHash", (str) => {
|
||||||
|
return str.replace(/#<\/a>/g, "</a>");
|
||||||
|
});
|
||||||
|
|
||||||
// Shortcodes
|
// Shortcodes
|
||||||
// Audio player
|
// Audio player
|
||||||
eleventyConfig.addShortcode(
|
eleventyConfig.addShortcode(
|
||||||
@@ -211,12 +220,24 @@ export default async function (eleventyConfig) {
|
|||||||
(tag) =>
|
(tag) =>
|
||||||
[
|
[
|
||||||
"all",
|
"all",
|
||||||
"nav",
|
"blogroll",
|
||||||
"post",
|
"feed",
|
||||||
"posts",
|
|
||||||
"gallery",
|
"gallery",
|
||||||
"quiz",
|
"galleryImage",
|
||||||
|
"guestbook",
|
||||||
|
"metadata",
|
||||||
|
"nav",
|
||||||
|
"navigator",
|
||||||
"nowBurning",
|
"nowBurning",
|
||||||
|
"onceBurned",
|
||||||
|
"post",
|
||||||
|
"postList",
|
||||||
|
"posts",
|
||||||
|
"profilePic",
|
||||||
|
"status",
|
||||||
|
"tagList",
|
||||||
|
"tags",
|
||||||
|
"quiz",
|
||||||
].indexOf(tag) === -1,
|
].indexOf(tag) === -1,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
13
package.json
13
package.json
@@ -29,19 +29,20 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://upchur.ch/gitea/n_u/nathanupchurch.com",
|
"homepage": "https://upchur.ch/gitea/n_u/nathanupchurch.com",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@11ty/eleventy": "^3.1.2",
|
"@11ty/eleventy": "^3.1.5",
|
||||||
"@11ty/eleventy-navigation": "^0.3.5",
|
"@11ty/eleventy-navigation": "^1.0.5",
|
||||||
"@11ty/eleventy-plugin-bundle": "^1.0.4",
|
"@11ty/eleventy-plugin-bundle": "^3.0.0",
|
||||||
"@11ty/eleventy-plugin-rss": "^1.2.0",
|
"@11ty/eleventy-plugin-rss": "^3.0.0",
|
||||||
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
|
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
|
||||||
"luxon": "^3.3.0",
|
"luxon": "^3.3.0",
|
||||||
"markdown-it-anchor": "^8.6.7",
|
"markdown-it-anchor": "^9.2.0",
|
||||||
"markdown-it-footnote": "^3.0.3",
|
"markdown-it-footnote": "^4.0.0",
|
||||||
"mdfigcaption": "^0.1.1",
|
"mdfigcaption": "^0.1.1",
|
||||||
"pagefind": "^1.4.0"
|
"pagefind": "^1.4.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@11tyrocks/eleventy-plugin-emoji-readtime": "^1.0.1",
|
"@11tyrocks/eleventy-plugin-emoji-readtime": "^1.0.1",
|
||||||
|
"eleventy-plugin-nesting-toc": "^1.3.0",
|
||||||
"markdown-it-container": "^4.0.0",
|
"markdown-it-container": "^4.0.0",
|
||||||
"markdown-it-footnote": "^3.0.3",
|
"markdown-it-footnote": "^3.0.3",
|
||||||
"markdown-it-image-figures": "^2.1.1",
|
"markdown-it-image-figures": "^2.1.1",
|
||||||
|
|||||||
BIN
public/audio/site_tunes/ABBA.Gimme gimme gimme L.mid.ogg
Normal file
BIN
public/audio/site_tunes/ABBA.Gimme gimme gimme L.mid.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
public/audio/site_tunes/Auld-Lang-Syne.mid.ogg
Normal file
BIN
public/audio/site_tunes/Auld-Lang-Syne.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Ave-Maria-in-C.mid.ogg
Normal file
BIN
public/audio/site_tunes/Ave-Maria-in-C.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/B52s - Loveshack.mid.ogg
Normal file
BIN
public/audio/site_tunes/B52s - Loveshack.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/B52s - Rock Lobster.mid.ogg
Normal file
BIN
public/audio/site_tunes/B52s - Rock Lobster.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/BOLERO-3.MID.ogg
Normal file
BIN
public/audio/site_tunes/BOLERO-3.MID.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
public/audio/site_tunes/Cher - Believe.mid.ogg
Normal file
BIN
public/audio/site_tunes/Cher - Believe.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Death Note - L's Theme.mid.ogg
Normal file
BIN
public/audio/site_tunes/Death Note - L's Theme.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Death Note - Light's Theme.mid.ogg
Normal file
BIN
public/audio/site_tunes/Death Note - Light's Theme.mid.ogg
Normal file
Binary file not shown.
Binary file not shown.
BIN
public/audio/site_tunes/Dr Mario - Fever.mid.ogg
Normal file
BIN
public/audio/site_tunes/Dr Mario - Fever.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Dr Mario - Title Screen.mid.ogg
Normal file
BIN
public/audio/site_tunes/Dr Mario - Title Screen.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Feliz-Navidad.mid.ogg
Normal file
BIN
public/audio/site_tunes/Feliz-Navidad.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Flying Toasters Anthem.mid.ogg
Normal file
BIN
public/audio/site_tunes/Flying Toasters Anthem.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Fur Elise.mid.ogg
Normal file
BIN
public/audio/site_tunes/Fur Elise.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/GERSHWIN.Rhapsody in blue.mid.ogg
Normal file
BIN
public/audio/site_tunes/GERSHWIN.Rhapsody in blue.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Gangsta's-Paradise-2.mid.ogg
Normal file
BIN
public/audio/site_tunes/Gangsta's-Paradise-2.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Gymnopedie-Nr-1.mid.ogg
Normal file
BIN
public/audio/site_tunes/Gymnopedie-Nr-1.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Holding-Out-For-A-Hero-1.mid.ogg
Normal file
BIN
public/audio/site_tunes/Holding-Out-For-A-Hero-1.mid.ogg
Normal file
Binary file not shown.
BIN
public/audio/site_tunes/Ich_Will.mid.ogg
Normal file
BIN
public/audio/site_tunes/Ich_Will.mid.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user