···4747 "The release post for Palisade, a tool to automate version bumping, release tagging and more."
4848 }
4949 , Link::{
5050- , url = "https://tailscale.com/blog/steam-deck/"
5151- , title = "Putting Tailscale on the Steam Deck"
5252- , description =
5353- "An engineering log of all the steps taken to run Tailscale on the Valve Steam Deck and the tradeoffs between the various methods you could use to do this."
5454- }
5555- , Link::{
5650 , url = "https://tailscale.com/blog/magicdns-why-name/"
5751 , title = "An epic treatise on DNS, magical and otherwise"
5852 , description =
···7064 , title = "Using Tailscale without Using Tailscale"
7165 , description =
7266 "An award-winning April Fools Day post describing how you can use Tailscale via Headscale via Tailscale Funnel. This post is notable for demonstrating all five of the Tailscale company values at the same time."
6767+ }
6868+ , Link::{
6969+ , url = "https://fly.io/blog/how-i-fly/"
7070+ , title = "How I Fly"
7171+ , description =
7272+ "A post about how I use Fly.io to host my personal website and its supporting infrastructure."
7373 }
7474 ]
7575 }
+3-5
lume/_config.ts
···1111import sitemap from "lume/plugins/sitemap.ts";
1212import readInfo from "lume/plugins/reading_info.ts";
13131414+import annotateYear from "./plugins/annotate_year.ts";
1515+1416//import pagefind from "lume/plugins/pagefind.ts";
1517//import _ from "npm:@pagefind/linux-x64";
1618···103105site.use(readInfo({
104106 extensions: [".md", ".mdx"],
105107}));
106106-site.preprocess([".html"], (pages) => {
107107- for (const page of pages) {
108108- page.data.year = page.data.date.getFullYear();
109109- }
110110-});
108108+site.use(annotateYear());
111109112110export default site;
+11
lume/plugins/annotate_year.ts
···11+import type Site from "lume/core/site.ts";
22+33+export default function () {
44+ return (site: Site) => {
55+ site.preprocess([".html"], (pages) => {
66+ for (const page of pages) {
77+ page.data.year = page.data.date.getFullYear();
88+ }
99+ });
1010+ };
1111+}
+76
lume/src/index.jsx
···11+export const layout = "base.njk";
22+export const date = "2012-12-21";
33+44+export default ({ search, resume, notableProjects, contactLinks }, { date }) => {
55+ const dateOptions = { year: "numeric", month: "2-digit", day: "2-digit" };
66+77+ return (
88+ <>
99+ <h1 class="text-3xl mb-4">{resume.name}</h1>
1010+ <p class="text-xl mb-4">{resume.tagline} - {resume.location.city}, {resume.location.country}</p>
1111+ <div className="my-4 flex space-x-4 rounded-md border border-solid border-fg-4 bg-bg-2 p-3 dark:border-fgDark-4 dark:bg-bgDark-2 max-w-full min-h-fit">
1212+ <div className="flex max-h-16 shrink-0 items-center justify-center self-center">
1313+ <img
1414+ style="max-height:6rem"
1515+ alt="A pink haired orca character"
1616+ loading="lazy"
1717+ src="/static/img/avatar.png"
1818+ />
1919+ </div>
2020+ <div className="convsnippet min-w-0 self-center">
2121+ <p className="prose">
2222+ I'm Xe Iaso, I'm a technical educator, <a href="/talks/">conference speaker</a>, <a href="https://twitch.tv/princessxen">twitch streamer</a>, vtuber, and philosopher that focuses on ways to help make technology easier to understand and do cursed things in the process. I live in {resume.location.city} with my husband and I do developer relations professionally. I am an avid writer for my <a href="/blog">blog</a>, where I have over 400 articles. I regularly experiment with new technologies and find ways to mash them up with old technologies for my own amusement.
2323+ </p>
2424+ </div>
2525+ </div>
2626+2727+ <h2 class="text-2xl mb-4">Recent Articles</h2>
2828+ <ul class="list-disc ml-4 mb-4">
2929+ {search.pages("type=blog", "order date=desc", 5).map((post) => {
3030+ const url = post.redirect_to ? post.redirect_to : post.url;
3131+ return (
3232+ <li>
3333+ <time datetime={date(post.date)} className="font-mono">{post.date.toLocaleDateString("en-US", dateOptions)}</time> -{" "}
3434+ <a href={url}>{post.title}</a>
3535+ </li>
3636+ );
3737+ })}
3838+ </ul>
3939+4040+ <h2 class="text-2xl mb-4">Notable Publications</h2>
4141+ <ul class="list-disc ml-4 mb-4">
4242+ {resume.notablePublications.map((publication) => (
4343+ <li>
4444+ <a href={publication.url}>{publication.title}</a><br />{publication.description}
4545+ </li>
4646+ ))}
4747+ </ul>
4848+4949+ <h2 class="text-2xl mb-4">Highlighted Projects</h2>
5050+ <ul class="list-disc ml-4 mb-4">
5151+ {notableProjects.map((project) => (
5252+ <li>
5353+ <a href={project.url}>{project.title}</a> - {project.description}
5454+ </li>
5555+ ))}
5656+ </ul>
5757+5858+ <h2 class="text-2xl mb-4">Quick Links</h2>
5959+ <ul class="list-disc ml-4 mb-4">
6060+ {contactLinks.map((link) => (
6161+ <li>
6262+ <a rel="me" target="_blank" href="{link.url}">{link.title}</a>
6363+ </li>
6464+ ))}
6565+ </ul>
6666+6767+ <p class="mb-4">Looking for someone for your team? Check <a href="/signalboost">here</a>.</p>
6868+6969+ <div class="flex flex-wrap items-start justify-center p-5">
7070+ {resume.buzzwords.map((buzzword) => (
7171+ <span class="m-2 p-2 text-sm bg-bg-1 dark:bg-bgDark-1 text-fg-1 dark:text-fgDark-1 rounded-lg">{buzzword}</span>
7272+ ))}
7373+ </div>
7474+ </>
7575+ );
7676+}
-41
lume/src/index.njk
···11----
22-date: 2012-12-21
33----
44-55-<h1 class="text-3xl mb-4">{{ resume.name }}</h1>
66-<p class="text-xl mb-4">{{ resume.tagline }} - {{ resume.location.city }}, {{ resume.location.country }}</p>
77-<p class="text-lg mb-4">I'm a speaker, writer, chaos magician, and committed technologist. I regularly write articles on
88- my <a href="/blog">blog</a> and give <a href="/talks">conference talks</a>.</p>
99-1010-<h2 class="text-2xl mb-4">Highlighted Projects</h2>
1111-<ul class="list-disc ml-4 mb-4">
1212- {% for project in notableProjects %}
1313- <li>
1414- <a href="{{project.url}}">{{project.title}}</a>: {{project.description}}</li>
1515- {% endfor %}
1616-</ul>
1717-1818-<h2 class="text-2xl mb-4">Recent Articles</h2>
1919-<ul class="list-disc ml-4 mb-4">
2020- {% for post in search.pages("type=blog", "order date=desc", 5) %}
2121- <li><time datetime={{post.date | date("DATE")}}>{{post.date | date("DATE")}}</time> - <a href="{{post.url}}">{{post.title}}</a>
2222- </li>
2323- {% endfor %}
2424-</ul>
2525-2626-<h2 class="text-2xl mb-4">Quick Links</h2>
2727-<ul class="list-disc ml-4 mb-4">
2828- {% for link in contactLinks %}
2929- <li>
3030- <a rel="me" target="_blank" href="{{link.url}}">{{link.title}}</a>
3131- </li>
3232- {% endfor %}
3333-</ul>
3434-3535-<p class="mb-4">Looking for someone for your team? Check <a href="/signalboost">here</a>.</p>
3636-3737-<div class="flex flex-wrap items-start justify-center p-5">
3838- {% for word in resume.buzzwords %}
3939- <span class="m-2 p-2 text-sm bg-bg-1 dark:bg-bgDark-1 text-fg-1 dark:text-fgDark-1 rounded-lg">{{word}}</span>
4040- {% endfor %}
4141-</div>