Refector css and add TOC

This commit is contained in:
2026-04-17 21:16:51 -05:00
parent 961d4ba3c3
commit 4f0df71c13
39 changed files with 251 additions and 910 deletions

View File

@@ -4,7 +4,8 @@ title: Nathan Upchurch | Colophon
structuredData: none
---
# Colophon
<h1>Colophon</h1>
## What I used to build this website
I built this website in plain-old HTML, CSS, and a touch of vanilla JavaScript using [Zach Leatherman](https://www.zachleat.com/)'s [11ty static site generator](https://www.11ty.dev/) (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/).

View File

@@ -4,7 +4,7 @@ title: Nathan Upchurch | Privacy
structuredData: none
---
# Privacy Statement
<h1>Privacy Statement</h1>
## Data collection and use
I dont 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.

View File

@@ -6,7 +6,8 @@ structuredData: none
<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.
[![Michael Scott from the US version of The Office shaking his head and saying Hmm, nope; don't like that.](/img/the-office-no.gif "#StopTheSlop")](/img/the-office-no.gif)

View File

@@ -1,6 +1,4 @@
export default {
tags: [
"posts"
],
"layout": "layouts/post.njk",
tags: ["posts", "metadata", "profilePic", "tags"],
layout: "layouts/post.njk",
};

View File

@@ -2,6 +2,10 @@
eleventyExcludeFromCollections: true
layout: layouts/base.njk
title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch"
tags:
- metadata
- postList
- tagList
structuredData: none
pagination:
data: collections.posts

View File

@@ -1,22 +1,18 @@
---
layout: layouts/base.njk
title: Nathan Upchurch | Blogroll
tags:
- blogroll
- tagList
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="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 %}
<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 %}
<div class="blogroll-category-group">
<a href="{{ blog.url }}"><h3>{{ blog.title }}</h3></a>
@@ -36,5 +32,3 @@ structuredData: none
{% endfor %}
</section>
{% endfor %}
</article>

View File

@@ -2,12 +2,24 @@
layout: layouts/base.njk
title: Nathan Upchurch | Changelog
structuredData: none
h1: Changelog
includeTOC: true
---
<article data-pagefind-body>
# Changelog
## 2026
### April
* 2026-04-17
* Added tables of contents to list pages where it makes sense.
* Refactored CSS so that unnecessary styles are not loaded on every page.
* 2026-04-16
* Updated [/incense](/incense).
* Some type styling changes.
* 2026-04-15
* Updated [/incense](/incense).
* Updated [/not-amazon](/not-amazon).
* 2026-04-07
* Updated [/wish](/wish).
### March
* 2026-03-16
* Updated [/incense](/incense).
* Updated [/links](/links).
@@ -20,6 +32,8 @@ structuredData: none
* Updated [/incense](/incense).
* 2026-03-05
* Updated [/wish](/wish) and [/incense](/incense).
### February
* 2026-02-07
* Updated [/wish](/wish).
* 2026-02-04
@@ -28,6 +42,8 @@ structuredData: none
* Implement togglable site-wide Woo-Mode™ in site settings.
* 2026-02-01
* Added [Woo-Woo Incense Description Generator](/special/woo-woo-incense-description-generator).
### January
* 2026-01-21
* Updated [blogroll](/blogroll).
* 2026-01-16
@@ -48,6 +64,9 @@ structuredData: none
* Updated [/sitemap](/sitemap).
* Organized site source files.
* Added estimated read time to blog posts with [a neat plugin](https://www.npmjs.com/package/@11tyrocks/eleventy-plugin-emoji-readtime).
## 2025
### December
* 2025-12-16
* Updated [/links](/links).
* 2025-12-08
@@ -56,6 +75,8 @@ structuredData: none
* Added [/ai](/ai) [slashpage](https://slashpages.net/) a la [the /ai 'manifesto'](https://www.bydamo.la/p/ai-manifesto).
* Added [/blank](/blank) [slashpage](https://slashpages.net/).
* Added [/referrals](/referrals) [slashpage](https://slashpages.net/).
### November
* 2025-11-28
* Added styling for [guestbook](/guestbook) replies now that [the reply feature](https://codeberg.org/meadowingc/guestbooks/issues/25) is live.
* The [main RSS feed](/feed/feed.xml) now includes [now](/now) entries.
@@ -68,6 +89,8 @@ structuredData: none
* Updated [/incense](/incense).
* Added snow / weather, and site settings button and dialog.
* Added [/links](/links).
### October
* 2025-10-20
* Added [Moist Poetry Journal](https://moistpoetryjournal.com) to the [blogroll](/blogroll).
* Removed some less active and/or abandoned blogs from the [blogroll](/blogroll).
@@ -81,10 +104,14 @@ structuredData: none
* Created [/incense](/incense).
* Added "not by AI" badge.
* Updated [/sitemap](/sitemap).
### August
* 2025-08-22
* Updated [/wish](/wish).
* 2025-08-14
* Implemented a [guestbook](/guestbook/).
### July
* 2025-07-29
* Added [The 74](https://www.the74million.org/) to the [blogroll](/blogroll).
* 2025-07-14
@@ -98,6 +125,8 @@ structuredData: none
* Added [Toxel](https://www.toxel.com/) to the [blogroll](/blogroll).
* 2025-07-02
* Added [A Tea Addict's Journal](https://marshaln.com), [Bear Blog Discover](https://bearblog.dev/discover/), [Essence of Tea Blog](https://essenceoftea.com/blogs/blog), [Tea DB](https://teadb.org/), and [white2tea](https://white2tea.com/blogs/blog) to the [blogroll](/blogroll).
### June
* 2025-06-26
* Added [Justine the Incenseur](https://justinetheincenseur.substack.com) to the [blogroll](/blogroll).
* 2025-06-24
@@ -106,6 +135,8 @@ structuredData: none
* Added [Freethought Blogs](https://freethoughtblogs.com/) and [Cwyn's Death by Tea](https://deathbytea.blogspot.com/) to the [blogroll](/blogroll).
* 2025-06-06
* Implement [/now-burning](/now-burning/) and [/once-burned](/once-burned/).
### April
* 2025-04-19
* Improve post list image sizing on mobile.
* 2025-04-08
@@ -114,6 +145,8 @@ structuredData: none
* Updated the [colophon](/about/colophon/).
* 2025-04-03
* Added [Graphic Rage with Aubrey Hirsch](https://aubreyhirsch.substack.com/) and [Usermag](https://www.usermag.co/) to the [blogroll](/blogroll).
### March
* 2025-03-28
* Updated header on [/tags/](/tags/).
* 2025-03-27
@@ -124,6 +157,8 @@ structuredData: none
* Removed [Kevin Drum's blog](https://jabberwocking.com/) from the [blogroll](/blogroll) in light of [his passing](https://jabberwocking.com/health-update-100/) on the seventh of March, 2025. Rest in peace, Kevin.
* 2025-03-11
* Updated [/wish](/wish).
### February
* 2025-02-21
* Updated [/wish](/wish) again as my mum bought me some incense sticks for my birthday.
* 2025-02-20
@@ -145,6 +180,8 @@ structuredData: none
* Add "image" meta tag for all pages, using either the image specified for the page / post, or my smiling face as a default.
* Fix issue with metadata output on gallery image pages.
* Stopped bundling CSS and injecting it into pages as I was sick of 1,000 lines of CSS on *every single page* (My build times are now a third of what they were).
### January
* 2025-01-31
* Update the copyright notice in the footer.
* 2025-1-29
@@ -158,6 +195,9 @@ structuredData: none
* Prettier date formatting throughout.
* 2025-1-13
* Added [Popular Information](https://popular.info/) to the [blogroll](/blogroll).
## 2024
### December
* 2024-12-16
* Update PeerTube instance on [/me](/me).
* 2024-12-15
@@ -171,5 +211,3 @@ structuredData: none
* Added [Aftermath](https://aftermath.site/) to the [blogroll](/blogroll).
* Implemented [/changelog](/changelog) 🎉.
* Implemented [/ai](/ai) a la [slashai.page](https://slashai.page/).
</article>

View File

@@ -4,6 +4,8 @@ pagination:
size: 1
alias: picture
layout: layouts/base.njk
tags:
- galleryImage
structuredData: none
eleventyComputed:
imageURL: "{{ picture.baseUrl }}/{{ picture.filename }}"

View File

@@ -4,8 +4,11 @@ pagination:
size: 1
alias: gallery
layout: layouts/base.njk
tags: gallery
tags:
- gallery
- galleryImage
structuredData: none
eleventyExcludeFromCollections: true
eleventyComputed:
title: "{{ gallery.title }}"
permalink: "/gallery/{{ gallery.title | slugify }}/"

View File

@@ -1,8 +1,11 @@
---
layout: layouts/base.njk
tags:
- metadata
- postList
---
<div data-pagefind-body>
<h1>My image galleries.</h1>
<h1>My image galleries</h1>
<p class="page-block nodropcap">
Photography trips, memes, and other pictures I thought would be worth sharing.
</p>

View File

@@ -2,6 +2,7 @@
layout: layouts/base.njk
title: Nathan Upchurch | Guestbook
structuredData: none
tag: guestbook
---
<h1>Sign My Guestbook</h1>
<!-- Guestbook Script -->

View File

@@ -2,10 +2,9 @@
layout: layouts/base.njk
title: Nathan Upchurch | Incense
structuredData: none
includeTOC: true
h1: "Incense: Writing & Resources"
---
<article data-pagefind-body>
# Incense: Writing & Resources
::: info
For my writing on incense see [the incense tag page](/tags/incense). Is this page missing something? [Let me know](/me).
:::
@@ -31,8 +30,10 @@ Incense making is hard. While parts of the world with strong incense cultures en
## Advanced Incense Making Techniques
### Articles
* [*Enfleurage an Esoteric and Ancient Art*, Be-en-Foret](https://mermadearts.com/i/enfleurage-an-esoteric-and-ancient-art)
* [*Filtering Conifer Resins*, Dave of The World Makes Scents](https://incensemakers.org/d/20-filtering-conifer-resins)
* [*Incorporating Soft Resin Into Your Incense Recipe*, Dave of The World Makes Scents](https://incensemakers.org/d/26-incorporating-soft-resin-into-your-incense-recipe)
* [*Powder Enfleurage! An Ancient Fragrant Art*, Anyas Garden Perfumes](https://anyasgarden.com/powder-enfleurage-ancient-fragrant-art-giveaway/)
* [*Traditional Processing of Aloeswood*, Dr. Incense](https://dr-incense.com/blogs/dr-incense-blog/traditional-processing-of-aloeswood)
* [*Washing Frankincense*, Nathan Upchurch](/blog/washing-frankincense/)
@@ -41,9 +42,11 @@ Incense making is hard. While parts of the world with strong incense cultures en
## Writing on Incense and Related Topics
### Articles
* [A New Incense Bibliography Part 1: History & Art, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-1)
* [A New Incense Bibliography Part 2: Worldwide Incense Traditions, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-2)
* [*A New Incense Bibliography Part 1*: History & Art, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-1)
* [*A New Incense Bibliography Part 2*: Worldwide Incense Traditions, Incense Apprentice](https://incenseapprentice.substack.com/p/a-new-incense-bibliography-part-2)
* [Ancient Chinese kneaded incense recipes translated from Zhou Jiaxuan's *History of Incense* (香乘 / xiāng shèng)](https://web.archive.org/web/20230216230731/https://talesofincense.com/scent-materia/)
* [*Bakhour (Turaren Wuta) In Nigeria*, Dr Ruqayya Abba Tofa](https://www.fragrantica.com/news/Bakhour-Turaren-Wuta-In-Nigeria-21456.html)
* [*Bakhour (Turaren Wuta) in Nigeria (Part 2)*, Dr Ruqayya Abba Tofa](https://www.fragrantica.com/news/Bakhour-Turaren-Wuta-in-Nigeria-Part-2-21989.html)
* [Chinese incense ingredient name translations](https://web.archive.org/web/20230216230731/https://talesofincense.com/scent-materia/)
* [*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/)
@@ -97,12 +100,14 @@ Incense making is hard. While parts of the world with strong incense cultures en
* [New Mountain Merchants (Australia)](https://newmountain.com.au/)—Oils, Woods
* [ResinaeBotanica (UK)](https://www.etsy.com/shop/ResinaeBotanica)—Resins
* [Scents of Earth (USA)](https://scents-of-earth.com/)—Absolutes, Herbs, Oils, Resins, Woods
* [Tame the Spirit Herbs (USA)](https://tamethespiritherbs.com/)—Herbs, Resins, Woods
* [The Incense Dragon (USA)](https://www.theincensedragon.com/supplies)—Herbs, Resins, Woods
* [The World Makes Scents (USA)](https://theworldmakesscents.com/)—Herbs, Resins, Woods
## Studies on Incense and Related Topics
* [*Odor Tenacity of Perfumery Materials*, Hayato Hosokawa and Takayuki Shibamoto](https://web.archive.org/web/20240616105228/https://img.perfumerflavorist.com/files/base/allured/all/document/2016/04/pf.7775.pdf)
* [*Key Issues and Challenges in Spice Grinding*, HPramod P. Aradwad, Arun Kumar T V, P.K. Sahoo, Indra Mani (PDF, 3.7 MiB)](/documents/key_issues_and_challenges_in_spice_grinding.pdf)
* [*Odor Tenacity of Perfumery Materials*, Hayato Hosokawa and Takayuki Shibamoto (PDF, 158.8 KiB)](/documents/odor_tenacity_of_perfume_materials.pdf)
## Forums / Discussion Boards
* [Reddit (/r/incense)](https://reddit.com/r/incense)—Unfortunately, this is currently *the* place to discuss incense and incense making on the English-speaking internet. If you would like to avoid a platform that spies on you and uses your writing to train AI, you are welcome to help me bring some life to the following alternative option (currently pretty much only populated by me):
@@ -115,4 +120,3 @@ Incense making is hard. While parts of the world with strong incense cultures en
[^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>

View File

@@ -2,11 +2,9 @@
layout: layouts/base.njk
title: Nathan Upchurch | Links
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.
## Design tools and resources
### Education
@@ -261,5 +259,3 @@ Unlimited creativity, zero ads.
* VPN
## Random cool stuff
* [intertapes.net](https://intertapes.net/)—An updating collection of found cassette tapes from different locations. The audio fragments include: voice memos, field recordings, mixtapes, bootlegs and more.
</article>

View File

@@ -2,10 +2,9 @@
layout: layouts/base.njk
title: "Nathan Upchurch | Not Amazon"
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.
## 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
* [Ethique](https://ethique.com/)—Shampoo and conditioner bars from Aotearoa New Zealand.
* [Dr. Jen](https://drjennatural.com/)—Nano-Hydroxyapatite toothpaste. They also sell a strawberry flavor for those sensitive to mint.
* [HiBAR](https://hellohibar.com/)—Vegan and plastic free deodorant, body wash, hair care, and more.
* [J•R•Liggett's](https://jrliggett.com/)—All natural shampoo bars.
* [Palestinian Soap Cooperative](https://palestiniansoap.coop/)—Olive oil soap from Nablus, Palestine, made using a traditional process practiced for well over four millennia.
* [Phoenix Shaving](https://phoenixshaving.com/)—A wide array of razors, aftershaves, brushes, and other wet-shaving products, including the fantastic [CK-6 line of vegan shaving soaps](https://phoenixshaving.com/collections/ultra-premium-formula-ck-6).
@@ -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.
[^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>

View File

@@ -3,9 +3,13 @@ eleventyExcludeFromCollections: true
layout: layouts/base.njk
title: Nathan Upchurch | Now
structuredData: none
tags:
- metadata
- postList
- tagList
---
<article class="post" data-pagefind-body>
<h1>Now: Life updates.</h1>
<h1>Now: Life updates</h1>
{% set now = collections.now | last %}
<h2>{{ now.data.title }} • {{ now.date | niceDate }}</h2>
{{ now.content | safe }}

View File

@@ -1,4 +1,4 @@
export default {
tags: ["now"],
tags: ["now", "metadata", "profilePic", "tags"],
layout: "layouts/post.njk",
};

View File

@@ -1,5 +1,8 @@
---
layout: layouts/base.njk
tags:
- nowBurning
- metadata
title: "Nathan Upchurch | Once Burned: Incense I've burning in the past."
structuredData: none
pagination:

View File

@@ -1,6 +1,8 @@
---
layout: layouts/base.njk
title: "Nathan Upchurch | Prior Thoughts"
tags:
- status
pagination:
data: collections.priorThoughts
generatePageOnEmptyData: true

View File

@@ -2,6 +2,8 @@
eleventyExcludeFromCollections: true
layout: layouts/base.njk
title: Nathan Upchurch | Quizzes
tags:
- metadata
structuredData: none
description: "Bored? Take a fun quiz to while away the time!"
---

View File

@@ -1,4 +1,4 @@
export default {
tags: ["quiz"],
tags: ["quiz", "metadata", "profilePic", "postList"],
layout: "layouts/quizzes.njk",
};

View File

@@ -5,7 +5,7 @@ structuredData: none
---
<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.

View File

@@ -4,8 +4,8 @@ title: Nathan Upchurch | Sitemap
structuredData: none
---
<article data-pagefind-body>
<h1>Sitemap</h1>
# Sitemap
* [Home](/)
* [About](/about)
* [AI](/ai)

View File

@@ -5,7 +5,7 @@ structuredData: none
---
<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).

View File

@@ -3,6 +3,8 @@ permalink: /tags/
layout: layouts/base.njk
title: Nathan Upchurch | Tags
structuredData: none
tags:
- tagList
---
<article data-pagefind-body>

View File

@@ -5,18 +5,30 @@ pagination:
alias: tag
filter:
- all
- blogroll
- galleryImage
- galleryImages
- post
- posts
- tagList
- tags
- feed
- onceBurned
- metadata
- navigator
- nowBurning
- postList
- status
- priorThoughts
addAllPagesToCollections: true
layout: layouts/base.njk
postlistHeaderText: "Latest Posts:"
structuredData: none
eleventyExcludeFromCollections: true
tags:
- tagList
- metadata
- postList
eleventyComputed:
title: Posts tagged “{{ tag }}”
permalink: "/tags/{{ tag | slugify }}/"

View File

@@ -5,7 +5,8 @@ structuredData: none
---
<article data-pagefind-body>
# My Wishlist
<h1>My Wishlist</h1>
## 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.