diff --git a/.kateproject.notes b/.kateproject.notes index aee2476..b34a495 100644 --- a/.kateproject.notes +++ b/.kateproject.notes @@ -2,8 +2,6 @@ TODO: Investigate pagination for /blog/ Integrate recipe structured data for recipe type articles -Add "Now" to RSS feed. - Font Axes, Fraunces: -------------------- opsz: 9-144 (Optical Size) diff --git a/_data/metadata.js b/_data/metadata.js index 9725c24..882af62 100644 --- a/_data/metadata.js +++ b/_data/metadata.js @@ -172,7 +172,7 @@ export default { iconURL: "/img/wafrn.svg", }, ], - weatherSymbol: "🍁", + weatherSymbol: "❅", webrings: [ { name: "Fediring", diff --git a/_includes/incenseList.njk b/_includes/incenseList.njk index 3dea597..9cf2762 100644 --- a/_includes/incenseList.njk +++ b/_includes/incenseList.njk @@ -1,7 +1,7 @@
{% if postlistHeaderText %}

{{ postlistHeaderText }}

{% endif %}
- {% for post in postslist | reverse %} + {% for post in postslist %}
diff --git a/_includes/permalinkButtons.njk b/_includes/permalinkButtons.njk new file mode 100644 index 0000000..332f900 --- /dev/null +++ b/_includes/permalinkButtons.njk @@ -0,0 +1,12 @@ +{% set numPages = pagination.pages | length %} +{% if pagination.pageNumber > 0 %} + + + +{% endif %} + +{% if pagination.pageNumber < numPages - 1 %} + + + +{% endif %} diff --git a/_includes/postslist.njk b/_includes/postslist.njk index cb25f19..df718a0 100644 --- a/_includes/postslist.njk +++ b/_includes/postslist.njk @@ -1,7 +1,7 @@
{% if postlistHeaderText %}

{{ postlistHeaderText }}

{% endif %}
- {% for post in postslist | reverse %} + {% for post in postslist %}
{% if not postListTypeMicroblog %} diff --git a/content/about/AI/index.md b/content/ai/index.md similarity index 65% rename from content/about/AI/index.md rename to content/ai/index.md index 130529a..0b26724 100644 --- a/content/about/AI/index.md +++ b/content/ai/index.md @@ -3,10 +3,11 @@ layout: layouts/base.njk title: Nathan Upchurch | AI structuredData: none --- -# AI Statement -## Is AI used for this website? -Absolutely no prose, code, or image that comprises a part the content of this website, nor any code that comprises the website itself was generated from AI products, also known as 'ocean-boiling plagiarism machines'. You may rest assured that this will not change. +# AI +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) ## AI Permissions I do my utmost to ensure that my work is not hoovered wholesale and regurgitated by AI products by including an [ai.txt file](/ai.txt) and disallowing known crawlers in my [robots.txt file](/robots.txt), but just in case it will ever become meaningful in any legal sense, I'd like to make it clear here that I do not grant permission for any content on this website to be used as training data for any AI project, or for any portion of this website to be scraped by bots associated with AI projects. diff --git a/content/blank/blank.md b/content/blank/blank.md new file mode 100644 index 0000000..c14dba5 --- /dev/null +++ b/content/blank/blank.md @@ -0,0 +1,7 @@ +--- +layout: layouts/base.njk +title: Nathan Upchurch | Blank +structuredData: none +--- + +This page was intentionally left blank. diff --git a/content/blog.njk b/content/blog.njk index 61a1c87..843e388 100644 --- a/content/blog.njk +++ b/content/blog.njk @@ -2,8 +2,15 @@ layout: layouts/base.njk title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch" structuredData: none -postlistHeaderText: "What’s New:" +pagination: + data: collections.posts + generatePageOnEmptyData: true + size: 10 + reverse: true +permalink: "blog/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html" +paginationRootDir: blog --- +{% if pagination.pageNumber == 0 %}

The Stochastic Bletherist

@@ -16,5 +23,25 @@ The personal blog of Nathan Upchurch, where he writes about everything from Blogroll »

-{% set postslist = collections.posts %} + +

What’s New:

+{% else %} +

The Stochastic Bletherist Blog

+

+Writing about everything from personal stories to tech, food, and incense.
+ + + + + + + +

+ +

More posts:

+{% endif %} + + +{% set postslist = pagination.items %} {% include "postslist.njk" %} +{% include "permalinkButtons.njk" %} diff --git a/content/changelog.md b/content/changelog.md index 3ee8c43..c96f48b 100644 --- a/content/changelog.md +++ b/content/changelog.md @@ -4,6 +4,12 @@ title: Nathan Upchurch | Changelog structuredData: none --- # Changelog +* 2025-12-08 + * Paginated [once-burned](/once-burned) and [blog](/blog). +* 2025-12-02 + * 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/). * 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. diff --git a/content/now/now_2025_11_28.md b/content/now/now_2025_11_28.md index 657ec6f..a594eea 100644 --- a/content/now/now_2025_11_28.md +++ b/content/now/now_2025_11_28.md @@ -8,7 +8,7 @@ Not much of tremendous interest has been going on lately; I took the week off be During this week off I've mostly been catching up on sleep debt, doing a little work on my website, and playing Far Cry 6, which I'm finally starting to get into. I've also plucked up the courage to start experimenting with absolutes in incense for certain notes that are difficult to impossible to achieve with whole-plants (at least by any method I'm aware of). I have started with Damask rose absolute; it's gorgeous, but not cheap by any means. This exercise is also helping me understand that when I eventually release a little incense for sale, it's likely going to have to be expensive. It's just a fact that in order to make high-quality natural incense, predominantly from whole-plant ingredients, you simply have to use baller aromatics. For instance, Damask rose absolute alone looks like it's going to add something like $0.50 *per gram* of incense, and that's not the half of it. I recently got my hands on some nice sandalwood (Santalum album) that costs just under $2.00 per gram. Of course, you can get a very nice Australian sandalwood (Santalum spicatum) for $0.03 per gram[^1], but that may or may not work for whatever fragrance you are trying to make. Don't get me started on agarwood. I was never going to be making commodity incense anyway, but this is a bit of a wake-up call. The experimentation was spurred by an extraordinary assortment of incense and aromatic samples kindly sent to me by Irene of [rauchfahne.de](https://blog.rauchfahne.de/en/) which included an oakmoss absolute alongside a sample of the lichen itself—very exciting as I've been dying to experiment with oakmoss. I also plan to mill some cultivated Cambodian agarwood "skins" into powder to see how it performs in combustible incense soon. I really hope this doesn't wind up being a waste of money! -I've been reading as well; I finally finished *The Peripheral,* which has taken me a very long time as I didn't find it to be the most engaging read. I found the oddly clipped dialogue for the American characters irritating, and the story hard to follow. Since, I've been reading an English translation of "From the New World[^2]" as I thought the anime was incredible. The prose isn't stunning, and it's an absolute exposition-fest, but I'm enjoying it anyway. +I've been reading as well; I finally finished *The Peripheral,* which has taken me a very long time as I didn't find it to be the most engaging read. I found the oddly clipped dialogue for the American characters irritating, and the story hard to follow. Since, I've been reading an English translation of *From the New World*[^2] as I thought the anime was incredible. The prose isn't stunning, and it's an absolute exposition-fest, but I'm enjoying it anyway. As my baseline level of anxiety has fallen a bit this week, I realize that I have really needed some time to just mill about: free of obligation (for the most part). Life has been stressful lately; among other things, the building I'm renting in is being sold, so I'm almost certainly going to be leaving within the next year. The indignity of having strangers traipse through your home oohing and aahing, hemming and hawing about the place where you live is pretty hard to bear, so I'm glad that's over at least. I really don't know how people can do it: walking through someone's space thinking about what you'll do with it once you displace them, or imagining how much of their income you can reasonably get away with skimming because you have more money than they do. It's disgusting, anti-human behavior, and I think of every single one of the people who set foot in this house for this reason as a villain. The new owner (providing the sale goes through) says she intends to continue to rent the place out, but I know that the current rental income from the place won't cover the mortgage, so rent is going to have to increase dramatically even if this is true. The reason I moved here in the first place was for the cheap rent, so that's out the window. Some of the people who live downstairs have been here for a decade; and now they're going to be forced to leave the neighborhood they've been a part of for all of that time. The neighbors are selling too, horrible grey-brick condos are being built, and what was once a lovely, affordable, largely Latine neighborhood by the river is losing its character piece by piece. How long before all of the friendly old ladies have to find somewhere else to go to every Sunday when their church is priced off of this street[^3]? How long before the cafe selling $6 empanadas is forced to relocate, close, or start selling $15 empanadas? It's too sad for words. The current landlord seemed delighted by this, however, referring to long-time residents of the neighborhood as "riffraff," before making out like a bandit with close to half a million dollars for a shit-hole house that she inherited, presumably did not pay a penny for, and certainly didn't maintain. Hell, the appraiser had to say something before she even thought to check that there were working carbon monoxide alarms downstairs. Anyway, as salty as I am about all of this, I'm slowly coming to terms with it and preparing to move on. diff --git a/content/once-burned/index.njk b/content/once-burned/index.njk index 351746d..ab8f3d9 100644 --- a/content/once-burned/index.njk +++ b/content/once-burned/index.njk @@ -2,18 +2,26 @@ layout: layouts/base.njk title: "Nathan Upchurch | Once Burned: Incense I've burning in the past." structuredData: none +pagination: + data: collections.onceBurned + generatePageOnEmptyData: true + size: 20 +permalink: "once-burned/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html" +paginationRootDir: once-burned --- -{% set burning = collections.nowBurning | last %} -

Previous “Now Burning” Entries:

-{% set postsCount = collections.nowBurning | removeMostRecent | length %} + +{% set postsCount = pagination.items | length %} {% if postsCount > 0 %} -{% set postslist = collections.nowBurning | removeMostRecent %} +{% set postslist = pagination.items %} {% set showPostListHeader = false %} {% include "incenseList.njk" %} {% else %}

Nothing’s here yet!

{% endif %} + +{% include "permalinkButtons.njk" %} + diff --git a/content/referrals/referrals.md b/content/referrals/referrals.md new file mode 100644 index 0000000..7b2cd06 --- /dev/null +++ b/content/referrals/referrals.md @@ -0,0 +1,12 @@ +--- +layout: layouts/base.njk +title: Nathan Upchurch | Referrals +structuredData: none +--- + +# Referrals / Affiliate 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. + +## 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. diff --git a/content/sitemap/index.njk b/content/sitemap/index.njk index 34a763e..d4a54bd 100644 --- a/content/sitemap/index.njk +++ b/content/sitemap/index.njk @@ -11,11 +11,12 @@ structuredData: none
  • About
  • +
  • Blank
  • Blog
      @@ -29,7 +30,9 @@ structuredData: none
    • Galleries
    • Guestbook
    • Incense
    • +
    • Links
    • Now
    • +
    • Referrals
    • Special
      • Flying Toasters
      • diff --git a/content/tags.njk b/content/tags.njk index d4f5609..311744b 100644 --- a/content/tags.njk +++ b/content/tags.njk @@ -34,5 +34,5 @@ Here’s everything I’ve posted tagged “{{ tag }}.” Want to be notified wh

        -{% set postslist = collections[ tag ] %} +{% set postslist = collections[ tag ] | reverse %} {% include "postslist.njk" %} diff --git a/eleventy.config.js b/eleventy.config.js index 441ad71..ce362bb 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -66,6 +66,15 @@ export default async function (eleventyConfig) { }); }); + eleventyConfig.addCollection("onceBurned", async (collectionApi) => { + const arr = [...collectionApi.getFilteredByTag("nowBurning")].sort( + function (a, b) { + return b.date - a.date; + }, + ); + return arr.slice(1, arr.length); + }); + // Transforms eleventyConfig.addTransform("prettier", function (content, outputPath) { if (outputPath && outputPath.endsWith(".html")) { @@ -105,6 +114,7 @@ export default async function (eleventyConfig) { return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat("yyyy-LL-dd"); }); + // Remove most recent item added to array eleventyConfig.addFilter("removeMostRecent", (arr) => { return arr.slice(0, arr.length - 1); }); diff --git a/public/img/the-office-no.gif b/public/img/the-office-no.gif new file mode 100644 index 0000000..f198d43 Binary files /dev/null and b/public/img/the-office-no.gif differ