Pagination, feed update, slash pages

This commit is contained in:
2025-12-13 17:25:52 -06:00
parent c5ce302fee
commit 33f73f81ed
16 changed files with 101 additions and 17 deletions

View File

@@ -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)

View File

@@ -172,7 +172,7 @@ export default {
iconURL: "/img/wafrn.svg",
},
],
weatherSymbol: "🍁",
weatherSymbol: "",
webrings: [
{
name: "Fediring",

View File

@@ -1,7 +1,7 @@
<section class="postlist microblog-list">
{% if postlistHeaderText %}<h2>{{ postlistHeaderText }}</h2>{% endif %}
<div class="postlist-item-container">
{% for post in postslist | reverse %}
{% for post in postslist %}
<article class="postlist-item">
<div class="post-copy">

View File

@@ -0,0 +1,12 @@
{% set numPages = pagination.pages | length %}
{% if pagination.pageNumber > 0 %}
<a href="/{{ paginationRootDir }}/{% if pagination.pageNumber > 1%}page-{{ pagination.pageNumber }}/{% endif %}">
<button type="button">← Previous</button>
</a>
{% endif %}
{% if pagination.pageNumber < numPages - 1 %}
<a href="/{{ paginationRootDir }}/page-{{ pagination.pageNumber + 2 }}/">
<button type="button">{% if pagination.pageNumber == 0%}More{% else %}Next{% endif %} →</button>
</a>
{% endif %}

View File

@@ -1,7 +1,7 @@
<section class="postlist{% if postListTypeMicroblog %} microblogList{% endif %}">
{% if postlistHeaderText %}<h2>{{ postlistHeaderText }}</h2>{% endif %}
<div class="postlist-item-container">
{% for post in postslist | reverse %}
{% for post in postslist %}
<article class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
{% if not postListTypeMicroblog %}

View File

@@ -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.

7
content/blank/blank.md Normal file
View File

@@ -0,0 +1,7 @@
---
layout: layouts/base.njk
title: Nathan Upchurch | Blank
structuredData: none
---
This page was intentionally left blank.

View File

@@ -2,8 +2,15 @@
layout: layouts/base.njk
title: "The Stochastic Bletherist | The Personal Blog of Nathan Upchurch"
structuredData: none
postlistHeaderText: "Whats 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 %}
<h1>The Stochastic Bletherist</h1>
<p class="page-block nodropcap">
@@ -16,5 +23,25 @@ The personal blog of Nathan Upchurch, where he writes about everything from <a h
<button type="button">Blogroll »</button>
</a>
</p>
{% set postslist = collections.posts %}
<h2>Whats New:</h2>
{% else %}
<h1>The Stochastic Bletherist Blog</h1>
<p class="page-block nodropcap">
Writing about everything from <a href="/tags/storytime">personal stories</a> to <a href="/tags/gnu-linux">tech</a>, <a href="/tags/vegan-cooking">food</a>, and <a href="/tags/incense">incense</a>.<br />
<a href="/tags/">
<button type="button">Topics »</button>
</a>
<a href="../blogroll/">
<button type="button">Blogroll »</button>
</a>
</p>
<h2>More posts:</h2>
{% endif %}
{% set postslist = pagination.items %}
{% include "postslist.njk" %}
{% include "permalinkButtons.njk" %}

View File

@@ -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.

View File

@@ -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.

View File

@@ -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 %}
<h1>Previous “Now Burning” Entries:</h1>
{% 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 %}
<p>Nothings here yet!</p>
{% endif %}
{% include "permalinkButtons.njk" %}
<a href="/now-burning/">
<button type="button">Latest »</button>
</a>

View File

@@ -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.

View File

@@ -11,11 +11,12 @@ structuredData: none
<li>
<a href="/about">About</a>
<ul>
<li><a href="/about/AI">AI</a></li>
<li><a href="/ai">AI</a></li>
<li><a href="/about/colophon">Colophon</a></li>
<li><a href="/about/privacy">Privacy</a></li>
</ul>
</li>
<li><a href="/blank">Blank</a></li>
<li>
<a href="/blog">Blog</a>
<ul>
@@ -29,7 +30,9 @@ structuredData: none
<li><a href="/galleries">Galleries</a></li>
<li><a href="/guestbook">Guestbook</a></li>
<li><a href="/incense">Incense</a></li>
<li><a href="/links">Links</a></li>
<li><a href="/now">Now</a></li>
<li><a href="/referrals">Referrals</a></li>
<li>Special
<ul>
<li><a href="/special/flying-toasters/">Flying Toasters</a></li>

View File

@@ -34,5 +34,5 @@ Heres everything Ive posted tagged “{{ tag }}.” Want to be notified wh
</a>
</p>
{% set postslist = collections[ tag ] %}
{% set postslist = collections[ tag ] | reverse %}
{% include "postslist.njk" %}

View File

@@ -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);
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB