Search and stuff
This commit is contained in:
@@ -66,6 +66,11 @@ export default {
|
|||||||
linkDisplay: "Quizzes",
|
linkDisplay: "Quizzes",
|
||||||
linkURL: "/quizzes/",
|
linkURL: "/quizzes/",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
iconURL: "/img/icons/breeze/file-search-symbolic.svg",
|
||||||
|
linkDisplay: "Search",
|
||||||
|
linkURL: "/search/",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
iconURL: "/img/icons/breeze/map-globe.svg",
|
iconURL: "/img/icons/breeze/map-globe.svg",
|
||||||
linkDisplay: "Sitemap",
|
linkDisplay: "Sitemap",
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
<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" />
|
||||||
<link rel="stylesheet" type="text/css" href="/css/code.css" />
|
<link rel="stylesheet" type="text/css" href="/css/code.css" />
|
||||||
|
{% if search %}
|
||||||
|
<link rel="stylesheet" href="/pagefind/pagefind-ui.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="/css/search.css" />
|
||||||
|
{% endif %}
|
||||||
<!-- 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 -->
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/linksPage.njk
|
layout: layouts/linksPage.njk
|
||||||
---
|
---
|
||||||
<div class="links-container h-card">
|
<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">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>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
---
|
---
|
||||||
<article class="post">
|
<article class="post" data-pagefind-body>
|
||||||
<h1>{{ title | safe }}</h1>
|
<h1>{{ title | markdownify | safe}}</h1>
|
||||||
{% include "mastodonComments.njk" %}
|
{% include "mastodonComments.njk" %}
|
||||||
{% if not hideMetadata %}
|
{% if not hideMetadata %}
|
||||||
<div class="post-metadata">
|
<div class="post-metadata">
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<a href="{{ post.url }}" class="postlist-link">
|
<a href="{{ post.url }}" class="postlist-link">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h3>
|
<h3>
|
||||||
{% if post.data.title %}{{ post.data.title | safe }}{% else %}?{% endif %}
|
{% if post.data.title %}{{ post.data.title | markdownify | safe }}{% else %}?{% endif %}
|
||||||
</h3>
|
</h3>
|
||||||
{% if not postListTypeMicroblog %}
|
{% if not postListTypeMicroblog %}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ structuredData: none
|
|||||||
|
|
||||||
# Colophon
|
# Colophon
|
||||||
## 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/) 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].
|
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/).
|
||||||
|
|
||||||
The handy calculators on [utopia.fyi](https://utopia.fyi), created by James Gilyead and Trys Mudford, helped me implement fluid typography and spacing, which has allowed me to make this website responsive without using a single media query. The future is upon us.
|
The handy calculators on [utopia.fyi](https://utopia.fyi), created by James Gilyead and Trys Mudford, helped me implement fluid typography and spacing, which has allowed me to make this website responsive without using a single media query. The future is upon us.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ eleventyNavigation:
|
|||||||
key: About
|
key: About
|
||||||
order: 2
|
order: 2
|
||||||
---
|
---
|
||||||
<article>
|
<article data-pagefind-body>
|
||||||
<h1>About me and my website.</h1>
|
<h1>About me and my website.</h1>
|
||||||
<p class="page-block nodropcap">I’m a prolific vegan home cook, classical trombonist, incense maker, a <abbr title="Free/Libre Open Source Software">FLOSS</abbr> enthusiast, designer, programmer, music producer, print lover, and human with too many interests and too little time.<br><br>
|
<p class="page-block nodropcap">I’m a prolific vegan home cook, classical trombonist, incense maker, a <abbr title="Free/Libre Open Source Software">FLOSS</abbr> enthusiast, designer, programmer, music producer, print lover, and human with too many interests and too little time.<br><br>
|
||||||
This is my little corner of the internet where I talk about whatever I like without worrying about maintaining a ‘personal brand’, or constraining my writing to topics which might help advance my career or establish me as a ‘thought leader’. I’m here to express myself and have fun writing about topics I enjoy.<br><br>
|
This is my little corner of the internet where I talk about whatever I like without worrying about maintaining a ‘personal brand’, or constraining my writing to topics which might help advance my career or establish me as a ‘thought leader’. I’m here to express myself and have fun writing about topics I enjoy.<br><br>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ title: Nathan Upchurch | AI
|
|||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# AI
|
# AI
|
||||||
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.
|
||||||
|
|
||||||
@@ -11,3 +13,5 @@ Certified generative AI hater here. This website and all content herein is 100%
|
|||||||
|
|
||||||
## AI Permissions
|
## 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.
|
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.
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -3,5 +3,8 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Blank
|
title: Nathan Upchurch | Blank
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
This page was intentionally left blank.
|
This page was intentionally left blank.
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ description: Answering a lot of questions.
|
|||||||
date: 2026-02-05T00:00:00.000Z
|
date: 2026-02-05T00:00:00.000Z
|
||||||
tags:
|
tags:
|
||||||
- Questionnaire
|
- Questionnaire
|
||||||
|
- Web Development
|
||||||
synopsis: Answering a lot of questions.
|
synopsis: Answering a lot of questions.
|
||||||
mastodon_id: '116021932929019975'
|
mastodon_id: '116021932929019975'
|
||||||
---
|
---
|
||||||
|
|||||||
112
content/blog/eleventy-becomes-build-awesome.md
Normal file
112
content/blog/eleventy-becomes-build-awesome.md
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
---
|
||||||
|
title: "Eleventy Becomes, *Sigh*, Build Awesome"
|
||||||
|
description: "Sustainability? Enshittification? I have some feelings about this."
|
||||||
|
date: 2026-03-11
|
||||||
|
tags:
|
||||||
|
- Eleventy
|
||||||
|
- Enshittification
|
||||||
|
- Web Development
|
||||||
|
synopsis: "Sustainability? Enshittification? I have some feelings about this."
|
||||||
|
imageURL: /img/eleventy-becomes-sigh-build-awesome/eleventy-logo.png
|
||||||
|
imageAlt: The old Eleventy logo.
|
||||||
|
mastodon_id: ""
|
||||||
|
---
|
||||||
|
In case you haven't heard, Eleventy, the excellent static site generator that I
|
||||||
|
use for this very website has been acquired by Font Awesome. As a result, it
|
||||||
|
has been renamed to, *sigh*,
|
||||||
|
[Build Awesome](https://www.11ty.dev/blog/build-awesome/). After seeing what
|
||||||
|
happened to [Shoelace](https://shoelace.style/), I'm apprehensive
|
||||||
|
and very much not looking forward to seeing what features get locked behind a
|
||||||
|
paywall. But beside the enshittification likely to follow, I thought we'd
|
||||||
|
stopped appending "awesome" to everything at roughly the same time bacon memes,
|
||||||
|
curly moustaches, and
|
||||||
|
[stomp-clap music](https://knowyourmeme.com/memes/stomp-clap-hey-music) went
|
||||||
|
out of style. It seems like
|
||||||
|
[I'm not the only one](https://www.allaboutken.com/posts/20260305-digesting-eleventy-becomes-build-awesome/)
|
||||||
|
who feels this way either.
|
||||||
|
|
||||||
|
While disappointed with this state of affairs, I'm not terribly surprised.
|
||||||
|
Beyond the matter of funding,
|
||||||
|
[as W. Evan Sheehan of The Darth Mall put it](https://darthmall.net/notes/2026/eleventy-build-awesome/)
|
||||||
|
:
|
||||||
|
|
||||||
|
> …the vibe of open source in the JavaScript community is a little bit different than what I think of as the broader open source movement. Open source JavaScript projects often feel a little more tied to corporations than Linux, or Python, or NeoVim.
|
||||||
|
|
||||||
|
I wholeheartedly agree. There's
|
||||||
|
[a big difference](https://www.gnu.org/philosophy/open-source-misses-the-point.en.html)
|
||||||
|
in philosophy between "free software" and "open source," and many JavaScript
|
||||||
|
projects seem to be firmly in the latter camp.
|
||||||
|
|
||||||
|
The choice of the MIT license for Eleventy in the first place speaks
|
||||||
|
volumes—it's antithetical to the free software movement. The MIT license allows
|
||||||
|
corporations to snatch up free and open source software, insert whatever
|
||||||
|
malicious functionality they please, lock down the source code, and abuse the
|
||||||
|
users they extort with their rent-seeking pricing schemes. On the other hand,
|
||||||
|
code licensed under a strong copyleft license such as the GPL ensures that
|
||||||
|
software always remains free (as in speech). Under a strong copyleft license,
|
||||||
|
anyone can use the software for any purpose. They may study, change, improve,
|
||||||
|
and redistribute it. But unlike permissive licenses such as the MIT license,
|
||||||
|
they may *not* strip these rights from users at any point.
|
||||||
|
|
||||||
|
The goal of the free software movement is to create a
|
||||||
|
[commons](https://en.wikipedia.org/wiki/Commons) of software that anyone is
|
||||||
|
free to use, study, redistribute, and improve so that abusive software ceases
|
||||||
|
to be competitive. In terms of how MIT licensed software helps this cause, it's
|
||||||
|
a bit like putting a soldier on the battlefield with no armor. They may do some
|
||||||
|
damage, but they're a cinch to eliminate from the field. At this point, I see
|
||||||
|
MIT licensing as a red flag on all but the very few projects where it makes
|
||||||
|
sense (such as programming languages). When you decide to rely on MIT-licensed
|
||||||
|
software for your day to day activities, you never know when it will be
|
||||||
|
enshittified, put behind a paywall, or
|
||||||
|
[EEE](https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish)'d out of
|
||||||
|
existence.
|
||||||
|
|
||||||
|
I'm not saying that these things are going to happen to what we knew and loved
|
||||||
|
as Eleventy. Who knows what the future may bring. But I am saying that this
|
||||||
|
move is certainly not in the spirit of Free / Libre and Open Source Software. I
|
||||||
|
fear that the age-old pattern
|
||||||
|
[that befell Standard Notes](/blog/underrated-apps-qownnotes/) is going to
|
||||||
|
happen once again here: first attractive new features appear behind a paywall,
|
||||||
|
then old features you relied on get
|
||||||
|
[put behind a paywall](https://www.reddit.com/r/StandardNotes/comments/strgh2/very_confused_about_selfhosting_and_extensions/), using the software without paying is slowly made increasingly difficult,
|
||||||
|
and, before you know it, they
|
||||||
|
[pull the ol' switcheroo](https://www.reddit.com/r/StandardNotes/comments/16wkrau/note_version_316725_is_the_last_one_to_be_free_or/)
|
||||||
|
on the license (even if they revert from embarrassment later).
|
||||||
|
|
||||||
|
At the same time, despite my misgivings, I'm happy that
|
||||||
|
[Zach Leatherman](https://www.zachleat.com/) is (I assume) going to be properly
|
||||||
|
paid to continue his work on the project. It shouldn't be so damned hard to
|
||||||
|
make a living while performing a public good. Zach seemed pretty happy about
|
||||||
|
all of this during his appearance on, *sigh*,
|
||||||
|
[Podcast Awesome](https://www.youtube.com/watch?v=QnnU_iguZ4I). He strikes me
|
||||||
|
as someone who really cares about his work, and seems a lovely man, always
|
||||||
|
willing to jump in help someone even when the problem is between the chair and
|
||||||
|
the keyboard (ask me how I know). Zach deserves, at minimum, to be paid a
|
||||||
|
decent salary for his contribution to the world, and I'm thrilled that it seems
|
||||||
|
he's going to get at least that.
|
||||||
|
|
||||||
|
Now I'm tempted to turn this into a screed on funding for FLOSS projects, but
|
||||||
|
better informed people than I have written plenty of those already, so I'll
|
||||||
|
leave it at this—the fact that NASA, Cern, Google, Microsoft, Mozilla, Ubuntu,
|
||||||
|
JetBrains, CloudCannon, Netlify, Cloudflare, Shopify, MIT, Stanford, the
|
||||||
|
governments of France, the UK, and the USA, Orange, Red Hat, Just Eat,
|
||||||
|
[and others](https://www.11ty.dev/#why-should-you-use-eleventy) didn't manage
|
||||||
|
to muster between them
|
||||||
|
[a piddling $6,000 per month](https://www.zachleat.com/web/independent-sustainable-11ty/#asking-for-help)
|
||||||
|
to pay the developer of a tool they use to publish their websites is *disgusting*. We might have avoided this situation if they had.
|
||||||
|
|
||||||
|
I developed something like a brand loyalty to Eleventy. It's a scrappy project
|
||||||
|
from a talented developer who has managed to keep it alive and well for eight
|
||||||
|
years. The project has become widely used because *it's excellent*: flexible,
|
||||||
|
powerful, fast, and easy to use for web developers who are used to working with
|
||||||
|
JavaScript. I'm sad to see the name go, along with the red balloon, and that
|
||||||
|
scruffy possum. The [clean, middle-class replacement](https://github.com/11ty/11ty-website/blob/main/src/img/mascots/awesome-possum-balloon-smile-sm.svg) with its stupid *clothing*
|
||||||
|
and *fancy green balloon* [^1] can take a hike—I can't believe they've
|
||||||
|
gentrified the damn mascot!
|
||||||
|
|
||||||
|
[](/img/eleventy-becomes-sigh-build-awesome/grumpy_among_the_stars.webp)
|
||||||
|
|
||||||
|
While I have major apprehensions about where, *sigh*, Font Awesome is going to take the project, I suppose we'll just have to wait and see where this goes. In the meantime, let's all be sure to donate to the FLOSS projects we use, publicly shame corporations who don't give back to the projects they profit from, and pressure our representatives to fund FLOSS software!
|
||||||
|
|
||||||
|
[^1]: And green is my favorite color, too :[
|
||||||
|
|
||||||
@@ -5,6 +5,7 @@ date: 2024-12-02
|
|||||||
tags:
|
tags:
|
||||||
- Site Updates
|
- Site Updates
|
||||||
- Eleventy
|
- Eleventy
|
||||||
|
- Web Development
|
||||||
synopsis: At last, I've gotten around to implementing image galleries.
|
synopsis: At last, I've gotten around to implementing image galleries.
|
||||||
imageURL: /img/isabella-fischer-X2l9M6jsS7E-unsplash.webp
|
imageURL: /img/isabella-fischer-X2l9M6jsS7E-unsplash.webp
|
||||||
imageAlt: Some very tasty looking pop tarts with pink icing and sprinkles.
|
imageAlt: Some very tasty looking pop tarts with pink icing and sprinkles.
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ date: 2025-02-04
|
|||||||
tags:
|
tags:
|
||||||
- Site Updates
|
- Site Updates
|
||||||
- Eleventy
|
- Eleventy
|
||||||
|
- Web Development
|
||||||
synopsis: "Remember when internet quizzes were a thing? I wanted to bring them to my website."
|
synopsis: "Remember when internet quizzes were a thing? I wanted to bring them to my website."
|
||||||
imageURL: ""
|
imageURL: ""
|
||||||
imageAlt: ""
|
imageAlt: ""
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ date: 2024-10-23
|
|||||||
tags:
|
tags:
|
||||||
- Music
|
- Music
|
||||||
- Site Updates
|
- Site Updates
|
||||||
|
- Web Development
|
||||||
synopsis: "I've gone and built a not-so-fancy audio component for my blog."
|
synopsis: "I've gone and built a not-so-fancy audio component for my blog."
|
||||||
imageURL: /audio/covers/ballin.webp
|
imageURL: /audio/covers/ballin.webp
|
||||||
imageAlt: An uncapped fountain pen on top of a pretty, gold-foiled pad of paper beside some envelopes with stamps featuring coffee drinks on them.
|
imageAlt: An uncapped fountain pen on top of a pretty, gold-foiled pad of paper beside some envelopes with stamps featuring coffee drinks on them.
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ description: QOwnNotes is a terminally underrated native markdown note-taking ap
|
|||||||
synopsis: QOwnNotes is a terminally underrated native markdown note-taking app, despite the fact that you'll rarely see it mentioned on the internet.
|
synopsis: QOwnNotes is a terminally underrated native markdown note-taking app, despite the fact that you'll rarely see it mentioned on the internet.
|
||||||
date: 2023-08-09
|
date: 2023-08-09
|
||||||
tags:
|
tags:
|
||||||
|
- Enshittification
|
||||||
- FOSS/FLOSS
|
- FOSS/FLOSS
|
||||||
- Underrated Apps
|
- Underrated Apps
|
||||||
imageURL: /img/qownnotes.webp
|
imageURL: /img/qownnotes.webp
|
||||||
@@ -13,7 +14,7 @@ mastodon_id: "110862579682916657"
|
|||||||
[](/img/qownnotes.webp)
|
[](/img/qownnotes.webp)
|
||||||
|
|
||||||
## What makes a good note taking app?
|
## What makes a good note taking app?
|
||||||
After its author decided to make future versions closed-source, I found myself searching for a replacement for the excellent [Notable](https://notable.app/). Unfortunately, while note-taking applications are a dime a dozen, they're also common ground for the [Notable](https://notable.app/) / [SimpleNote](https://simplenote.com/) style FLOSS bait-and-switch: developers release an outstanding note-taking app, only to make future versions closed-source, or make it inordinately difficult to properly and fully make use of the software without paying for a hosted service. Victim to the former, I set out to find a note-taking app that I felt could not only be trusted to operate in the spirit of FLOSS philosophy, but also met some key criteria:
|
After its author decided to make future versions closed-source, I found myself searching for a replacement for the excellent [Notable](https://notable.app/). Unfortunately, while note-taking applications are a dime a dozen, they're also common ground for the [Notable](https://notable.app/) / [Standard Notes](https://standardnotes.com/) style FLOSS bait-and-switch: developers release an outstanding note-taking app, only to make future versions closed-source, or make it inordinately difficult to properly and fully make use of the software without paying for a hosted service. Victim to the former, I set out to find a note-taking app that I felt could not only be trusted to operate in the spirit of FLOSS philosophy, but also met some key criteria:
|
||||||
|
|
||||||
1. Native Code
|
1. Native Code
|
||||||
|
|
||||||
|
|||||||
@@ -3,17 +3,19 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Blogroll
|
title: Nathan Upchurch | Blogroll
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
<h1>Blogroll</h1>
|
<article data-pagefind-body>
|
||||||
<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 %}
|
<h1>Blogroll</h1>
|
||||||
<section class="blogroll">
|
<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 %}
|
{% for blog in category.blogs %}
|
||||||
<div class="blogroll-category-group">
|
<div class="blogroll-category-group">
|
||||||
@@ -33,4 +35,6 @@ structuredData: none
|
|||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -3,7 +3,13 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Changelog
|
title: Nathan Upchurch | Changelog
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
* 2026-03-11
|
||||||
|
* Implemented [search](/search).
|
||||||
|
* 2026-03-06
|
||||||
|
* Updated [/incense](/incense).
|
||||||
* 2026-03-05
|
* 2026-03-05
|
||||||
* Updated [/wish](/wish) and [/incense](/incense).
|
* Updated [/wish](/wish) and [/incense](/incense).
|
||||||
* 2026-02-07
|
* 2026-02-07
|
||||||
@@ -158,3 +164,4 @@ structuredData: none
|
|||||||
* 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>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ eleventyComputed:
|
|||||||
permalink: "/gallery/{{ picture.containingGallery | slugify }}/{{ picture.filename | slugify }}/"
|
permalink: "/gallery/{{ picture.containingGallery | slugify }}/{{ picture.filename | slugify }}/"
|
||||||
description: "{{ picture.title }} from gallery: {{ picture.containingGallery}}"
|
description: "{{ picture.title }} from gallery: {{ picture.containingGallery}}"
|
||||||
---
|
---
|
||||||
<article>
|
<article data-pagefind-body>
|
||||||
<h1>{{ picture.title }}</h1>
|
<h1>{{ picture.title }}</h1>
|
||||||
<div class="buttonContainer galleryButtons">
|
<div class="buttonContainer galleryButtons">
|
||||||
{% if picture.previousImage %}
|
{% if picture.previousImage %}
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ eleventyComputed:
|
|||||||
permalink: "/gallery/{{ gallery.title | slugify }}/"
|
permalink: "/gallery/{{ gallery.title | slugify }}/"
|
||||||
description: "{{ gallery.description }}"
|
description: "{{ gallery.description }}"
|
||||||
---
|
---
|
||||||
<h1>{{ gallery.title }}</h1>
|
<div data-pagefind-body>
|
||||||
<p class="page-block nodropcap">{{ gallery.description }}</p>
|
<h1>{{ gallery.title }}</h1>
|
||||||
<section class="gallery-images">
|
<p class="page-block nodropcap">{{ gallery.description }}</p>
|
||||||
|
<section class="gallery-images">
|
||||||
{% for picture in gallery.pictures %}
|
{% for picture in gallery.pictures %}
|
||||||
<a href="/gallery/{{ gallery.title | slugify }}/{{ picture.filename | slugify }}/">
|
<a href="/gallery/{{ gallery.title | slugify }}/{{ picture.filename | slugify }}/">
|
||||||
<wc-card class="gallery-image-container">
|
<wc-card class="gallery-image-container">
|
||||||
@@ -21,4 +22,5 @@ eleventyComputed:
|
|||||||
</wc-card>
|
</wc-card>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
---
|
---
|
||||||
<h1>My image galleries.</h1>
|
<div data-pagefind-body>
|
||||||
<p class="page-block nodropcap">
|
<h1>My image galleries.</h1>
|
||||||
Photography trips, memes, and other pictures I thought would be worth sharing.
|
<p class="page-block nodropcap">
|
||||||
</p>
|
Photography trips, memes, and other pictures I thought would be worth sharing.
|
||||||
{% include "gallerieslist.njk" %}
|
</p>
|
||||||
|
{% include "gallerieslist.njk" %}
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Incense
|
title: Nathan Upchurch | Incense
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Incense: Writing & Resources
|
# Incense: Writing & Resources
|
||||||
::: info
|
::: info
|
||||||
@@ -25,6 +26,7 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
|||||||
### Resources
|
### Resources
|
||||||
* [/r/incense posts flaired with "incense making"](https://www.reddit.com/r/Incense/?f=flair_name%3A%22Incense%20Making%22)—For better or worse, the incense subreddit is *the* place to go for incense discussion and advice. I'm working on changing that, but it's slow-going; see the forums / discussion boards section below.
|
* [/r/incense posts flaired with "incense making"](https://www.reddit.com/r/Incense/?f=flair_name%3A%22Incense%20Making%22)—For better or worse, the incense subreddit is *the* place to go for incense discussion and advice. I'm working on changing that, but it's slow-going; see the forums / discussion boards section below.
|
||||||
* [incensemaking.com](https://incensemaking.com/)—A useful site, particularly for listing many of the aromatics used in incense making. Be careful, however, as not all of the ingredients listed may be suited for [combustible incense](https://en.wikipedia.org/wiki/Incense#Types).
|
* [incensemaking.com](https://incensemaking.com/)—A useful site, particularly for listing many of the aromatics used in incense making. Be careful, however, as not all of the ingredients listed may be suited for [combustible incense](https://en.wikipedia.org/wiki/Incense#Types).
|
||||||
|
* [Jarguna Incense YouTube playlist](https://www.youtube.com/watch?v=ZzPT3nU1j70&list=PLWogy1GQgvfECuf-F3kIrsuiBFXh1ctNr&index=1)
|
||||||
* [The Incense Dragon YouTube channel](https://www.youtube.com/c/IncenseDragon)
|
* [The Incense Dragon YouTube channel](https://www.youtube.com/c/IncenseDragon)
|
||||||
|
|
||||||
## Advanced Incense Making Techniques
|
## Advanced Incense Making Techniques
|
||||||
@@ -112,3 +114,4 @@ 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.
|
[^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>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ title: Nathan Upchurch | Links
|
|||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Links
|
# 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
|
||||||
@@ -258,3 +260,5 @@ 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.
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
7
content/now-burning/Now Burning_2026-03-06_12:56.md
Normal file
7
content/now-burning/Now Burning_2026-03-06_12:56.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: Warming
|
||||||
|
manufacturer: "Faircense / Pema of Tibet"
|
||||||
|
date: 2026-03-06 12:56:00
|
||||||
|
time: 12:56 PM
|
||||||
|
---
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ postlistHeaderText: "What I've been burning:"
|
|||||||
{% set burning = collections.nowBurning | last %}
|
{% set burning = collections.nowBurning | last %}
|
||||||
|
|
||||||
<h1>Now Burning:</h1>
|
<h1>Now Burning:</h1>
|
||||||
<article class="post microblog-post">
|
<article class="post microblog-post" data-pagefind-body>
|
||||||
<img class="microblog-icon" src="/img/censer.svg">
|
<img class="microblog-icon" src="/img/censer.svg">
|
||||||
<div class="microblog-status">
|
<div class="microblog-status">
|
||||||
<h2 class="">{{ burning.data.title }}{% if burning.data.manufacturer %}, {{ burning.data.manufacturer }}{% endif %}, {{ burning.date | niceDate }}, {{ burning.data.time }}</h2>
|
<h2 class="">{{ burning.data.title }}{% if burning.data.manufacturer %}, {{ burning.data.manufacturer }}{% endif %}, {{ burning.date | niceDate }}, {{ burning.data.time }}</h2>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Now
|
title: Nathan Upchurch | Now
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
<article class="post">
|
<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>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ pagination:
|
|||||||
permalink: "once-burned/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html"
|
permalink: "once-burned/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html"
|
||||||
paginationRootDir: once-burned
|
paginationRootDir: once-burned
|
||||||
---
|
---
|
||||||
|
<div data-pagefind-body>
|
||||||
|
|
||||||
<h1>Previous “Now Burning” Entries:</h1>
|
<h1>Previous “Now Burning” Entries:</h1>
|
||||||
|
|
||||||
{% set postsCount = pagination.items | length %}
|
{% set postsCount = pagination.items | length %}
|
||||||
@@ -25,3 +27,5 @@ paginationRootDir: once-burned
|
|||||||
<a href="/now-burning/">
|
<a href="/now-burning/">
|
||||||
<button type="button">Latest »</button>
|
<button type="button">Latest »</button>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -8,19 +8,23 @@ pagination:
|
|||||||
permalink: "prior-thoughts/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html"
|
permalink: "prior-thoughts/{% if pagination.pageNumber > 0 %}page-{{ pagination.pageNumber + 1 }}/{% endif %}index.html"
|
||||||
paginationRootDir: prior-thoughts
|
paginationRootDir: prior-thoughts
|
||||||
---
|
---
|
||||||
<h1>Prior thoughts:</h1>
|
<div data-pagefind-body>
|
||||||
|
|
||||||
{% set postsCount = pagination.items | length %}
|
<h1>Prior thoughts:</h1>
|
||||||
{% if postsCount > 0 %}
|
|
||||||
{% set postslist = pagination.items %}
|
|
||||||
{% set showPostListHeader = false %}
|
|
||||||
{% include "statusList.njk" %}
|
|
||||||
{% else %}
|
|
||||||
<p>Nothing’s here yet!</p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% include "permalinkButtons.njk" %}
|
{% set postsCount = pagination.items | length %}
|
||||||
|
{% if postsCount > 0 %}
|
||||||
|
{% set postslist = pagination.items %}
|
||||||
|
{% set showPostListHeader = false %}
|
||||||
|
{% include "statusList.njk" %}
|
||||||
|
{% else %}
|
||||||
|
<p>Nothing’s here yet!</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<a href="/status/">
|
{% include "permalinkButtons.njk" %}
|
||||||
|
|
||||||
|
<a href="/status/">
|
||||||
<button type="button">Latest »</button>
|
<button type="button">Latest »</button>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -5,11 +5,15 @@ title: Nathan Upchurch | Quizzes
|
|||||||
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!"
|
||||||
---
|
---
|
||||||
<h1>Quizzes</h1>
|
<div data-pagefind-body>
|
||||||
<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 %}
|
<h1>Quizzes</h1>
|
||||||
<h2>Available Quizzes:</h2>
|
<p>Test your knowledge, learn about yourself, and waste your precious time, right here, right now, with a quiz!</p>
|
||||||
{% set postslist = collections.quiz %}
|
|
||||||
{% set showPostListHeader = false %}
|
{% set postsCount = collections.quiz | length %}
|
||||||
{% include "postslist.njk" %}
|
<h2>Available Quizzes:</h2>
|
||||||
|
{% set postslist = collections.quiz %}
|
||||||
|
{% set showPostListHeader = false %}
|
||||||
|
{% include "postslist.njk" %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Referrals
|
title: Nathan Upchurch | Referrals
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Referrals / Affiliate Links
|
# Referrals / Affiliate Links
|
||||||
|
|
||||||
@@ -10,3 +11,5 @@ Here are some referral links to services / products that I use and recommend. Ye
|
|||||||
|
|
||||||
## 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>
|
||||||
|
|||||||
11
content/search/index.njk
Normal file
11
content/search/index.njk
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
layout: layouts/base.njk
|
||||||
|
search: true
|
||||||
|
title: Nathan Upchurch | Search
|
||||||
|
structuredData: none
|
||||||
|
---
|
||||||
|
<h1>Search this site</h1>
|
||||||
|
|
||||||
|
<div id="search" class="search"></div>
|
||||||
|
|
||||||
|
<script src="/pagefind/pagefind-ui.js" onload="new PagefindUI({ element: '#search', showImages: false });"></script>
|
||||||
@@ -3,6 +3,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Sitemap
|
title: Nathan Upchurch | Sitemap
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Sitemap
|
# Sitemap
|
||||||
* [Home](/)
|
* [Home](/)
|
||||||
@@ -26,6 +27,7 @@ structuredData: none
|
|||||||
* [Once Burned](/once-burned)
|
* [Once Burned](/once-burned)
|
||||||
* [Prior Thoughts](/prior-thoughts)
|
* [Prior Thoughts](/prior-thoughts)
|
||||||
* [Referrals](/referrals)
|
* [Referrals](/referrals)
|
||||||
|
* [Search](/search)
|
||||||
* [Slashes](/slashes)
|
* [Slashes](/slashes)
|
||||||
* Special
|
* Special
|
||||||
* [Flying Toasters](/special/flying-toasters)
|
* [Flying Toasters](/special/flying-toasters)
|
||||||
@@ -33,3 +35,5 @@ structuredData: none
|
|||||||
* [Status](/status)
|
* [Status](/status)
|
||||||
* [Wishes](/wish)
|
* [Wishes](/wish)
|
||||||
* [Quizzes](/quizzes)
|
* [Quizzes](/quizzes)
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Slashes
|
title: Nathan Upchurch | Slashes
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# Slashes
|
# Slashes
|
||||||
|
|
||||||
@@ -20,3 +21,5 @@ This is an index of all my [slash pages](https://slashpages.net/). These are pag
|
|||||||
* [/Referrals](/referrals)
|
* [/Referrals](/referrals)
|
||||||
* [/Sitemap](/sitemap)
|
* [/Sitemap](/sitemap)
|
||||||
* [/Wish](/wish)
|
* [/Wish](/wish)
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ permalink: "/status/index.html"
|
|||||||
{% set status = collections.status | last %}
|
{% set status = collections.status | last %}
|
||||||
|
|
||||||
<h1>Nathan’s status:</h1>
|
<h1>Nathan’s status:</h1>
|
||||||
<article class="post microblog-post">
|
<article class="post microblog-post" data-pagefind-body>
|
||||||
<div class="microblog-status card">
|
<div class="microblog-status card">
|
||||||
<span class="microblog-emoji">{{ status.data.emoji }}</span>
|
<span class="microblog-emoji">{{ status.data.emoji }}</span>
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,19 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Tags
|
title: Nathan Upchurch | Tags
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
<h1>Tags / Topics</h1>
|
<article data-pagefind-body>
|
||||||
|
|
||||||
<p class="page-block nodropcap">
|
<h1>Tags / Topics</h1>
|
||||||
Click on a tag to see all posts on the topic; you can also subscribe to an RSS feed of any individual topic on the topic page.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul class="taglist">
|
<p class="page-block nodropcap">
|
||||||
{% for tag in collections.all | getAllTags | filterTagList | sort(false, false, tag) %}
|
Click on a tag to see all posts on the topic; you can also subscribe to an RSS feed of any individual topic on the topic page.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="taglist">
|
||||||
|
{% for tag in collections.all | getAllTags | filterTagList | sort(false, false, tag) %}
|
||||||
{% set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
{% set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
||||||
<li><a href="{{ tagUrl }}" class="post-tag">{{ tag }}</a></li>
|
<li><a href="{{ tagUrl }}" class="post-tag">{{ tag }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ pagination:
|
|||||||
- post
|
- post
|
||||||
- posts
|
- posts
|
||||||
- tagList
|
- tagList
|
||||||
|
- feed
|
||||||
|
- onceBurned
|
||||||
|
- nowBurning
|
||||||
|
- status
|
||||||
|
- priorThoughts
|
||||||
addAllPagesToCollections: true
|
addAllPagesToCollections: true
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
postlistHeaderText: "Latest Posts:"
|
postlistHeaderText: "Latest Posts:"
|
||||||
@@ -17,10 +22,12 @@ eleventyComputed:
|
|||||||
permalink: "/tags/{{ tag | slugify }}/"
|
permalink: "/tags/{{ tag | slugify }}/"
|
||||||
description: A list of every post I've written tagged “{{ tag }}.”
|
description: A list of every post I've written tagged “{{ tag }}.”
|
||||||
---
|
---
|
||||||
<h1>Topic: “{{ tag }}.”
|
<article data-pagefind-body>
|
||||||
</h1>
|
|
||||||
<p class="page-block nodropcap">
|
<h1>Topic: “{{ tag }}.”
|
||||||
Here’s everything I’ve posted tagged “{{ tag }}.” Want to be notified when I post on this topic? Subscribe to “{{ tag }}” using the button below.<br>
|
</h1>
|
||||||
|
<p class="page-block nodropcap">
|
||||||
|
Here’s everything I’ve posted tagged “{{ tag }}.” Want to be notified when I post on this topic? Subscribe to “{{ tag }}” using the button below.<br>
|
||||||
<a class="link-button" href="/tags/">
|
<a class="link-button" href="/tags/">
|
||||||
<button type="button">
|
<button type="button">
|
||||||
More topics »
|
More topics »
|
||||||
@@ -32,7 +39,9 @@ Here’s everything I’ve posted tagged “{{ tag }}.” Want to be notified wh
|
|||||||
Subscribe »
|
Subscribe »
|
||||||
</button>
|
</button>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% set postslist = collections[ tag ] | reverse %}
|
{% set postslist = collections[ tag ] | reverse %}
|
||||||
{% include "postslist.njk" %}
|
{% include "postslist.njk" %}
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ layout: layouts/base.njk
|
|||||||
title: Nathan Upchurch | Wish
|
title: Nathan Upchurch | Wish
|
||||||
structuredData: none
|
structuredData: none
|
||||||
---
|
---
|
||||||
|
<article data-pagefind-body>
|
||||||
|
|
||||||
# My Wishlist
|
# My Wishlist
|
||||||
## What is this?
|
## What is this?
|
||||||
@@ -92,3 +93,5 @@ However if abstention seems unconscionable, I would be delighted if you were to
|
|||||||
* Healthcare, education, housing, and any resource necessary to sustain life to be free for all.
|
* Healthcare, education, housing, and any resource necessary to sustain life to be free for all.
|
||||||
|
|
||||||
[^1]: Within reason—if you are filthy rich and would like to buy me a house or finance an escape to the UK for my partner and I, I'll not slap your hand away.
|
[^1]: Within reason—if you are filthy rich and would like to buy me a house or finance an escape to the UK for my partner and I, I'll not slap your hand away.
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|||||||
@@ -12,12 +12,21 @@ 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";
|
||||||
|
// For PageFind
|
||||||
|
import childProcess from "child_process";
|
||||||
|
|
||||||
const figoptions = {
|
const figoptions = {
|
||||||
figcaption: true,
|
figcaption: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default async function (eleventyConfig) {
|
export default async function (eleventyConfig) {
|
||||||
|
// PageFind Search
|
||||||
|
eleventyConfig.on("eleventy.after", () => {
|
||||||
|
childProcess.execSync(`npx pagefind --site _site --glob "**/*.html"`, {
|
||||||
|
encoding: "utf-8",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Customize Markdown library settings:
|
// Customize Markdown library settings:
|
||||||
let markdownItOptions = {
|
let markdownItOptions = {
|
||||||
html: true,
|
html: true,
|
||||||
|
|||||||
@@ -37,7 +37,8 @@
|
|||||||
"luxon": "^3.3.0",
|
"luxon": "^3.3.0",
|
||||||
"markdown-it-anchor": "^8.6.7",
|
"markdown-it-anchor": "^8.6.7",
|
||||||
"markdown-it-footnote": "^3.0.3",
|
"markdown-it-footnote": "^3.0.3",
|
||||||
"mdfigcaption": "^0.1.1"
|
"mdfigcaption": "^0.1.1",
|
||||||
|
"pagefind": "^1.4.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@11tyrocks/eleventy-plugin-emoji-readtime": "^1.0.1",
|
"@11tyrocks/eleventy-plugin-emoji-readtime": "^1.0.1",
|
||||||
|
|||||||
@@ -255,6 +255,9 @@ main {
|
|||||||
.indexFeature:not(:last-child) {
|
.indexFeature:not(:last-child) {
|
||||||
padding-bottom: var(--space-l);
|
padding-bottom: var(--space-l);
|
||||||
}
|
}
|
||||||
|
mark {
|
||||||
|
background-color: var(--contrast-color);
|
||||||
|
}
|
||||||
nav {
|
nav {
|
||||||
grid-column: 2 / span 12;
|
grid-column: 2 / span 12;
|
||||||
}
|
}
|
||||||
@@ -583,7 +586,7 @@ hr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Dropcap */
|
/* Dropcap */
|
||||||
main > section > article > p:not(.nodropcap):first-of-type:first-letter {
|
main > section > article.post > p:not(.nodropcap):first-of-type:first-letter {
|
||||||
float: left;
|
float: left;
|
||||||
font-size: var(--step-5);
|
font-size: var(--step-5);
|
||||||
padding: var(--space-2xs);
|
padding: var(--space-2xs);
|
||||||
|
|||||||
51
public/css/search.css
Normal file
51
public/css/search.css
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
:root {
|
||||||
|
--pagefind-ui-scale: 1;
|
||||||
|
--pagefind-ui-primary: var(--contrast-color);
|
||||||
|
--pagefind-ui-text: var(--text-color);
|
||||||
|
--pagefind-ui-background: var(--background-color);
|
||||||
|
--pagefind-ui-border: var(--color-gray-20);
|
||||||
|
--pagefind-ui-tag: var(--text-color);
|
||||||
|
--pagefind-ui-border-width: 1px;
|
||||||
|
--pagefind-ui-border-radius: var(--border-radius);
|
||||||
|
--pagefind-ui-font: var(--font-family);
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background-color: var(--background-color) !important;
|
||||||
|
color: var(--contrast-color) !important;
|
||||||
|
font-variation-settings:
|
||||||
|
"opsz" 18,
|
||||||
|
"wght" 510,
|
||||||
|
"SOFT" 40,
|
||||||
|
"WONK" 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagefind-ui__button {
|
||||||
|
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;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagefind-ui__search-clear {
|
||||||
|
font-family: var(--meta-font-family) !important;
|
||||||
|
font-size: var(--meta-font-size) !important;
|
||||||
|
font-style: var(--meta-font-style) !important;
|
||||||
|
font-variation-settings: var(--meta-font-variation-settings) !important;
|
||||||
|
line-height: calc(
|
||||||
|
var(--meta-font-size) * 0.5 + var(--meta-font-size)
|
||||||
|
) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagefind-ui__search-input {
|
||||||
|
border-color: var(--contrast-color) !important;
|
||||||
|
}
|
||||||
BIN
public/img/eleventy-becomes-sigh-build-awesome/eleventy-logo.png
Normal file
BIN
public/img/eleventy-becomes-sigh-build-awesome/eleventy-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
41
public/img/icons/breeze/file-search-symbolic.svg
Normal file
41
public/img/icons/breeze/file-search-symbolic.svg
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
sodipodi:docname="file-search-symbolic.svg"
|
||||||
|
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="57.0625"
|
||||||
|
inkscape:cx="8"
|
||||||
|
inkscape:cy="10.102957"
|
||||||
|
inkscape:window-width="2048"
|
||||||
|
inkscape:window-height="1080"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg1" />
|
||||||
|
<defs
|
||||||
|
id="defs3051">
|
||||||
|
<style
|
||||||
|
type="text/css"
|
||||||
|
id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style>
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
style="fill:#faf5f5;fill-opacity:1;stroke:none"
|
||||||
|
d="M 6.5 2 C 4.007 2 2 4.01 2 6.5 C 2 8.993 4.01 11 6.5 11 C 7.5636432 11 8.5263409 10.618801 9.2949219 10.005859 L 13.292969 14.003906 L 14 13.296875 L 10.001953 9.2988281 C 10.617604 8.529048 11 7.565338 11 6.5 C 11 4.007 8.99 2 6.5 2 z M 6.5 3 C 8.439 3 10 4.561 10 6.5 C 10 8.439 8.439 10 6.5 10 C 4.561 10 3 8.439 3 6.5 C 3 4.561 4.561 3 6.5 3 z "
|
||||||
|
class="ColorScheme-Text"
|
||||||
|
id="path1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
Reference in New Issue
Block a user