<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="../xsl/basic.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="en">
	<title>“Web Development” from Nathan Upchurch</title>
	<subtitle>Web Development: The personal website and blog of Nathan Upchurch, where I write about incense, free and open source software, design, vegan cooking, music, and all sorts of other topics that I find interesting.</subtitle>
	<link href="https://nathanupchurch.com/feeds/web-development.xml" rel="self"/>
	<link href="https://nathanupchurch.com/"/>
	<updated>2026-03-11T00:00:00Z</updated>
	<id>https://nathanupchurch.com/</id>
	<author>
		<name>Nathan Upchurch</name>
		<email>blog@upchur.ch</email>
	</author>
	
	
	
	
	<entry>
		<title>Eleventy Becomes, *Sigh*, Build Awesome</title>
		<description>Sustainability? Enshittification? I have some feelings about this.</description>
		<link href="https://nathanupchurch.com/blog/eleventy-becomes-build-awesome/"/>
		<updated>2026-03-11T00:00:00Z</updated>
		<id>https://nathanupchurch.com/blog/eleventy-becomes-build-awesome/</id>
		<image>
			<url>https://nathanupchurch.com/img/eleventy-becomes-sigh-build-awesome/eleventy-logo.png</url>
			<title>The old Eleventy logo.</title>
			<link href="https://nathanupchurch.com/blog/eleventy-becomes-build-awesome/"/>
		</image>
		<content type="html">&lt;p&gt;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, &lt;em&gt;sigh&lt;/em&gt;,
&lt;a href=&quot;https://www.11ty.dev/blog/build-awesome/&quot;&gt;Build Awesome&lt;/a&gt;. After seeing what
happened to &lt;a href=&quot;https://shoelace.style/&quot;&gt;Shoelace&lt;/a&gt;, 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
&lt;a href=&quot;https://knowyourmeme.com/memes/stomp-clap-hey-music&quot;&gt;stomp-clap music&lt;/a&gt; went
out of style. It seems like
&lt;a href=&quot;https://www.allaboutken.com/posts/20260305-digesting-eleventy-becomes-build-awesome/&quot;&gt;I’m not the only one&lt;/a&gt;
who feels this way either.&lt;/p&gt;
&lt;p&gt;While disappointed with this state of affairs, I’m not terribly surprised.
Beyond the matter of funding,
&lt;a href=&quot;https://darthmall.net/notes/2026/eleventy-build-awesome/&quot;&gt;as W. Evan Sheehan of The Darth Mall put it&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;…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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wholeheartedly agree. There’s
&lt;a href=&quot;https://www.gnu.org/philosophy/open-source-misses-the-point.en.html&quot;&gt;a big difference&lt;/a&gt;
in philosophy between “free software” and “open source,” and many JavaScript
projects seem to be firmly in the latter camp.&lt;/p&gt;
&lt;p&gt;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,
developers may &lt;em&gt;not&lt;/em&gt; strip these rights from users at any point.&lt;/p&gt;
&lt;p&gt;The goal of the free software movement is to create a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Commons&quot;&gt;commons&lt;/a&gt; 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
&lt;a href=&quot;https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish&quot;&gt;EEE&lt;/a&gt;’d out of
existence.&lt;/p&gt;
&lt;p&gt;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
&lt;a href=&quot;https://nathanupchurch.com/blog/underrated-apps-qownnotes/&quot;&gt;that befell Standard Notes&lt;/a&gt; is going to
happen once again here: first attractive new features appear behind a paywall,
then old features you relied on get
&lt;a href=&quot;https://www.reddit.com/r/StandardNotes/comments/strgh2/very_confused_about_selfhosting_and_extensions/&quot;&gt;put behind a paywall&lt;/a&gt;, using the software without paying is slowly made increasingly difficult,
and, before you know it, they
&lt;a href=&quot;https://www.reddit.com/r/StandardNotes/comments/16wkrau/note_version_316725_is_the_last_one_to_be_free_or/&quot;&gt;pull the ol’ switcheroo&lt;/a&gt;
on the license (even if they revert from embarrassment later).&lt;/p&gt;
&lt;p&gt;At the same time, despite my misgivings, I’m happy that
&lt;a href=&quot;https://www.zachleat.com/&quot;&gt;Zach Leatherman&lt;/a&gt; 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, &lt;em&gt;sigh&lt;/em&gt;,
&lt;a href=&quot;https://www.youtube.com/watch?v=QnnU_iguZ4I&quot;&gt;Podcast Awesome&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;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,
&lt;a href=&quot;https://www.11ty.dev/#why-should-you-use-eleventy&quot;&gt;and others&lt;/a&gt; didn’t manage
to muster between them
&lt;a href=&quot;https://www.zachleat.com/web/independent-sustainable-11ty/#asking-for-help&quot;&gt;a piddling $6,000 per month&lt;/a&gt;
to pay the developer of a tool they use to publish their websites is &lt;em&gt;disgusting&lt;/em&gt;. We might have avoided this situation if they had.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;it’s excellent&lt;/em&gt;: 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 &lt;a href=&quot;https://github.com/11ty/11ty-website/blob/main/src/img/mascots/awesome-possum-balloon-smile-sm.svg&quot;&gt;clean, middle-class replacement&lt;/a&gt; with its stupid &lt;em&gt;clothing&lt;/em&gt;
and &lt;em&gt;fancy green balloon&lt;/em&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://nathanupchurch.com/blog/eleventy-becomes-build-awesome/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; can take a hike—I can’t believe they’ve
gentrified the damn mascot!&lt;/p&gt;
&lt;figure&gt;&lt;a href=&quot;https://nathanupchurch.com/img/eleventy-becomes-sigh-build-awesome/grumpy_among_the_stars.webp&quot;&gt;&lt;img src=&quot;https://nathanupchurch.com/img/eleventy-becomes-sigh-build-awesome/grumpy_among_the_stars.webp&quot; alt=&quot;Grumpy, one of Eleventy&#39;s mascot possums suspended from a red balloon in a field of stars.&quot;&gt;&lt;/a&gt;&lt;figcaption&gt;They say Grumpy floats among the stars now.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;While I have major apprehensions about where, &lt;em&gt;sigh&lt;/em&gt;, 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!&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;And green is my favorite color, too :[ &lt;a href=&quot;https://nathanupchurch.com/blog/eleventy-becomes-build-awesome/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
	</entry>
	
	
	
	
	
	<entry>
		<title>100 Webmaster Questions</title>
		<description>Answering a lot of questions.</description>
		<link href="https://nathanupchurch.com/blog/100-webmaster-questions/"/>
		<updated>2026-02-05T00:00:00Z</updated>
		<id>https://nathanupchurch.com/blog/100-webmaster-questions/</id>
		<image>
			<url>https://nathanupchurch.com/img/logo_post.svg</url>
			<title>The logo for this blog: a capital letter N.</title>
			<link href="https://nathanupchurch.com/blog/100-webmaster-questions/"/>
		</image>
		<content type="html">&lt;p&gt;I found this questionnaire on the website of my &lt;a href=&quot;https://geekring.net/&quot;&gt;Geekring&lt;/a&gt; neighbor &lt;a href=&quot;https://corvidae.digital/100&quot;&gt;Corvidae&lt;/a&gt;. &lt;a href=&quot;https://mouseling.net/100webmaster.txt&quot;&gt;Original questions sheet on mousling.net&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;please-introduce-yourself&quot; tabindex=&quot;-1&quot;&gt;Please introduce yourself. &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#please-introduce-yourself&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’m Nathan. I live in Chicago, U.S.A., and have far too many interests. I play classical trombone for fun, make incense sticks, write things, cook vegan food, and more.&lt;/p&gt;
&lt;h2 id=&quot;how-long-have-you-been-making-websites&quot; tabindex=&quot;-1&quot;&gt;How long have you been making websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-long-have-you-been-making-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Beside tinkering with HTML and CSS to customize my MySpace profile, I first started back in, oh, 2004 or 2005.&lt;/p&gt;
&lt;h2 id=&quot;and-what-got-you-into-the-hobby&quot; tabindex=&quot;-1&quot;&gt;And what got you into the hobby? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#and-what-got-you-into-the-hobby&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I just became so exhausted with both mainstream social media and the idea of a “personal brand” that I decided I needed a space on the internet where I could just sort of exist as a human honestly, and on my own terms.&lt;/p&gt;
&lt;h2 id=&quot;what-kind-of-website-are-you-most-interested-in&quot; tabindex=&quot;-1&quot;&gt;What kind of website are you most interested in? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-kind-of-website-are-you-most-interested-in&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Personal sites, featuring real people earnestly documenting their existence creatively. I’d like everyone to have one.&lt;/p&gt;
&lt;h2 id=&quot;what-s-your-workflow-do-you-plan-your-websites-out-thoroughly-or-do-you-come-up-with-the-design-as-you-go-along&quot; tabindex=&quot;-1&quot;&gt;What’s your workflow? do you plan your websites out thoroughly or do you come up with the design as you go along? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-s-your-workflow-do-you-plan-your-websites-out-thoroughly-or-do-you-come-up-with-the-design-as-you-go-along&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If I’m making a site for a client, the whole thing is absolutely planned out first in order to nail down the scope. Then the design has to be done, from concepts to revisions and final approval, before any code can be written. If I’m making something for myself, I often just start with code and see where it goes.&lt;/p&gt;
&lt;h2 id=&quot;please-link-to-your-biggest-inspirations&quot; tabindex=&quot;-1&quot;&gt;Please link to your biggest inspirations. &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#please-link-to-your-biggest-inspirations&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This might sound a bit conceited, but I don’t know that I have any. I find that a lot of competition-winning design work is actually just ghastly to use and totally ignores accessibility, so I kind of have beef with many of my contemporaries. Really, the goal for my website was to try to make an excellent reading experience. It’s not the most cutting-edge design, or the most interesting, but I think I’ve at least done that.&lt;/p&gt;
&lt;h2 id=&quot;what-s-your-favourite-part-about-making-websites&quot; tabindex=&quot;-1&quot;&gt;What’s your favourite part about making websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-s-your-favourite-part-about-making-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I love getting to that stage where you have systems in place and updates become really simple. I get a lot of satisfaction in refactoring, and trying to make things modular and reusable.&lt;/p&gt;
&lt;h2 id=&quot;and-the-thing-you-struggle-with-the-most&quot; tabindex=&quot;-1&quot;&gt;And the thing you struggle with the most? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#and-the-thing-you-struggle-with-the-most&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Getting over the blank page. Starting from nothing is always stressful.&lt;/p&gt;
&lt;h2 id=&quot;do-you-keep-the-same-layout-on-all-of-your-pages-or-do-you-use-different-ones&quot; tabindex=&quot;-1&quot;&gt;Do you keep the same layout on all of your pages? or do you use different ones? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-keep-the-same-layout-on-all-of-your-pages-or-do-you-use-different-ones&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pretty much, yea. I use fluid spacing and type-sizing so the whole site is responsive and usable at any screen size without a single media query. I don’t have much interest in tackling all of those problems again for a different layout haha.&lt;/p&gt;
&lt;h2 id=&quot;how-confident-are-you-with-css&quot; tabindex=&quot;-1&quot;&gt;How confident are you with css? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-confident-are-you-with-css&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think I’m pretty solid. CSS is becoming more and more capable and easy to use. Christ, we have variables (custom properties) and nested selectors these days. It’s not often I find myself banging my head against the wall anymore at any rate. Now if only I could keep my CSS a little more tidy…&lt;/p&gt;
&lt;h2 id=&quot;do-you-know-how-to-correctly-use-dl&quot; tabindex=&quot;-1&quot;&gt;Do you know how to correctly use &lt;code&gt;&amp;lt;dl&amp;gt;&lt;/code&gt;? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-know-how-to-correctly-use-dl&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’ve never needed it, but I’m glad to have learned about it here.&lt;/p&gt;
&lt;h2 id=&quot;what-is-your-favorite-html-element&quot; tabindex=&quot;-1&quot;&gt;What is your favorite html element? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-is-your-favorite-html-element&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The dialog element is really neat. It does so much for you too.&lt;/p&gt;
&lt;h2 id=&quot;if-you-re-making-a-new-web-page-from-scratch-what-is-the-first-thing-you-do&quot; tabindex=&quot;-1&quot;&gt;If you’re making a new web page from scratch, what is the first thing you do? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#if-you-re-making-a-new-web-page-from-scratch-what-is-the-first-thing-you-do&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I like to use &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;, so I’m not likely to be starting from scratch. If I had to though, I’d probably go remind myself what HTML boilerplate I’m supposed to be using these days.&lt;/p&gt;
&lt;h2 id=&quot;do-you-know-javascript&quot; tabindex=&quot;-1&quot;&gt;Do you know javascript? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-know-javascript&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes. I use it for desktop automation too, with Node.&lt;/p&gt;
&lt;h2 id=&quot;how-about-php&quot; tabindex=&quot;-1&quot;&gt;How about php? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-about-php&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I fear PHP.&lt;/p&gt;
&lt;h2 id=&quot;does-your-website-have-a-theme-that-you-stick-to&quot; tabindex=&quot;-1&quot;&gt;Does your website have a theme that you stick to? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#does-your-website-have-a-theme-that-you-stick-to&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For sure.&lt;/p&gt;
&lt;h2 id=&quot;are-you-more-focused-on-content-or-design&quot; tabindex=&quot;-1&quot;&gt;Are you more focused on content or design? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-more-focused-on-content-or-design&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Content. The reading experience is pretty good, so while I sometimes feel that my site is a little dull compared to some other personal sites, I’m happy with that.&lt;/p&gt;
&lt;h2 id=&quot;do-you-own-a-domain-name-if-not-would-you-ever-want-to&quot; tabindex=&quot;-1&quot;&gt;Do you own a domain name? if not, would you ever want to? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-own-a-domain-name-if-not-would-you-ever-want-to&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Absolutely. A few, actually.&lt;/p&gt;
&lt;h2 id=&quot;what-do-you-think-of-nostalgia-focused-or-retro-websites&quot; tabindex=&quot;-1&quot;&gt;What do you think of nostalgia-focused or “retro” websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-do-you-think-of-nostalgia-focused-or-retro-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think they’re fun and I like to see them.&lt;/p&gt;
&lt;h2 id=&quot;is-your-html-valid-do-you-even-check&quot; tabindex=&quot;-1&quot;&gt;Is your html valid? do you even check? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#is-your-html-valid-do-you-even-check&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lord, I haven’t thought about that in a minute. I may have to fix a few things…&lt;/p&gt;
&lt;h2 id=&quot;what-are-your-opinion-on-buttons-and-banners&quot; tabindex=&quot;-1&quot;&gt;What are your opinion on buttons and banners? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-are-your-opinion-on-buttons-and-banners&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;They’re fun. I’d like to make a dedicated page for them at some point.&lt;/p&gt;
&lt;h2 id=&quot;what-do-you-think-of-button-walls-in-particular&quot; tabindex=&quot;-1&quot;&gt;What do you think of button walls in particular? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-do-you-think-of-button-walls-in-particular&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think they’re fun.&lt;/p&gt;
&lt;h2 id=&quot;if-you-started-over-again-would-you-make-something-similar-or-completely-different&quot; tabindex=&quot;-1&quot;&gt;If you started over again, would you make something similar or completely different? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#if-you-started-over-again-would-you-make-something-similar-or-completely-different&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think it would be pretty similar, to be honest.&lt;/p&gt;
&lt;h2 id=&quot;are-you-envious-of-other-people-s-websites&quot; tabindex=&quot;-1&quot;&gt;Are you envious of other people’s websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-envious-of-other-people-s-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All the time! I love the cool stuff people build onto their sites: music players, et cetera. I just have to remind myself that my site has different goals.&lt;/p&gt;
&lt;h2 id=&quot;what-text-editor-do-you-use&quot; tabindex=&quot;-1&quot;&gt;What text editor do you use? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-text-editor-do-you-use&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I use the woefully underrated &lt;a href=&quot;https://kate-editor.org/&quot;&gt;Kate&lt;/a&gt;. For quick edits I use &lt;a href=&quot;https://apps.kde.org/kwrite/&quot;&gt;KWrite&lt;/a&gt;. In the terminal, I use Nano.&lt;/p&gt;
&lt;h2 id=&quot;why-do-you-use-that-one&quot; tabindex=&quot;-1&quot;&gt;Why do you use that one? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#why-do-you-use-that-one&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kate is a lightweight native application with no electron bloat, and it has so may features. KWrite is also native, but it’s really pared down, which is what you want sometimes. And as for Nano, well I just don’t want to have to memorize esoteric commands to edit text.&lt;/p&gt;
&lt;h2 id=&quot;do-you-host-your-image-files-on-your-web-server-or-on-another-host&quot; tabindex=&quot;-1&quot;&gt;Do you host your image files on your web server, or on another host? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-host-your-image-files-on-your-web-server-or-on-another-host&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All images and typefaces are served locally. I’m careful to optimize images, and I don’t want my visitors to be tracked by Google via Google Fonts. I do use a PeerTube instance for video.&lt;/p&gt;
&lt;h2 id=&quot;this-might-not-be-relevant-to-you-but-what-s-your-opinion-on-the-neocities-vs-nekoweb-debate&quot; tabindex=&quot;-1&quot;&gt;This might not be relevant to you, but what’s your opinion on the neocities vs. nekoweb debate? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#this-might-not-be-relevant-to-you-but-what-s-your-opinion-on-the-neocities-vs-nekoweb-debate&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No idea. I host my own stuff.&lt;/p&gt;
&lt;h2 id=&quot;how-much-server-space-would-you-estimate-your-main-website-takes-up&quot; tabindex=&quot;-1&quot;&gt;How much server space would you estimate your main website takes up? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-much-server-space-would-you-estimate-your-main-website-takes-up&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At the time of writing, it’s 90.2 MiB, with 564 files and 247 directories. Nuts!&lt;/p&gt;
&lt;h2 id=&quot;do-you-keep-local-backups-of-your-files&quot; tabindex=&quot;-1&quot;&gt;Do you keep local backups of your files? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-keep-local-backups-of-your-files&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I develop my site locally, so there’s that. I also have a copy on my Gitea instance.&lt;/p&gt;
&lt;h2 id=&quot;do-you-prefer-simple-or-highly-visual-websites&quot; tabindex=&quot;-1&quot;&gt;Do you prefer simple or highly visual websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-prefer-simple-or-highly-visual-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It really depends on the goals of the site! If it’s designed to be a visually engaging website that encourages exploration, it makes sense to have some visual complexity going on. On the other hand, if I’m there to read an article, I don’t want that to be hindered by the design.&lt;/p&gt;
&lt;h2 id=&quot;do-you-stick-to-certain-colours-do-you-do-that-on-purpose-or-is-it-your-subconscious&quot; tabindex=&quot;-1&quot;&gt;Do you stick to certain colours? do you do that on purpose, or is it your subconscious? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-stick-to-certain-colours-do-you-do-that-on-purpose-or-is-it-your-subconscious&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It varies from project to project.&lt;/p&gt;
&lt;h2 id=&quot;have-you-ever-thought-about-quitting-why&quot; tabindex=&quot;-1&quot;&gt;Have you ever thought about quitting? why? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#have-you-ever-thought-about-quitting-why&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No, at least where it concerns my personal projects. Client work isn’t as fun, so I think I’m going to be pretty choosy about what I work on for the foreseeable future (outside of my day-job) because I really have come to value my free time very highly.&lt;/p&gt;
&lt;h2 id=&quot;do-you-have-many-webmaster-friends-or-is-it-a-solitary-hobby&quot; tabindex=&quot;-1&quot;&gt;Do you have many webmaster friends, or is it a solitary hobby? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-have-many-webmaster-friends-or-is-it-a-solitary-hobby&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not many, but one or two.&lt;/p&gt;
&lt;h2 id=&quot;do-people-in-your-real-life-know-about-your-website&quot; tabindex=&quot;-1&quot;&gt;Do people in your real life know about your website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-people-in-your-real-life-know-about-your-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes. It’s got my name on it haha.&lt;/p&gt;
&lt;h2 id=&quot;do-you-update-your-website-very-often-how-often-is-very-often&quot; tabindex=&quot;-1&quot;&gt;Do you update your website very often? how often is “very often”? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-update-your-website-very-often-how-often-is-very-often&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I do; I have “status” and “now burning” sections on my site for micro-blogging and listing what incense sticks I’m burning. I wrote &lt;a href=&quot;https://nathanupchurch.com/blog/Solving-SSG-Microblogging-Ergonomics-with-KDialog-for-Incense-Posting/&quot;&gt;a wee utility&lt;/a&gt; to make it quick and easy to post these during the work-day, so updates usually happen from at least every other day to multiple times a day.&lt;/p&gt;
&lt;h2 id=&quot;and-the-overall-design-do-you-change-that-much-why-or-why-not&quot; tabindex=&quot;-1&quot;&gt;And the overall design, do you change that much? why or why not? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#and-the-overall-design-do-you-change-that-much-why-or-why-not&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No. I feel that I’ve met my design goals for my site, and getting the fluid type / spacing system and variable typefaces right took so. much. time. I have zero interest in doing all of that work again.&lt;/p&gt;
&lt;h2 id=&quot;is-your-website-more-you-focused-hobby-focused-or-outside-world-focused&quot; tabindex=&quot;-1&quot;&gt;Is your website more you-focused, hobby-focused, or outside world-focused? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#is-your-website-more-you-focused-hobby-focused-or-outside-world-focused&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It’s a little of everything. I really want my website to represent me as a whole human, so I try to make sure that there’s a good mix of creativity, life stuff, writing on hobbies and interests, et cetera.&lt;/p&gt;
&lt;h2 id=&quot;do-you-do-web-design-professionally&quot; tabindex=&quot;-1&quot;&gt;Do you do web design professionally? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-do-web-design-professionally&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes. I have a design firm that I operate with my business partner &lt;a href=&quot;https://daveydynamite.neocities.org/&quot;&gt;Davey&lt;/a&gt;, although we don’t do a lot with it at the minute. I also sometimes do web projects as a part of my role at my day job.&lt;/p&gt;
&lt;h2 id=&quot;if-not-would-you-like-to-and-if-you-re-comfortable-answering-what-do-you-do-for-work&quot; tabindex=&quot;-1&quot;&gt;If not, would you like to? and if you’re comfortable answering, what do you do for work? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#if-not-would-you-like-to-and-if-you-re-comfortable-answering-what-do-you-do-for-work&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My title doesn’t elucidate much, but my day job is a director-level role at a Chicago non-profit. It’s a small organization, so we all have a hand in operations, but I also do design work, process work, and a little automation. I do everything from design collateral for events, to leading digital infrastructure integration projects, and building processes and tools for our team. I know a lot of people would complain about doing so many things, but I really value variety and enjoy project work so it fits me pretty well.&lt;/p&gt;
&lt;h2 id=&quot;do-you-communicate-with-people-by-email-very-much&quot; tabindex=&quot;-1&quot;&gt;Do you communicate with people by email very much? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-communicate-with-people-by-email-very-much&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yea, I often email with other incense-heads and I get occasional emails from people who read my blog. I enjoy it when people get in touch with questions and comments.&lt;/p&gt;
&lt;h2 id=&quot;some-people-reject-social-media-and-use-websites-as-a-replacement-do-you-keep-social-media-outside-of-your-website&quot; tabindex=&quot;-1&quot;&gt;Some people reject social media and use websites as a replacement. do you keep social media outside of your website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#some-people-reject-social-media-and-use-websites-as-a-replacement-do-you-keep-social-media-outside-of-your-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I try to avoid mainstream social media, but I am &lt;a href=&quot;https://nathan.contact&quot;&gt;all over the fediverse&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-about-instant-messengers-do-you-use-a-mainstream-one-like-discord-or-telegram-or-something-like-matrix-do-you-avoid-them&quot; tabindex=&quot;-1&quot;&gt;How about instant messengers? do you use a mainstream one like discord or telegram? or something like matrix? do you avoid them? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-about-instant-messengers-do-you-use-a-mainstream-one-like-discord-or-telegram-or-something-like-matrix-do-you-avoid-them&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With great resentment I still have a Discord account that I rarely use. I use &lt;a href=&quot;https://nathan.contact&quot;&gt;Matrix and Signal&lt;/a&gt; often, and I also have an &lt;a href=&quot;https://nathan.contact&quot;&gt;XMPP&lt;/a&gt; account through the FSF that I have never once used haha. I stay signed in though, so if you have XMPP and want to get in touch, it would be a novelty to use it for once.&lt;/p&gt;
&lt;h2 id=&quot;do-you-listen-to-music-while-you-work-on-websites-if-so-what-kinds-of-artists&quot; tabindex=&quot;-1&quot;&gt;Do you listen to music while you work on websites? if so, what kinds of artists? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-listen-to-music-while-you-work-on-websites-if-so-what-kinds-of-artists&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Often! It depends on my mood, and my taste in music is hugely varied and slightly insane. It could be anything from Hindustani classical to deathcore, drum and bass, Russian ecclesiastical music, classical trombone concertos, black metal, or trip-hop. To throw some artists at the wall: Christian Lindberg, Ladytron, Mora Prokaza, Enei, Pandit Jasraj, Marie Keyrouz.&lt;/p&gt;
&lt;h2 id=&quot;do-you-keep-everything-you-make-on-one-website-or-do-you-have-more-than-one&quot; tabindex=&quot;-1&quot;&gt;Do you keep everything you make on one website, or do you have more than one? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-keep-everything-you-make-on-one-website-or-do-you-have-more-than-one&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Just the one right now. I eventually plan to make a “professional” website for all the corpo-speak that employers like to see when hiring.&lt;/p&gt;
&lt;h2 id=&quot;on-a-similar-note-do-you-keep-to-one-topic-on-your-site-or-many&quot; tabindex=&quot;-1&quot;&gt;On a similar note, do you keep to one topic on your site, or many? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#on-a-similar-note-do-you-keep-to-one-topic-on-your-site-or-many&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I write about many things, but I do try to keep incense at the fore, because it’s something that very few people write about—especially when it comes to making incense. It’s so hard to find information on incense-making and I want to do my part to keep the tradition alive.&lt;/p&gt;
&lt;h2 id=&quot;do-you-present-your-real-self-or-at-least-try-or-do-you-construct-a-persona-on-purpose&quot; tabindex=&quot;-1&quot;&gt;Do you present your real self, or at least try? or do you construct a persona on purpose? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-present-your-real-self-or-at-least-try-or-do-you-construct-a-persona-on-purpose&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes, with some caveats. I swear much more in the flesh. My philosophy is that I treat speech on my website as though I’m at a casual gathering with mixed company.&lt;/p&gt;
&lt;h2 id=&quot;have-you-ever-made-a-good-friend-thanks-to-your-website&quot; tabindex=&quot;-1&quot;&gt;Have you ever made a good friend thanks to your website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#have-you-ever-made-a-good-friend-thanks-to-your-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not really. Outside of the incense scene, I don’t really make many online friends.&lt;/p&gt;
&lt;h2 id=&quot;are-you-happy-with-the-way-html-and-css-currently-work&quot; tabindex=&quot;-1&quot;&gt;Are you happy with the way html and css currently work? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-happy-with-the-way-html-and-css-currently-work&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mostly. I do wish I could get a bit more programmatic with CSS. They’re working on it, though.&lt;/p&gt;
&lt;h2 id=&quot;what-are-practices-that-you-think-people-should-avoid&quot; tabindex=&quot;-1&quot;&gt;What are practices that you think people should avoid? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-are-practices-that-you-think-people-should-avoid&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ignoring accessibility: alt text, contrast ratios, et cetera. It’s so much easier now with semantic HTML, too, and the WCAG is published online for anyone to read.&lt;/p&gt;
&lt;h2 id=&quot;what-about-under-utilised-practices-or-things-you-think-people-should-do-more&quot; tabindex=&quot;-1&quot;&gt;What about under-utilised practices, or things you think people should do more? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-about-under-utilised-practices-or-things-you-think-people-should-do-more&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Beside accessibility, using containers to encapsulate elements so that they can be more easily positioned with CSS grids and flexbox. Also using the proper elements. For example my comment form, which I &lt;em&gt;did not&lt;/em&gt; write, has a bunch of &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tags as containers and doesn’t separate the buttons from the input fields in separate containers, making styling a nightmare.&lt;/p&gt;
&lt;h2 id=&quot;do-you-use-a-lot-of-semantic-html-or-are-you-guilty-of-generic-structure&quot; tabindex=&quot;-1&quot;&gt;Do you use a lot of semantic html? or are you guilty of generic structure? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-use-a-lot-of-semantic-html-or-are-you-guilty-of-generic-structure&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Absolutely. Why wouldn’t you?&lt;/p&gt;
&lt;h2 id=&quot;do-you-consider-different-browsers&quot; tabindex=&quot;-1&quot;&gt;Do you consider different browsers? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-consider-different-browsers&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For pro work, you have to. I once had a subcontractor complaining that a site I built wasn’t working only to find out that she was using a browser that hadn’t been updated in seven years. (We found out that this was Apple’s fault. After a point, they stop letting you upgrade your OS, and that means Safari too. What a nightmare.) You’ve got to decide where the cutoff is in order to know what features you can use. For personal stuff, I just target the most current version of Firefox. Usually, it’s Chrome playing fast and loose with web standards, so if you target Chrome it seems like there’s no guarantee that your site will work in Firefox, whereas the opposite usually isn’t true.&lt;/p&gt;
&lt;h2 id=&quot;speaking-of-what-s-your-preferred-browser-convince-your-readers-why-they-should-use-it&quot; tabindex=&quot;-1&quot;&gt;Speaking of, what’s your preferred browser? convince your readers why they should use it. &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#speaking-of-what-s-your-preferred-browser-convince-your-readers-why-they-should-use-it&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Anything not using the Chromium engine, so basically Firefox and derivatives. Google uses their superior Chrome user numbers to justify making features outside of open web standards. This causes sites to break on non-Chromium browsers. This behavior is part of an ongoing pattern of &lt;a href=&quot;https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish&quot;&gt;EEE&lt;/a&gt; on Google’s part, and if it is allowed to continue, it risks making the web worse for everyone. I would encourage people to avoid Chrome, and any browser that uses its engine. If we don’t, Google will use the leverage to kill competition and screw us all over like it has done time and time again (XMPP and RSS are some examples).&lt;/p&gt;
&lt;h2 id=&quot;and-what-os-are-you-on&quot; tabindex=&quot;-1&quot;&gt;And what os are you on? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#and-what-os-are-you-on&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;EndeavourOS, an Arch GNU/Linux derivative.&lt;/p&gt;
&lt;h2 id=&quot;do-you-have-a-strong-opinion-on-that-or-do-you-just-happen-to-use-it&quot; tabindex=&quot;-1&quot;&gt;Do you have a strong opinion on that, or do you just happen to use it? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-have-a-strong-opinion-on-that-or-do-you-just-happen-to-use-it&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Well, I strongly feel that GNU/Linux is better than proprietary options. EndeavourOS just fits my needs really well with its up-to-date packages, frequent updates, and flexibility.&lt;/p&gt;
&lt;h2 id=&quot;are-your-websites-mobile-friendly&quot; tabindex=&quot;-1&quot;&gt;Are your websites mobile-friendly? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-your-websites-mobile-friendly&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Of course!&lt;/p&gt;
&lt;h2 id=&quot;what-are-your-thoughts-on-autoplay&quot; tabindex=&quot;-1&quot;&gt;What are your thoughts on autoplay? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-are-your-thoughts-on-autoplay&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It’s for the best that it’s blocked by default, but I still wish I could get away with using it on one or two special pages.&lt;/p&gt;
&lt;h2 id=&quot;what-are-your-thoughts-on-webrings-are-you-in-any&quot; tabindex=&quot;-1&quot;&gt;What are your thoughts on webrings? are you in any? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-are-your-thoughts-on-webrings-are-you-in-any&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Big fan. I’m in two at the moment: &lt;a href=&quot;https://fediring.net/&quot;&gt;Fediring&lt;/a&gt;, and &lt;a href=&quot;https://geekring.net/&quot;&gt;Geekring&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;do-you-have-any-web-shrines-what-do-you-like-to-see-in-that-sort-of-page&quot; tabindex=&quot;-1&quot;&gt;Do you have any web shrines? what do you like to see in that sort of page? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-have-any-web-shrines-what-do-you-like-to-see-in-that-sort-of-page&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No, nothing like that. I like discovering them though.&lt;/p&gt;
&lt;h2 id=&quot;are-your-websites-cliche-in-your-opinion&quot; tabindex=&quot;-1&quot;&gt;Are your websites “cliche,” in your opinion? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-your-websites-cliche-in-your-opinion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I hope not!&lt;/p&gt;
&lt;h2 id=&quot;what-is-your-ideal-website-are-you-striving-for-that-or-for-something-else&quot; tabindex=&quot;-1&quot;&gt;What is your ideal website? are you striving for that, or for something else? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-is-your-ideal-website-are-you-striving-for-that-or-for-something-else&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Real, fun, and ever-changing.&lt;/p&gt;
&lt;h2 id=&quot;are-you-an-artist-do-you-draw-or-design-your-own-assets&quot; tabindex=&quot;-1&quot;&gt;Are you an artist? do you draw or design your own assets? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-an-artist-do-you-draw-or-design-your-own-assets&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While I do graphic design, I’m not really an illustrator or anything like that—beyond the odd project for fun. So designer yes, artist no.&lt;/p&gt;
&lt;h2 id=&quot;what-are-your-favourite-resource-sites&quot; tabindex=&quot;-1&quot;&gt;What are your favourite resource sites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-are-your-favourite-resource-sites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have an absolute ton of them on my &lt;a href=&quot;https://nathanupchurch.com/links/&quot;&gt;/links&lt;/a&gt; page.&lt;/p&gt;
&lt;h2 id=&quot;is-there-a-habit-you-just-can-t-get-away-from-no-matter-how-hard-you-try&quot; tabindex=&quot;-1&quot;&gt;Is there a habit you just can’t get away from no matter how hard you try? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#is-there-a-habit-you-just-can-t-get-away-from-no-matter-how-hard-you-try&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sloppy CSS. The cascade is tricky, but I think I’m improving.&lt;/p&gt;
&lt;h2 id=&quot;what-s-your-biggest-advice-for-a-new-webmaster&quot; tabindex=&quot;-1&quot;&gt;What’s your biggest advice for a new webmaster? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-s-your-biggest-advice-for-a-new-webmaster&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Take your time, and learn git and &lt;em&gt;make a new branch&lt;/em&gt; for any significant and complicated work so that it’s easy to revert it if you make a mistake or get stuck.&lt;/p&gt;
&lt;h2 id=&quot;do-you-keep-all-your-styling-in-css-or-do-you-hard-code-some&quot; tabindex=&quot;-1&quot;&gt;Do you keep all your styling in css? or do you hard-code some? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-keep-all-your-styling-in-css-or-do-you-hard-code-some&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I use inline styles only as a last resort, usually for styling widgets that I have little control over such as the comment form.&lt;/p&gt;
&lt;h2 id=&quot;what-do-you-think-of-frameset-layouts&quot; tabindex=&quot;-1&quot;&gt;What do you think of frameset layouts? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-do-you-think-of-frameset-layouts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It’s not the 90s any more.&lt;/p&gt;
&lt;h2 id=&quot;how-about-table-based-layouts&quot; tabindex=&quot;-1&quot;&gt;How about table-based layouts? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-about-table-based-layouts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Again, we’re in 2026. There is no excuse for this haha.&lt;/p&gt;
&lt;h2 id=&quot;do-you-subscribe-to-the-ideas-of-one-column-two-column-and-three-column-layouts-do-you-use-any-of-these&quot; tabindex=&quot;-1&quot;&gt;Do you subscribe to the ideas of “one-column”, “two-column” and “three-column” layouts? do you use any of these? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-subscribe-to-the-ideas-of-one-column-two-column-and-three-column-layouts-do-you-use-any-of-these&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I mean, when you look at eye-tracking studies, you see that the way people engage with websites is always changing. I think that, so long as you’re applying gestalt principles in your design, you’re probably doing an okay job no matter the layout.&lt;/p&gt;
&lt;h2 id=&quot;do-you-spend-longer-on-the-html-or-the-css&quot; tabindex=&quot;-1&quot;&gt;Do you spend longer on the html or the css? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-spend-longer-on-the-html-or-the-css&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The CSS, without question.&lt;/p&gt;
&lt;h2 id=&quot;have-you-ever-made-a-page-with-no-css-it-s-useful-for-your-thoughts&quot; tabindex=&quot;-1&quot;&gt;Have you ever made a page with no css? it’s useful for your thoughts. &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#have-you-ever-made-a-page-with-no-css-it-s-useful-for-your-thoughts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No, never!&lt;/p&gt;
&lt;h2 id=&quot;do-you-ever-find-yourself-making-layouts-with-nothing-to-put-on-them-or-do-you-only-make-layouts-when-the-need-arises&quot; tabindex=&quot;-1&quot;&gt;Do you ever find yourself making layouts with nothing to put on them? or do you only make layouts when the need arises? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-ever-find-yourself-making-layouts-with-nothing-to-put-on-them-or-do-you-only-make-layouts-when-the-need-arises&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Only when necessary.&lt;/p&gt;
&lt;h2 id=&quot;would-you-consider-yourself-a-beginner-or-advanced-somewhere-in-the-middle&quot; tabindex=&quot;-1&quot;&gt;Would you consider yourself a beginner? or advanced? somewhere in the middle? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#would-you-consider-yourself-a-beginner-or-advanced-somewhere-in-the-middle&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wouldn’t go so far as to say advanced, but I think I know what I’m doing.&lt;/p&gt;
&lt;h2 id=&quot;do-you-have-a-habit-of-looking-at-the-source-code-of-websites-you-visit&quot; tabindex=&quot;-1&quot;&gt;Do you have a habit of looking at the source code of websites you visit? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-have-a-habit-of-looking-at-the-source-code-of-websites-you-visit&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not often, as many sites have crazy obfuscated code these days. It’s not often that you find well formatted, human-readable source anymore. More often I find myself reading documentation or Stack Overflow.&lt;/p&gt;
&lt;h2 id=&quot;how-did-you-learn-how-to-make-websites&quot; tabindex=&quot;-1&quot;&gt;How did you learn how to make websites? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-did-you-learn-how-to-make-websites&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I began in what was either a digital graphics or multimedia class in school where we learned to make websites using Adobe Dreamweaver. In adulthood I wound up tripping and falling into a career that eventually led to me making a number of websites professionally. I started with Adobe Muse, actually winning Adobe’s Muse Site of the Day at one point. Once Adobe canned Muse, I realized I was going to have to get serious about learning HTML, CSS, and JavaScript, so I did.&lt;/p&gt;
&lt;h2 id=&quot;do-you-ever-force-elements-to-do-things-they-re-not-supposed-to&quot; tabindex=&quot;-1&quot;&gt;Do you ever force elements to do things they’re not supposed to? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-ever-force-elements-to-do-things-they-re-not-supposed-to&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I do my best to avoid hacks.&lt;/p&gt;
&lt;h2 id=&quot;thoughts-on-floating-elements&quot; tabindex=&quot;-1&quot;&gt;Thoughts on floating elements? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#thoughts-on-floating-elements&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Again I say: it’s not the 90s anymore.&lt;/p&gt;
&lt;h2 id=&quot;when-you-re-sizing-stuff-what-do-you-use-first-do-you-use-px-em-or-something-else&quot; tabindex=&quot;-1&quot;&gt;When you’re sizing stuff, what do you use first? do you use px, em, %, or something else? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#when-you-re-sizing-stuff-what-do-you-use-first-do-you-use-px-em-or-something-else&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’m using my responsive spacing system, so it’s something like &lt;code&gt;var(--space-l)&lt;/code&gt;, which will resolve to something like &lt;code&gt;clamp(2.5rem, 2.2183rem + 1.4085vw, 3rem)&lt;/code&gt;. It makes things very easy and keeps everything nice and consistent.&lt;/p&gt;
&lt;h2 id=&quot;do-you-have-a-favourite-font&quot; tabindex=&quot;-1&quot;&gt;Do you have a favourite font? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-have-a-favourite-font&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wouldn’t know how to begin to choose!&lt;/p&gt;
&lt;h2 id=&quot;would-you-run-a-website-with-another-person-how-would-that-work&quot; tabindex=&quot;-1&quot;&gt;Would you run a website with another person? how would that work? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#would-you-run-a-website-with-another-person-how-would-that-work&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Why not? If it was interesting.&lt;/p&gt;
&lt;h2 id=&quot;do-you-surf-the-web-to-find-new-personal-websites-very-often&quot; tabindex=&quot;-1&quot;&gt;Do you surf the web to find new personal websites very often? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-surf-the-web-to-find-new-personal-websites-very-often&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes, I really enjoy clicking through web-rings and buttons.&lt;/p&gt;
&lt;h2 id=&quot;do-you-bookmark-other-people-s-websites-how-would-you-feel-knowing-someone-else-bookmarked-yours&quot; tabindex=&quot;-1&quot;&gt;Do you bookmark other people’s websites? how would you feel knowing someone else bookmarked yours? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-bookmark-other-people-s-websites-how-would-you-feel-knowing-someone-else-bookmarked-yours&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not often, no.&lt;/p&gt;
&lt;h2 id=&quot;what-do-you-want-people-to-be-most-impressed-with-when-they-see-your-website&quot; tabindex=&quot;-1&quot;&gt;What do you want people to be most impressed with when they see your website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#what-do-you-want-people-to-be-most-impressed-with-when-they-see-your-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The fact that the layout uses no media queries.&lt;/p&gt;
&lt;h2 id=&quot;are-you-interested-in-technology-outside-of-websites-do-you-collect&quot; tabindex=&quot;-1&quot;&gt;Are you interested in technology outside of websites? do you collect? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-interested-in-technology-outside-of-websites-do-you-collect&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yea, I love computers and FLOSS software. I do try to make good purchases that will last a long time, so I don’t have a &lt;em&gt;ton&lt;/em&gt; of tech, but I’m certainly not short on gadgets.&lt;/p&gt;
&lt;h2 id=&quot;how-often-and-for-how-long-are-you-online&quot; tabindex=&quot;-1&quot;&gt;How often and for how long are you online? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#how-often-and-for-how-long-are-you-online&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I work on a computer, so most of the day.&lt;/p&gt;
&lt;h2 id=&quot;when-it-comes-to-your-website-who-is-your-target-audience&quot; tabindex=&quot;-1&quot;&gt;When it comes to your website, who is your target audience? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#when-it-comes-to-your-website-who-is-your-target-audience&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mostly incense nerds and people who want to keep up with my life. It’s super easy to get an audience if you’re on the fediverse and write about tech, but there are already plenty of blogs like that out there.&lt;/p&gt;
&lt;h2 id=&quot;have-you-ever-been-interested-in-xhtml&quot; tabindex=&quot;-1&quot;&gt;Have you ever been interested in xhtml? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#have-you-ever-been-interested-in-xhtml&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not especially. It seems like one of those things that just never really took off.&lt;/p&gt;
&lt;h2 id=&quot;do-you-program-in-general-have-you-ever-written-a-program-for-use-with-or-on-your-website-not-counting-simple-javascript&quot; tabindex=&quot;-1&quot;&gt;Do you program in general? have you ever written a program for use with or on your website, not counting simple javascript? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-program-in-general-have-you-ever-written-a-program-for-use-with-or-on-your-website-not-counting-simple-javascript&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yea, I wrote &lt;a href=&quot;https://nathanupchurch.com/blog/Solving-SSG-Microblogging-Ergonomics-with-KDialog-for-Incense-Posting/&quot;&gt;Poaster&lt;/a&gt; in Ruby for some reason. I have also done desktop automation stuff with Node.&lt;/p&gt;
&lt;h2 id=&quot;speaking-of-programs-that-help-you-make-websites-what-do-you-think-of-static-site-generators-ssgs-have-you-ever-used-one&quot; tabindex=&quot;-1&quot;&gt;Speaking of programs that help you make websites, what do you think of static site generators (ssgs)? have you ever used one? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#speaking-of-programs-that-help-you-make-websites-what-do-you-think-of-static-site-generators-ssgs-have-you-ever-used-one&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Big fan of Eleventy. I love being able to just get straight to the content when I want to, and I love that my site is modular and simple to update.&lt;/p&gt;
&lt;h2 id=&quot;do-you-keep-a-hitcounter-why-or-why-not&quot; tabindex=&quot;-1&quot;&gt;Do you keep a hitcounter? why or why not? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-keep-a-hitcounter-why-or-why-not&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No, but I do use some privacy respecting FLOSS analytics tools. I like to see how many people are reading my posts and where they are from.&lt;/p&gt;
&lt;h2 id=&quot;do-you-frequent-forums-which-ones&quot; tabindex=&quot;-1&quot;&gt;Do you frequent forums? which ones? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-frequent-forums-which-ones&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wouldn’t use the term frequent, but I do have a presence on some FLOSS forums, as well as &lt;a href=&quot;https://www.dogsonacid.com/&quot;&gt;Dogs on Acid&lt;/a&gt;, and &lt;a href=&quot;https://www.ouddict.com/&quot;&gt;Ouddict&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;do-you-write-your-page-content-directly-into-the-editor-or-do-you-prepare-it-elsewhere-like-a-text-document-or-a-word-document&quot; tabindex=&quot;-1&quot;&gt;Do you write your page content directly into the editor, or do you prepare it elsewhere, like a text document or a word document? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-write-your-page-content-directly-into-the-editor-or-do-you-prepare-it-elsewhere-like-a-text-document-or-a-word-document&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I often use &lt;a href=&quot;https://apps.kde.org/marknote/&quot;&gt;Marknote&lt;/a&gt;. It’s new and a little rough around the edges, but the potential is huge and I already enjoy using it despite its sometimes very annoying bugs.&lt;/p&gt;
&lt;h2 id=&quot;do-you-think-you-appear-cool-to-others-a-more-accurate-answer-now-do-other-people-ever-say-you-re-cool&quot; tabindex=&quot;-1&quot;&gt;Do you think you appear cool to others? a more accurate answer now: do other people ever say you’re cool? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#do-you-think-you-appear-cool-to-others-a-more-accurate-answer-now-do-other-people-ever-say-you-re-cool&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’ve been told that I write like a 50 year old academic, so, no haha. I also don’t know that adults call each other cool very often. Certainly not the cool ones anyway!&lt;/p&gt;
&lt;h2 id=&quot;are-you-embarrassed-of-your-old-work-have-you-ever-deleted-everything-out-of-shame&quot; tabindex=&quot;-1&quot;&gt;Are you embarrassed of your old work? have you ever deleted everything out of shame? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-embarrassed-of-your-old-work-have-you-ever-deleted-everything-out-of-shame&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Always and forever.&lt;/p&gt;
&lt;h2 id=&quot;would-you-close-down-your-website-if-you-couldn-t-update-it-or-would-you-leave-an-archive&quot; tabindex=&quot;-1&quot;&gt;Would you close down your website if you couldn’t update it, or would you leave an archive? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#would-you-close-down-your-website-if-you-couldn-t-update-it-or-would-you-leave-an-archive&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think I’d like to leave it.&lt;/p&gt;
&lt;h2 id=&quot;so-you-reveal-a-lot-about-yourself-on-your-website-or-are-you-more-secretive&quot; tabindex=&quot;-1&quot;&gt;So you reveal a lot about yourself on your website? or are you more secretive? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#so-you-reveal-a-lot-about-yourself-on-your-website-or-are-you-more-secretive&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I try not to overshare too much, but I do keep it real, I think.&lt;/p&gt;
&lt;h2 id=&quot;are-you-willing-to-reveal-who-your-best-online-friend-is-and-or-if-they-have-a-website&quot; tabindex=&quot;-1&quot;&gt;Are you willing to reveal who your best online friend is, and/or if they have a website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#are-you-willing-to-reveal-who-your-best-online-friend-is-and-or-if-they-have-a-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I will never tell.&lt;/p&gt;
&lt;h2 id=&quot;and-do-you-optimise-the-images-on-your-website&quot; tabindex=&quot;-1&quot;&gt;And do you optimise the images on your website? &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#and-do-you-optimise-the-images-on-your-website&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes, with the utterly incredible &lt;a href=&quot;https://converseen.fasterland.net/&quot;&gt;Converseen&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;we-re-out-of-time-how-do-you-feel-after-answering-100-questions-other-than-exhausted&quot; tabindex=&quot;-1&quot;&gt;We’re out of time! how do you feel after answering 100 questions? … other than exhausted. &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/100-webmaster-questions/#we-re-out-of-time-how-do-you-feel-after-answering-100-questions-other-than-exhausted&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ready for bed!&lt;/p&gt;
</content>
	</entry>
	
	
	
	
	
	<entry>
		<title>Building a Quiz System With Eleventy</title>
		<description>Remember when internet quizzes were a thing? I wanted to bring them to my website.</description>
		<link href="https://nathanupchurch.com/blog/making-quizzes-using-eleventy/"/>
		<updated>2025-02-04T00:00:00Z</updated>
		<id>https://nathanupchurch.com/blog/making-quizzes-using-eleventy/</id>
		<image>
			<url>https://nathanupchurch.com/img/logo_post.svg</url>
			<title>The logo for this blog: a capital letter N.</title>
			<link href="https://nathanupchurch.com/blog/making-quizzes-using-eleventy/"/>
		</image>
		<content type="html">&lt;p&gt;You might seen my &lt;a href=&quot;https://lounge.town/@nathanu/113936929893588739&quot;&gt;recent toot&lt;/a&gt; about the &lt;a href=&quot;https://nathanupchurch.com/quizzes/how-much-of-a-linux-nerd-are-you/&quot;&gt;fancy new “How Much of a Linux Nerd are You?” quiz&lt;/a&gt; on my website. Some time ago, I realized that I missed taking fun internet quizzes and decided to implement a quiz system on my own site that would allow me to easily make fun quizzes to share. Here’s how I built it with &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-plan&quot; tabindex=&quot;-1&quot;&gt;The plan &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/making-quizzes-using-eleventy/#the-plan&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, I had to decide what sort of quizzes I wanted to be able to make. Some quizzes are designed to score the quiz-taker in order to place them into a category at the end, like those fun Buzzfeed quizzes that used to be so popular. Other quizzes are designed to test the quiz-takers knowledge of a subject, with each question having a definite right answer. I wanted to be able to do both, and I wanted my quizzes to be fairly flexible.&lt;/p&gt;
&lt;p&gt;I decided to arrange things so that the quiz-author can enter any number of questions, answers, and consequences. While any number of answers can be entered for a given question, only one answer can be selected at a time, and every question must be answered. Each answer is assigned a number of points by the quiz author: positive, negative, or zero, and consequences each have a certain points threshold after which they are eligible to appear.&lt;/p&gt;
&lt;p&gt;A consequence is a result that appears in a modal when the quiz-taker clicks the “submit” button at the end. It shows text defined by the quiz author, an image if the author chooses to include one, and it contains a “Score Details” dropdown that shows the number of points scored on each question.&lt;/p&gt;
&lt;p&gt;I decided that I didn’t want to use a global data file, not only because it isn’t terribly ergonomic, but also because it’s much simpler to take advantage of Eleventy’s tag/collection system when possible, and frankly,  I hoped to avoid some of the faffing about I had to do when &lt;a href=&quot;https://nathanupchurch.com/blog/galleries/&quot;&gt;implementing image galleries&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;setting-up-the-content-directory&quot; tabindex=&quot;-1&quot;&gt;Setting up the content directory &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/making-quizzes-using-eleventy/#setting-up-the-content-directory&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As I was going to use markdown files to build my quizzes, I needed to set up a content directory, &lt;code&gt;/content/quizzes/&lt;/code&gt;, and set some defaults in &lt;code&gt;/content/quizzes/quizzes.11tydata.js&lt;/code&gt; to make sure that everything I put inside of it was automatically tagged as a quiz, and would use the correct layout.&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;tags&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;quiz&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;layouts/quizzes.njk&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By tagging these files as quizzes, a new &lt;a href=&quot;https://www.11ty.dev/docs/collections/&quot;&gt;collection&lt;/a&gt; containing all of my quizzes will be created, and I can add this collection to the &lt;code&gt;filterTagList&lt;/code&gt; filter in my config file that allows me to easily omit everything that isn’t a blog post from post-lists on my site, but that’s out of scope for this article.&lt;/p&gt;
&lt;h2 id=&quot;quiz-structure&quot; tabindex=&quot;-1&quot;&gt;Quiz Structure &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/making-quizzes-using-eleventy/#quiz-structure&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;YAML (or in fact any markup or programming language that respects whitespace) is no fun, but at least I won’t wind up with a gargantuan JavaScript data file like I have &lt;a href=&quot;https://upchur.ch/gitea/n_u/nathanupchurch.com/src/branch/main/_data/galleries.js&quot;&gt;for my galleries&lt;/a&gt;. Here’s what &lt;code&gt;/content/quizzes/my-quiz.md&lt;/code&gt; might look like:&lt;/p&gt;
&lt;pre class=&quot;language-yaml&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token datetime number&quot;&gt;2025-02-04&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;imageURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;imageAlt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;consequences&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;points&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;spiel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;imageAlt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;questions&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;imageAlt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;imageCaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
   &lt;span class=&quot;token key atrule&quot;&gt;answers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
   &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;
     &lt;span class=&quot;token key atrule&quot;&gt;points&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
This is a great quiz that I&#39;m sure you&#39;ll have fun taking.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This results in a nice JavaScript object we can iterate through. In the body of the markdown document, beneath the front matter, is the text that can be injected via &lt;code&gt;{{ content }}&lt;/code&gt;. You’ll see in a bit that this will go at the top of the quiz, beneath the title, which is injected with my post layout. This is so that it’s easy to use markdown to style this part of the content, include images, et cetera, without worrying about trying to get that working while including it in the YAML.&lt;/p&gt;
&lt;h2 id=&quot;the-quiz-layout&quot; tabindex=&quot;-1&quot;&gt;The quiz layout &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/making-quizzes-using-eleventy/#the-quiz-layout&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Alright! Now that we have the quiz structure nailed down, we can write &lt;code&gt;/includes/layouts/quizzes.njk&lt;/code&gt; which will iterate through the data and spit out an HTML form for us. I’m using the loop index number as the question number, which I can also use to set the &lt;code&gt;name&lt;/code&gt; attribute for each of the answer &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements related to a given question. By doing this, the browser knows that the answers beneath a question are all related and will only allow the quiz-taker to select one of them.&lt;/p&gt;
&lt;p&gt;I’m going to add a link to our yet-to-be-written script here and set the form to call &lt;code&gt;handleQuizSubmit()&lt;/code&gt; on submit (&lt;code&gt;return false&lt;/code&gt; prevents the page from refreshing when the submit button is clicked). Don’t ask me why I put the script there precisely; as it isn’t called until the submit button is clicked, I suppose it could go just about anywhere.&lt;/p&gt;
&lt;p&gt;The points threshold for each consequence is stored in the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset&quot;&gt;dataset&lt;/a&gt; &lt;code&gt;data-points-threshold&lt;/code&gt; so that we can use these numbers in our JavaScript.&lt;/p&gt;
&lt;p&gt;The answers are assigned an ID that looks like this: &lt;code&gt;q[questionNumber]a[answerNumber]&lt;/code&gt;. Beyond using this to also populate the &lt;code&gt;for&lt;/code&gt; property of their respective labels, you could use this to link to individual answers too.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;---
layout: layouts/post.njk
structuredData: none
---
{{ content | safe }}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quiz&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;onsubmit&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token value javascript language-javascript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;handleQuizSubmit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% for question in questions %}
		{% set q = loop.index %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;questionBox&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;quizQuestion&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ q }}. {{ question.title }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			{% if question.image %}
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;figure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ question.image }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ question.image }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ question.imageAlt }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				{% if question.imageCaption %}
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;figcaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ question.imageCaption }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;figcaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				{% endif %}
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;figure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			{% endif %}
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;answersBox&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				{% for answer in question.answers %}
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;answerBox&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;answer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;radio&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ answer.points }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;q{{ q }}a{{ loop.index }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ q }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
					&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;q{{ q }}a{{ loop.index }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ answer.name }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				{% endfor %}
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% endfor %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/js/quiz.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Submit&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

{% for consequence in consequences %}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;dialog&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;consequence&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;data-points-threshold&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ consequence.points }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ consequence.title }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ consequence.spiel }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  {% if consequence.image %}
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ consequence.image }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ consequence.imageAlt }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  {% endif %}
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Score Details&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;summary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;scoreDetails&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;details&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;dialog&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Thanks&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;dialog&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
{% endfor %}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;All of the consequences are rendered as &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; elements that we can open as a modal later with our script. And look, I know people have opinions about JavaScript, but I really didn’t fancy the extra build time, bandwidth, and effort it would have taken to avoid fourty lines of simple JavaScript, and to be honest, I &lt;em&gt;like&lt;/em&gt; JavaScript. I think it’s useful and fun to write, so there.&lt;/p&gt;
&lt;h2 id=&quot;the-quiz-script&quot; tabindex=&quot;-1&quot;&gt;The quiz script &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/making-quizzes-using-eleventy/#the-quiz-script&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As far as logic goes, in &lt;code&gt;/js/quiz.js&lt;/code&gt; we first want to calculate the score, and get the data to populate the &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; elements in our consequence modals. This is handled by &lt;code&gt;score()&lt;/code&gt;, which will return an object containing the total number of points scored and an array containing the points scored on each question. When we have that, we’ll go ahead and &lt;code&gt;populateDetails()&lt;/code&gt; and finally use &lt;code&gt;dishOutConsequences()&lt;/code&gt; to launch the freshly updated &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; as a modal via &lt;code&gt;showModal()&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;answers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; total &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; scores &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; answers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; questionNumber &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; answers&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answers&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;checked&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			total &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answers&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			scores&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;questionNumber&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; questionNumber&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;points&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; answers&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;totalPoints&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; total&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;scores&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; scores &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;dishOutConsequences&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;consequences&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; points&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; consequences&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;points &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;consequences&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dataset&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pointsThreshold&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			consequences&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;showModal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;populateDetails&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;detailsElement&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; scores&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; total&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	detailsElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;Total Score: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;total&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; points&amp;lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; scores&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		detailsElement&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerHTML &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;br /&gt;Question &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;scores&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;questionNumber &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; scores&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;questionNumber &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; scores&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;questionNumber&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;scores&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;points&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; points&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;handleQuizSubmit&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; answers &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementsByClassName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;answer&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; consequences &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementsByClassName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;consequence&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; details &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementsByClassName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;scoreDetails&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalPoints &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;score&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;totalPoints&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; scoreDetails &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;score&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answers&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;scores&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; details&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;populateDetails&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;details&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; scoreDetails&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; totalPoints&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;dishOutConsequences&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;consequences&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; totalPoints&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And with that, our quiz ought to be operational! After this, I went ahead and listed my latest quiz on my index page, but that’s beyond the scope of this article. It took me some time to get around to finishing this, but as you can see, it wasn’t terribly difficult at all. I hope you enjoyed reading about how I built my quiz system. Please let me know if you decide to implement something similar!&lt;/p&gt;
</content>
	</entry>
	
	
	
	
	
	<entry>
		<title>Adding Image Galleries to My Website</title>
		<description>At last, I&#39;ve gotten around to implementing image galleries.</description>
		<link href="https://nathanupchurch.com/blog/galleries/"/>
		<updated>2024-12-02T00:00:00Z</updated>
		<id>https://nathanupchurch.com/blog/galleries/</id>
		<image>
			<url>https://nathanupchurch.com/img/isabella-fischer-X2l9M6jsS7E-unsplash.webp</url>
			<title>Some very tasty looking pop tarts with pink icing and sprinkles.</title>
			<link href="https://nathanupchurch.com/blog/galleries/"/>
		</image>
		<content type="html">&lt;p&gt;I’ve been meaning to add an image gallery feature to this website for ages, and I’m happy to finally announce that I’ve done it! If you’d like to see my very first image gallery in action, &lt;a href=&quot;https://nathanupchurch.com/gallery/pop-tart-flavor-memes/&quot;&gt;here’s a gallery of PopTart memes I’ve collected&lt;/a&gt;. If you’re a massive nerd and would like to read about how I implemented this feature on my &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; website, read on.&lt;/p&gt;
&lt;p&gt;Note: this is a fast and loose description of the process. It should be helpful if you’re trying to do this yourself, but don’t expect to be able to copy and paste my implementation. See &lt;a href=&quot;https://upchur.ch/gitea/n_u/nathanupchurch.com&quot;&gt;the repo&lt;/a&gt; to copy and paste my spaghetti.&lt;/p&gt;
&lt;h2 id=&quot;specifying-new-galleries&quot; tabindex=&quot;-1&quot;&gt;Specifying new galleries &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/galleries/#specifying-new-galleries&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First of all, I had to decide how new galleries would be specified so that Eleventy could work its magic. There are a few approaches here, such as utilizing template frontmatter, directories of images, or using a data file in my site’s &lt;code&gt;_data&lt;/code&gt; directory. After weighing up the pros and cons, I decided to use the latter option, even though it’s not the most ergonomic. So I created &lt;code&gt;_data/galleries.js&lt;/code&gt;, which looks like this&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://nathanupchurch.com/blog/galleries/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;synopsis&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;galleryImage&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;galleryImageAlt&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;pictures&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;altText&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;thumbAltText&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				&lt;span class=&quot;token literal-property property&quot;&gt;caption&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;gallery-index-pagination&quot; tabindex=&quot;-1&quot;&gt;Gallery index pagination &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/galleries/#gallery-index-pagination&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that I know how I’ll go about specifying my galleries, I need to paginate the gallery index pages; the pages that feature thumbnails of each image in the gallery and allow the user to navigate to the images. To do this, I created &lt;code&gt;content/galleries.njk&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;---
pagination:
	data: galleries
	size: 1
 	alias: gallery
layout: layouts/base.njk
tags: gallery
eleventyComputed:
	title: &quot;{{ gallery.title }}&quot;
	permalink: &quot;/gallery/{{ gallery.title | slugify }}/&quot;
	description: &quot;{{ gallery.description }}&quot;
---
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ gallery.title }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ gallery.description }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	{% for picture in gallery.pictures %}
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/gallery/{{ gallery.title | slugify }}/{{ picture.filename | slugify }}/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ gallery.thumbAltText }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gallery-image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ gallery.url }}{{ picture.filename }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	{% endfor %}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By ensuring that each gallery index page is tagged “gallery,” they will automatically be grouped into a new collection by that name, which is important so that I can filter galleries out from post lists and other things throughout my site.&lt;/p&gt;
&lt;h2 id=&quot;generating-image-pages&quot; tabindex=&quot;-1&quot;&gt;Generating image pages &lt;a class=&quot;header-anchor&quot; href=&quot;https://nathanupchurch.com/blog/galleries/#generating-image-pages&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I considered using a lightbox / modal sort of arrangement for viewing images, but I decided against it as it can be tricky to get accessibility right for these patterns, and I wanted to avoid using JavaScript if possible. What I chose to do instead was to create a page for each image, which would feature buttons to navigate to the next / previous image, and to return to the gallery. The first step was to create a collection containing all gallery images in my Eleventy config file:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Collections&lt;/span&gt;
	eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addCollection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;galleryImages&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; galleries &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; collection&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;galleries&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; galleryImages &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

		galleries&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;gallery&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			gallery&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pictures&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;picture&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				picture&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;containingGallery &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;gallery&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				picture&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;baseUrl &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;gallery&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				i &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;picture&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;previousImage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;filename&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				i &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;picture&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nextImage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;filename&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				galleryImages&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;picture&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may notice that I did a little jiggery-pokery in that callback function to provide information about each image that isn’t included in &lt;code&gt;_data/galleries.js&lt;/code&gt; because it would have been a pain to include or would have unecessarily inflated the tile size, specifically: the filenames of images before and after the current image (should they exist), and the URL of the gallery that the image belongs to. We can use this information to have our image pages generated in the same directory as their parent gallery index, and to generate next / previous buttons to help the user navigate through the gallery. This information is added to the &lt;code&gt;galleryImages&lt;/code&gt; collection object in memory so that we can use it when we paginate the image pages using &lt;code&gt;content/galleryImage.njk&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;---
pagination:
  data: collections.galleryImages
  size: 1
  alias: picture
layout: layouts/base.njk
eleventyComputed:
  title: &quot;Image: {{ picture.title }}&quot;
	permalink: &quot;/gallery/{{ picture.containingGallery | slugify }}/{{ picture.filename | slugify }}/&quot;
	description: &quot;{{ picture.title }} from gallery: {{ picture.containingGallery}}&quot;
---
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ picture.title }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% if picture.previousImage %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;../{{ picture.previousImage | slugify }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Previous&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% endif %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/gallery/{{ picture.containingGallery | slugify }}/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Gallery&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% if picture.nextImage %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;../{{ picture.nextImage | slugify }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Next&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% endif %}
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;figure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ picture.baseUrl }}/{{ picture.filename }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ picture.baseUrl }}/{{ picture.filename }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ picture.altText }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% if picture.caption %}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;figcaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			{{ picture.caption }}
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;figcaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		{% endif %}
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;figure&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà; we have galleries! But before we can call this project done, it would be nice to have a page that lists all galleries on the site for the benefit of visitors. For this, I created &lt;code&gt;/content/galleries/index.njk&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;---
layout: layouts/base.njk
eleventyNavigation:
  key: Pics
  order: 4
---
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Image Galleries&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
Some pictures I thought would be worth posting.
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	{% for gallery in galleries %}
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;../gallery/{{ gallery.title | slugify }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;postlist-link&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;gallery.galleryImage&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;%}&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ gallery.url }}{{ gallery.galleryImage }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ gallery.galleryImageAlt }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;%}&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ metadata.defaultPostImageURL }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ metadata.defaultPostImageAlt }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token attr-name&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;%}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;../gallery/{{ gallery.title | slugify }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;postlist-link&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
					{{ gallery.title }}
				&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;time&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ gallery.date | htmlDateString}}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ gallery.date | readableDate(&quot;LLLL yyyy&quot;) }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;{{ gallery.synopsis | truncate(105) | safe }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	{% endfor %}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;section&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that &lt;code&gt;readableDate()&lt;/code&gt; and &lt;code&gt;htmlDateString&lt;/code&gt; are custom filters that came with the &lt;a href=&quot;https://github.com/11ty/eleventy-base-blog&quot;&gt;Eleventy Base Blog template&lt;/a&gt; that I based my website on. They require Luxon:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;readableDate&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;dateObj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; format&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; zone&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// Formatting tokens for Luxon: https://moment.github.io/luxon/#/formatting?id=table-of-tokens&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; DateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fromJSDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dateObj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;zone&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; zone &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;utc&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toFormat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
			format &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;dd LLLL yyyy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;htmlDateString&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;dateObj&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// dateObj input: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; DateTime&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;fromJSDate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dateObj&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;zone&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;utc&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toFormat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;yyyy-LL-dd&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may be thinking that this all seems a convoluted, and I agree! If you know of a simpler way to accomplish this functionality, do feel free to let me know, but for now, I’m just happy that I finally have the ability to add image galleries to this website.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Thanks to those who answered &lt;a href=&quot;https://lounge.town/@nathanu/113574428382435982&quot;&gt;my cry for help&lt;/a&gt;! &lt;a href=&quot;https://nathanupchurch.com/blog/galleries/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
	</entry>
	
	
	
	
	
	<entry>
		<title>A New Audio Web Component; Ballin’</title>
		<description>I&#39;ve gone and built a not-so-fancy audio component for my blog.</description>
		<link href="https://nathanupchurch.com/blog/new-audio-component-ballin/"/>
		<updated>2024-10-23T00:00:00Z</updated>
		<id>https://nathanupchurch.com/blog/new-audio-component-ballin/</id>
		<image>
			<url>https://nathanupchurch.com/audio/covers/ballin.webp</url>
			<title>An uncapped fountain pen on top of a pretty, gold-foiled pad of paper beside some envelopes with stamps featuring coffee drinks on them.</title>
			<link href="https://nathanupchurch.com/blog/new-audio-component-ballin/"/>
		</image>
		<content type="html">&lt;div class=&quot;info&quot;&gt;
&lt;p&gt;Update 2025-11-21: I actually got rid of of all web components on this site because they were heavy, unnecessary, and didn’t render in folks’ RSS readers. Currently, I’m using plain old HTML for this, rendered by Eleventy from a convenient shortcode.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Fresh from &lt;a href=&quot;https://kate-editor.org/&quot;&gt;my text editor&lt;/a&gt; comes a neat little web component that packages the native HTML &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; tag inside a &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; with a song name, title, and a graphic — an album cover perhaps. Here’s what it looks like, featuring a very catchy drum and bass tune, “Ballin’,” by Vibe Chemistry:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;mplayer&quot;&gt;
&lt;div class=&quot;coverContainer&quot;&gt;
&lt;img src=&quot;https://nathanupchurch.com/audio/covers/ballin.webp&quot; class=&quot;albumCover&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;captionAndPlayer&quot;&gt;
&lt;figcaption class=&quot;mplayerInfo&quot;&gt;
&lt;span class=&quot;songTitle&quot;&gt;Ballin’&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;artist&quot;&gt;Vibe Chemistry&lt;/span&gt;
&lt;/figcaption&gt;
&lt;audio controls=&quot;&quot; src=&quot;https://nathanupchurch.com/audio/ballin.mp3&quot; class=&quot;player&quot;&gt;&lt;/audio&gt;
&lt;/div&gt;
&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It’s pretty basic for now; it doesn’t even truncate an over-long title, but it’ll do the job for the moment. My hope is to use this to play short song snippets so that I can talk about and review them. I think this falls pretty squarely under “fair use” in the United States, and there’s no admin for litigious record companies to complain to but myself anyway; coincidentally, direct all copyright complaints to &lt;a href=&quot;https://nathanupchurch.com/me/&quot;&gt;me&lt;/a&gt; to have any decent snippets of your IP replaced with samples of significantly lower quality.&lt;/p&gt;
</content>
	</entry>
	
</feed>
