Pagination, feed update, slash pages
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -172,7 +172,7 @@ export default {
|
||||
iconURL: "/img/wafrn.svg",
|
||||
},
|
||||
],
|
||||
weatherSymbol: "🍁",
|
||||
weatherSymbol: "❅",
|
||||
webrings: [
|
||||
{
|
||||
name: "Fediring",
|
||||
|
||||
@@ -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">
|
||||
|
||||
12
_includes/permalinkButtons.njk
Normal file
12
_includes/permalinkButtons.njk
Normal 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 %}
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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.
|
||||
|
||||
[](/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
7
content/blank/blank.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Blank
|
||||
structuredData: none
|
||||
---
|
||||
|
||||
This page was intentionally left blank.
|
||||
@@ -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 %}
|
||||
<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>What’s New:</h2>
|
||||
{% else %}
|
||||
<h1>The Stochastic Bletherist Blog</h1>
|
||||
<p class="page-block nodropcap">
|
||||
Writing about everything from <a href="/tags/storytime">personal stories</a> to <a href="/tags/gnu-linux">tech</a>, <a href="/tags/vegan-cooking">food</a>, and <a href="/tags/incense">incense</a>.<br />
|
||||
|
||||
<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" %}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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>Nothing’s here yet!</p>
|
||||
{% endif %}
|
||||
|
||||
{% include "permalinkButtons.njk" %}
|
||||
|
||||
<a href="/now-burning/">
|
||||
<button type="button">Latest »</button>
|
||||
</a>
|
||||
|
||||
12
content/referrals/referrals.md
Normal file
12
content/referrals/referrals.md
Normal 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.
|
||||
@@ -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>
|
||||
|
||||
@@ -34,5 +34,5 @@ Here’s everything I’ve posted tagged “{{ tag }}.” Want to be notified wh
|
||||
</a>
|
||||
</p>
|
||||
|
||||
{% set postslist = collections[ tag ] %}
|
||||
{% set postslist = collections[ tag ] | reverse %}
|
||||
{% include "postslist.njk" %}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
BIN
public/img/the-office-no.gif
Normal file
BIN
public/img/the-office-no.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
Reference in New Issue
Block a user