Compare commits

...
63 Commits
Author SHA1 Message Date
inherentlee 230e86bf7c Merge branch 'main' into stickers
continuous-integration/drone/push Build is passing
2026-10-21 15:23:12 -07:00
inherentlee 32b055f328 note re samples 2026-10-21 15:21:37 -07:00
inherentlee 438d1a67e2 stickerbros 2026-10-21 15:15:12 -07:00
inherentlee cd7f525bac plaid dishtowels
continuous-integration/drone/push Build is passing
2026-10-19 13:09:35 -07:00
inherentlee 6933f11630 stickerapp 2026-10-17 19:35:31 -07:00
inherentlee 62dab04ee9 more about sticky brand ew 2026-10-15 11:24:07 -07:00
inherentlee e60d191e09 sticker update 2026-10-14 13:45:54 -07:00
inherentlee efe79ff639 Merge branch 'main' into stickers 2026-10-14 10:39:12 -07:00
inherentlee 4be20cccb3 border radius for blockquotes
continuous-integration/drone/push Build is passing
2026-10-14 10:38:57 -07:00
inherentlee aba74f280e some tweaks to git post
continuous-integration/drone/push Build is passing
2026-10-14 08:48:25 -07:00
inherentlee 0125216d96 add more aout remote commands
continuous-integration/drone/push Build is passing
2026-10-14 08:43:19 -07:00
inherentlee 6ee81d8784 small updates to git post
continuous-integration/drone/push Build is passing
2026-10-14 08:28:24 -07:00
inherentlee 2bfe616195 update fedizinefest
continuous-integration/drone/push Build is failing
2026-10-13 08:31:32 -07:00
inherentlee f9d8123b9d add header ids
continuous-integration/drone/push Build is passing
2026-10-13 08:30:50 -07:00
inherentlee c7ef4c701a sticker updates 2026-10-13 07:45:30 -07:00
inherentlee d8f3ea3430 add stickerapp 2026-10-10 11:16:25 -07:00
inherentlee a9b96e567e add bend print co samples 2026-10-09 15:46:26 -07:00
inherentlee bc1a51a4d5 add district dharma testimonial
continuous-integration/drone/push Build is passing
2026-10-06 09:52:56 -07:00
inherentlee 16c3ef1e26 audit fix 2026-10-06 09:52:44 -07:00
inherentlee efe153191a another tiny mobile tweak
continuous-integration/drone/push Build is passing
2026-10-06 09:03:41 -07:00
inherentlee 8c2c2231ac some size tweaks for headers on mobile
continuous-integration/drone Build is passing
2026-10-05 13:38:48 -07:00
inherentlee 62b1e448ea Merge branch 'main' into stickers 2026-10-05 13:31:36 -07:00
inherentlee d53198e1aa add sticker junkie, sticker robot, and vinyl disorder
continuous-integration/drone/push Build is running
2026-10-05 13:29:44 -07:00
inherentlee c6ec6b8f48 make urls easier to read font
continuous-integration/drone/push Build is passing
2026-10-04 11:17:32 -07:00
inherentlee 75909355ba couple of notes about samples
continuous-integration/drone/push Build is passing
2026-10-02 17:28:05 -07:00
inherentlee d5660455bd add drone trigger that requires main branch
continuous-integration/drone/push Build is passing
2026-10-02 12:59:15 -07:00
inherentlee 7df4c1ff8e more about sticker bunnies
continuous-integration/drone/push Build is passing
2026-10-02 12:54:06 -07:00
inherentlee d6c2bb9aa9 wording
continuous-integration/drone/push Build is passing
2026-10-02 09:57:23 -07:00
inherentlee 604a6787f4 sticker bunnies
continuous-integration/drone/push Build is passing
2026-10-01 18:55:54 -07:00
inherentlee 980cd0b3a6 update with stickergiant info
continuous-integration/drone/push Build is passing
2026-10-01 13:05:34 -07:00
inherentlee 5be42a4ff3 vinyl disorder and a few details 2026-10-01 08:53:36 -07:00
inherentlee 25c8e56a76 more re sticker ninja
continuous-integration/drone/push Build is passing
2026-09-30 17:44:29 -07:00
inherentlee 8752eeb904 sticker ninja details
continuous-integration/drone/push Build is passing
2026-09-30 17:41:40 -07:00
inherentlee b1135beddb update squarespace more
continuous-integration/drone/push Build is passing
2026-09-30 16:52:53 -07:00
inherentlee 84160a0574 update squarespace
continuous-integration/drone/push Build is passing
2026-09-30 16:51:12 -07:00
inherentlee 557308f3f9 sticker post wip
continuous-integration/drone/push Build is failing
2026-09-29 14:20:22 -07:00
inherentlee 382419e6d6 add toc to fediverse post
continuous-integration/drone/push Build is passing
2026-09-29 14:19:35 -07:00
inherentlee 66df77c32c remove old shop links 2026-09-29 10:01:11 -07:00
inherentlee a3e0ba5037 fedi intro post
continuous-integration/drone/push Build is passing
2026-09-28 09:38:52 -07:00
inherentlee 51d836c71b add to wong foo
continuous-integration/drone/push Build is passing
2026-09-23 20:25:08 -07:00
inherentlee 67e70e68ab remove scroll-margin-top since navbar is no longer sticky
continuous-integration/drone/push Build is passing
2026-09-23 19:29:19 -07:00
inherentlee b31e683786 i honestly don't know why this was working without this but i'm adding it just in case
continuous-integration/drone/push Build is passing
2026-09-23 14:47:53 -07:00
inherentlee 1bb26176ba tweak some breakpoints
continuous-integration/drone/push Build is passing
2026-09-21 16:08:11 -07:00
inherentlee a000d1c1b9 i'm not happy with this but it's better for width
continuous-integration/drone/push Build is passing
2026-09-21 15:55:44 -07:00
inherentlee cf26b06e3d update tree styling to box method
continuous-integration/drone/push Build is passing
2026-09-21 15:40:27 -07:00
inherentlee 5acda53f58 publish leatherworking zine with link to fzf post
continuous-integration/drone/push Build is passing
2026-09-21 13:55:29 -07:00
inherentlee f2bc045735 fedizinefest post
continuous-integration/drone/push Build is passing
2026-09-21 13:49:51 -07:00
inherentlee 3b1c5ffa88 SR fix
continuous-integration/drone/push Build is passing
2026-09-21 12:48:45 -07:00
inherentlee 0882fcda41 better images
continuous-integration/drone/push Build is passing
2026-09-21 12:46:38 -07:00
inherentlee 7d042abe1d fuck spacing and tabs all my homies hate spacing and tabs
continuous-integration/drone/push Build is passing
2026-09-21 12:27:30 -07:00
inherentlee f5bbda1f14 small edits
continuous-integration/drone/push Build is passing
2026-09-21 12:23:53 -07:00
inherentlee 9999775e44 tree style post
continuous-integration/drone/push Build is passing
2026-09-21 12:19:01 -07:00
inherentlee 463cabe793 update framer post pic 2026-09-21 12:18:48 -07:00
inherentlee 4aa7516cb9 fix hanging indent 2026-09-21 12:18:13 -07:00
inherentlee f49a7faa4d more contrasting focus outlines for toc
continuous-integration/drone/push Build is passing
2026-09-21 08:38:59 -07:00
inherentlee 2e26cefab2 tiny tweak to prevent gap
continuous-integration/drone/push Build is passing
2026-09-20 19:04:19 -07:00
inherentlee 870a6e5e0f prevent blockquotes interferring with toc
continuous-integration/drone/push Build is passing
2026-09-20 19:01:54 -07:00
inherentlee be364d7644 it's important that the comment have a slant rhyme
continuous-integration/drone/push Build is passing
2026-09-20 18:50:52 -07:00
inherentlee 06bcfc1522 toc tree styling
continuous-integration/drone/push Build is passing
2026-09-20 18:46:09 -07:00
inherentlee dd1943bcdd li line height matches p line height
continuous-integration/drone/push Build is passing
2026-09-20 15:13:17 -07:00
inherentlee bfa91ea19f big ol toc update
continuous-integration/drone/push Build is passing
2026-09-20 15:07:49 -07:00
inherentlee b4fbeffc41 new font omg
continuous-integration/drone/push Build is passing
2026-09-19 17:40:10 -07:00
inherentlee 25cf8a38ec fix sitemap size 2026-09-18 12:30:23 -07:00
66 changed files with 1193 additions and 236 deletions

No files matched your search

+3
View File
@@ -1,6 +1,9 @@
kind: pipeline
type: docker
name: default
trigger:
branch:
- main
steps:
- name: build
+13
View File
@@ -0,0 +1,13 @@
---
layout: post.njk
---
{% css %}{% include "css/post-toc.css" %}{% endcss %}
<aside id="toc">
<details>
<summary><h2>table of contents</h2></summary>
{{ content | toc | safe }}
</details>
</aside>
{{ content | safe }}
+1
View File
@@ -111,6 +111,7 @@
grid-area: h2;
padding: .25rem .5rem;
text-transform: uppercase;
font-family: var(--font-family);
font-size: 1.5rem;
color: var(--color-primary);
border-radius: 1rem 1rem 0 0;
+24 -15
View File
@@ -1,7 +1,17 @@
@font-face {
font-family: "Peritel";
src:
url("/fonts/Peritel/Peritel-Regular.woff2") format("woff2"),
url("/fonts/Peritel/Peritel-Regular.otf") format("opentype");
}
:root {
color-scheme: light dark;
--font-family: 'Atkinson Hyperlegible Next', sans-serif;
/* if you change the header font, go to post-toc.css and fuck about with the width
of the table of contents */
--font-family-headers: 'Peritel', 'Atkinson Hyperlegible Next', sans-serif;
--font-family-code: 'Atkinson Hyperlegible Mono', monospace;
--color-dark: #2e303e;
@@ -59,7 +69,6 @@
}
/* Base */
* {
box-sizing: border-box;
margin: 0;
@@ -76,10 +85,9 @@ main {
width: 60vw;
max-width: 1000px;
margin: 0 auto;
scroll-margin-top: 7rem;
}
@media (max-width: 1050px) {
@media (max-width: 1100px) {
main {
width: 75vw;
}
@@ -95,37 +103,38 @@ main {
h1, h2, h3, h4, h5, h6 {
line-height: 1.25;
color: var(--color-teal);
font-family: var(--font-family-headers);
letter-spacing: 0.1rem;
}
h1 {
margin-top: 3rem;
font-size: 3.5rem;
font-size: 3.7rem;
text-align: center;
}
h2, h3, h4, h5, h6 {
scroll-margin-top: 5rem;
}
h2 {
margin-top: 2rem;
font-size: 2.2rem;
font-size: 2.35rem;
}
h3 {
margin-top: 1.5rem;
font-size: 1.6rem;
font-size: 1.7rem;
}
@media (max-width: 650px) {
h1 { font-size: 2.8rem; }
h1 {
margin-top: 1.5rem;
font-size: 2.25rem;
}
h2 { font-size: 1.8rem; }
h3 { font-size: 1.35rem; }
h3 { font-size: 1.4rem; }
}
h4, h5, h6 {
margin-top: 1rem;
font-size: 1.2rem;
font-size: 1.25rem;
}
/* Images */
@@ -201,7 +210,7 @@ ul, ol, dl, li {
}
li {
line-height: 1.2;
line-height: 1.4;
margin-top: .65rem;
margin-bottom: .65rem;
}
@@ -231,7 +240,7 @@ dd {
blockquote {
margin: .5rem 0;
padding: 0 1rem;
border-radius: .25rem 1rem 1rem .25rem;
border-radius: .5rem;
line-height: 1.25;
border-left: .5rem solid var(--color-pink);
}
+103
View File
@@ -0,0 +1,103 @@
#toc {
float: right;
margin: 1rem 0 1.5rem 1.5rem;
width: fit-content;
max-width: 55%;
}
@media (max-width: 900px) {
#toc {
float: unset;
margin-top: 2rem;
margin-left: .5rem;
width: calc(100% - .5rem);
max-width: unset;
}
}
#toc details {
border: thick solid var(--color-pink);
border-radius: 1rem;
margin-top: 1rem;
background-color: var(--color-bg);
}
#toc summary {
position: relative;
top: -1.5rem;
left: -.75rem;
width: fit-content;
background: var(--color-bg);
border-radius: .5rem;
cursor: pointer;
padding-inline-end: .25rem;
}
#toc summary:focus-visible {
outline: .15rem solid var(--color-teal);
}
#toc summary::marker {
font-size: 2.35rem;
}
#toc h2 {
margin-top: 0;
display: inline;
line-height: normal;
}
#toc nav {
position: relative;
top: -1.25rem;
}
/* `tree` style toc */
#toc nav > ol {
margin-inline: 1rem;
}
#toc ol {
margin: 0;
}
#toc li {
position: relative;
padding-inline-start: 1em;
list-style: none;
margin-block: 0;
margin-left: .35rem;
}
#toc li::before,
#toc li::after {
display: block;
position: absolute;
box-sizing: border-box;
inset-block: 0 auto;
inset-inline: 0 auto;
inline-size: .75em;
border-inline-start: .1rem solid var(--color-pink);
}
#toc li::before {
block-size: .5lh;
border-block-end: .1rem solid var(--color-pink);
content: "";
}
#toc li:not(:last-child)::after {
block-size: 100%;
content: "";
}
/* underlines are unnecessary in this context */
#toc a {
text-decoration: none;
color: var(--color-blue);
font-weight: bold;
}
#toc a:focus-visible {
outline-color: var(--color-pink);
}
+1
View File
@@ -34,6 +34,7 @@
.job-details a {
font-size: 1rem;
font-family: var(--font-family);
}
.job p {
+19 -7
View File
@@ -1,11 +1,14 @@
import { IdAttributePlugin } from "@11ty/eleventy";
import { HtmlBasePlugin } from "@11ty/eleventy";
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
import eleventyNavigationPlugin from "@11ty/eleventy-navigation";
import { feedPlugin } from "@11ty/eleventy-plugin-rss";
import syntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
import toc from "eleventy-plugin-nesting-toc";
import { attrs } from "@mdit/plugin-attrs";
import { markdownitLinkAttributes } from 'markdown-it-link-attributes';
import markdownitIdAttributes from "markdown-it-anchor";
import path from "node:path";
import { execSync } from 'child_process';
@@ -18,7 +21,7 @@ export default async function(eleventyConfig) {
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(attrs));
/* Markdown apply target="_blank" to all external links */
const milaOptions = {
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownitLinkAttributes, {
matcher(href) {
return href.match(/^https?:\/\//);
},
@@ -26,8 +29,13 @@ export default async function(eleventyConfig) {
target: "_blank",
rel: "external",
},
};
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownitLinkAttributes, milaOptions));
}));
/* Markdown apply ID attributes to headers */
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownitIdAttributes, {
level: [2, 3, 4],
tabIndex: false,
}));
/* Bundles */
/* CSS */
@@ -72,6 +80,7 @@ export default async function(eleventyConfig) {
/* Passthrough */
eleventyConfig
.addPassthroughCopy("favicon.ico")
.addPassthroughCopy("fonts")
.addPassthroughCopy("robots.txt");
/* Plugins */
@@ -99,6 +108,9 @@ export default async function(eleventyConfig) {
}
});
/* HTML base */
eleventyConfig.addPlugin(HtmlBasePlugin);
/* Images */
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
// output image formats
@@ -127,12 +139,12 @@ export default async function(eleventyConfig) {
/* Navigation */
eleventyConfig.addPlugin(eleventyNavigationPlugin);
/* `id` attributes */
eleventyConfig.addPlugin(IdAttributePlugin);
/* Syntax highlighting */
eleventyConfig.addPlugin(syntaxHighlight);
/* Table of contents */
eleventyConfig.addPlugin(toc);
/* Draft handling */
eleventyConfig.addPreprocessor("drafts", "*", (data, content) => {
if (data.draft) {
+33
View File
@@ -0,0 +1,33 @@
# End User License Agreement (EULA)
This End User License Agreement is a legal agreement between the licensee (you), and the author of this font, Christopher Kirk-Nielsen.
You are granted a perpetual, non-exclusive license to use the font with your purchase.
## By downloading or purchasing this font, you agree to the following terms:
**For use on a website**
Use on any website owned or under the licensee's control, no pageview limits.
**For use in an app**
App embed allowed for 1 app. Another app = another license.
**Distribution**
The font may not be redistributed.
**Personal modification**
The font may be modified for personal use, but cannot be redistributed.
**Do not use the font for hateful purposes**
The font is not allowed to be used in any material promoting hate speech of any kind, including but not limited to: racism, xenophobia, homophobia, sexism, or other types of discrimination.
**Do not use the font with AI**
The font is not allowed to be used in, or in training of, AI/LLMs.
**Use at your own risk**
Any usage of the fonts are at the licensee's own risk.
For ebooks and other commercial use, or any other specific needs, email me to figure something out: chriskirknielsen+fonts[at]gmail.com
Thank you very much for the support!
Christopher Kirk-Nielsen (https://chriskirknielsen.com/fonts/)
Binary file not shown.
Binary file not shown.
+488 -95
View File
@@ -17,8 +17,11 @@
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2",
"@mdit/plugin-attrs": "^0.24.2",
"@zachleat/heading-anchors": "https://github.com/lee0c/heading-anchors/tarball/main",
"cheerio": "^1.2.0",
"eleventy-plugin-nesting-toc": "^1.3.0",
"lodash-es": "^4.17.23",
"luxon": "^3.7.2",
"markdown-it-anchor": "^10.0.0",
"markdown-it-link-attributes": "https://github.com/lee0c/markdown-it-link-attributes/tarball/main",
"pagefind": "^1.5.2"
}
@@ -47,45 +50,45 @@
}
},
"node_modules/@11ty/eleventy": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.2.tgz",
"integrity": "sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg==",
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.6.tgz",
"integrity": "sha512-ZlSiR1PLdS2lv7TelBgWAhcvMiLNZkPBlLEb+lh7kGYZ+Mk0bo9qcYgVsewvw9W7Em0RH3wd01h5fAstNDh0zA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@11ty/dependency-tree": "^4.0.0",
"@11ty/dependency-tree-esm": "^2.0.0",
"@11ty/dependency-tree": "^4.0.2",
"@11ty/dependency-tree-esm": "^2.0.4",
"@11ty/eleventy-dev-server": "^2.0.8",
"@11ty/eleventy-plugin-bundle": "^3.0.6",
"@11ty/eleventy-plugin-bundle": "^3.0.7",
"@11ty/eleventy-utils": "^2.0.7",
"@11ty/lodash-custom": "^4.17.21",
"@11ty/posthtml-urls": "^1.0.1",
"@11ty/recursive-copy": "^4.0.2",
"@11ty/posthtml-urls": "^1.0.3",
"@11ty/recursive-copy": "^4.0.4",
"@sindresorhus/slugify": "^2.2.1",
"bcp-47-normalize": "^2.3.0",
"chokidar": "^3.6.0",
"debug": "^4.4.1",
"debug": "^4.4.3",
"dependency-graph": "^1.0.0",
"entities": "^6.0.1",
"filesize": "^10.1.6",
"gray-matter": "^4.0.3",
"iso-639-1": "^3.1.5",
"js-yaml": "^4.1.0",
"js-yaml": "^4.1.1",
"kleur": "^4.1.5",
"liquidjs": "^10.21.1",
"luxon": "^3.6.1",
"markdown-it": "^14.1.0",
"liquidjs": "^10.27.0",
"luxon": "^3.7.2",
"markdown-it": "^14.2.0",
"minimist": "^1.2.8",
"moo": "^0.5.2",
"moo": "0.5.2",
"node-retrieve-globals": "^6.0.1",
"nunjucks": "^3.2.4",
"picomatch": "^4.0.2",
"picomatch": "^4.0.4",
"please-upgrade-node": "^3.2.0",
"posthtml": "^0.16.6",
"posthtml": "^0.16.7",
"posthtml-match-helper": "^2.0.3",
"semver": "^7.7.2",
"slugify": "^1.6.6",
"tinyglobby": "^0.2.14"
"semver": "^7.8.1",
"slugify": "^1.6.9",
"tinyglobby": "^0.2.16"
},
"bin": {
"eleventy": "cmd.cjs"
@@ -267,9 +270,9 @@
}
},
"node_modules/@11ty/posthtml-urls": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.2.tgz",
"integrity": "sha512-0vaV3Wt0surZ+oS1VdKKe0axeeupuM+l7W/Z866WFQwF+dGg2Tc/nmhk/5l74/Y55P8KyImnLN9CdygNw2huHg==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.3.tgz",
"integrity": "sha512-1YvhnkaNlFnnJic1rBMWmTC2adbuy+JQiBfl1Hecr1Wjjik1pQZmGyk/eC9zKX/FQv52s2Nht1Gi/UwhYqrBeg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -283,15 +286,15 @@
}
},
"node_modules/@11ty/recursive-copy": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.3.tgz",
"integrity": "sha512-SX48BTLEGX8T/OsKWORsHAAeiDsbFl79Oa/0Wg/mv/d27b7trCVZs7fMHvpSgDvZz/fZqx5rDk8+nx5oyT7xBw==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.4.tgz",
"integrity": "sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"errno": "^1.0.0",
"junk": "^3.1.0",
"maximatch": "^0.1.0",
"minimatch": "^3.1.5",
"slash": "^3.0.0"
},
"engines": {
@@ -996,49 +999,6 @@
"dev": true,
"license": "Python-2.0"
},
"node_modules/array-differ": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
"integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-uniq": "^1.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -1108,6 +1068,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true,
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "1.1.21",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
@@ -1145,6 +1112,201 @@
"node": ">= 10.16.0"
}
},
"node_modules/cheerio": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz",
"integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0",
"domhandler": "^5.0.3",
"domutils": "^3.2.2",
"encoding-sniffer": "^0.2.1",
"htmlparser2": "^10.1.0",
"parse5": "^7.3.0",
"parse5-htmlparser2-tree-adapter": "^7.1.0",
"parse5-parser-stream": "^7.1.2",
"undici": "^7.19.0",
"whatwg-mimetype": "^4.0.0"
},
"engines": {
"node": ">=20.18.1"
},
"funding": {
"url": "https://github.com/cheeriojs/cheerio?sponsor=1"
}
},
"node_modules/cheerio-select": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
"integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
"css-select": "^5.1.0",
"css-what": "^6.1.0",
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.0.1"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/cheerio-select/node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
"entities": "^4.2.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/cheerio-select/node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/cheerio-select/node_modules/domutils": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/cheerio-select/node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/cheerio/node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
"entities": "^4.2.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/cheerio/node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/cheerio/node_modules/domutils": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/cheerio/node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/cheerio/node_modules/htmlparser2": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
"integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.2.2",
"entities": "^7.0.1"
}
},
"node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -1232,6 +1394,95 @@
"dev": true,
"license": "MIT"
},
"node_modules/css-select": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
"integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
"domhandler": "^5.0.2",
"domutils": "^3.0.1",
"nth-check": "^2.0.1"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/css-select/node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
"entities": "^4.2.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/css-select/node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/css-select/node_modules/domutils": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/css-select/node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/css-what": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
"integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">= 6"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -1362,6 +1613,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/eleventy-plugin-nesting-toc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eleventy-plugin-nesting-toc/-/eleventy-plugin-nesting-toc-1.3.0.tgz",
"integrity": "sha512-WZzVkz28nw3A0DpJFQWXZzQxniyjvOZKxVix5x7WVAS0H1OD1hYJbR0go/Lr1kK2SrmxfbsUHUlekR+mQPvqMA==",
"dev": true,
"license": "ISC",
"dependencies": {
"cheerio": "^1.0.0-rc.3"
}
},
"node_modules/encodeurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -1372,6 +1633,20 @@
"node": ">= 0.8"
}
},
"node_modules/encoding-sniffer": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
"integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"dev": true,
"license": "MIT",
"dependencies": {
"iconv-lite": "^0.6.3",
"whatwg-encoding": "^3.1.1"
},
"funding": {
"url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
}
},
"node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -1708,6 +1983,19 @@
"url": "https://opencollective.com/express"
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/image-size": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
@@ -1994,6 +2282,17 @@
"markdown-it": "bin/markdown-it.mjs"
}
},
"node_modules/markdown-it-anchor": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-10.0.0.tgz",
"integrity": "sha512-Q8g7Z6OBdH3eXF0lujFqukIxUvgCDZcjzCrJxmD6QiEzU1HWR9fVN+Bf6gxmM+0yrPFs+jUw8gNjLmUQqt6Eew==",
"dev": true,
"license": "Unlicense",
"peerDependencies": {
"@types/markdown-it": "*",
"markdown-it": "*"
}
},
"node_modules/markdown-it-link-attributes": {
"version": "4.0.1",
"resolved": "https://github.com/lee0c/markdown-it-link-attributes/tarball/main",
@@ -2014,22 +2313,6 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/maximatch": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz",
"integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-differ": "^1.0.0",
"array-union": "^1.0.1",
"arrify": "^1.0.0",
"minimatch": "^3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
@@ -2153,6 +2436,19 @@
"node": ">=0.10.0"
}
},
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0"
},
"funding": {
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/nunjucks": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz",
@@ -2268,6 +2564,62 @@
"dev": true,
"license": "MIT"
},
"node_modules/parse5": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
"integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dev": true,
"license": "MIT",
"dependencies": {
"entities": "^6.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parse5-htmlparser2-tree-adapter": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
"integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
"dev": true,
"license": "MIT",
"dependencies": {
"domhandler": "^5.0.3",
"parse5": "^7.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/parse5-parser-stream": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
"integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
"dev": true,
"license": "MIT",
"dependencies": {
"parse5": "^7.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -2427,6 +2779,13 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"license": "MIT"
},
"node_modules/section-matter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
@@ -2442,9 +2801,9 @@
}
},
"node_modules/semver": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"version": "7.8.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -2556,9 +2915,9 @@
}
},
"node_modules/slugify": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
"integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
"version": "1.6.9",
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz",
"integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2606,14 +2965,14 @@
}
},
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
"integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
"picomatch": "^4.0.3"
"picomatch": "^4.0.4"
},
"engines": {
"node": ">=12.0.0"
@@ -2660,6 +3019,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/undici": {
"version": "7.29.1",
"resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz",
"integrity": "sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=20.18.1"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -2677,6 +3046,30 @@
"dev": true,
"license": "MIT"
},
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
"dev": true,
"license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
"engines": {
"node": ">=18"
}
},
"node_modules/whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/ws": {
"version": "8.21.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
+3
View File
@@ -19,8 +19,11 @@
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2",
"@mdit/plugin-attrs": "^0.24.2",
"@zachleat/heading-anchors": "https://github.com/lee0c/heading-anchors/tarball/main",
"cheerio": "^1.2.0",
"eleventy-plugin-nesting-toc": "^1.3.0",
"lodash-es": "^4.17.23",
"luxon": "^3.7.2",
"markdown-it-anchor": "^10.0.0",
"markdown-it-link-attributes": "https://github.com/lee0c/markdown-it-link-attributes/tarball/main",
"pagefind": "^1.5.2"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

+2 -1
View File
@@ -7,7 +7,8 @@ eleventyExcludeFromCollections: true
<xsl:template match="/">
<html>
<head>
<title>Sitemap</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>sitemap | hello hello</title>
<style>{% include "css/main.css" %}</style>
</head>
<body>
+1 -1
View File
@@ -6,7 +6,7 @@ This is v2 of my personal website, built with [{{ eleventy.generator }}](https:/
v1 of this site began in 2022 and was based on [Millennial](https://lenpaul.github.io/Millennial/), a minimalist Jekyll theme for running a blog or publication by Paul Le.
The fonts are [Atkinson Hyperlegible Next and Atkinson Hyperlegible Mono](https://brailleinstitute.org/freefont) for standard text and monospace respectively, specifically designed for low-vision readers to improve character recognition. Also they look neat :)
The header font is [Peritel by Christopher Kirk-Nielsen](https://chriskirknielsen.com/fonts/peritel/). I'm currently trying it on for size, so let me know if you like it - or hate it! The body fonts (and the all-caps headers on the post list pages) are [Atkinson Hyperlegible Next and Atkinson Hyperlegible Mono](https://brailleinstitute.org/freefont) for standard text and monospace respectively, specifically designed for low-vision readers to improve character recognition. Also they look neat :)
The search bar is powered by [Pagefind](https://pagefind.app/). I was guided by [Robb Knight's walkthrough](https://rknight.me/blog/using-pagefind-with-eleventy-for-search/) when setting it up.
+23 -12
View File
@@ -47,7 +47,7 @@ layout: base.njk
<div class="job">
<div class="two-col job-details">
<h3>Freelance Web Developer</h3>
<h3 id="freelance-web-developer">Freelance Web Developer</h3>
<p class="col2"><time datetime="2026-01">January 2026</time> – Present</p>
</div>
@@ -64,6 +64,17 @@ layout: base.njk
a clean and minimalist homepage for the District Dharma collective,
built in Eleventy with a Mattrbld content management system to allow
for easy editing by the client.
<blockquote class="testimonial">
Being of a generation that didn't grow up with technology, I was a little
nervous going into this project, but Lee made it easy. He was patient and
completely non-judgmental with my simple questions, quick to respond by
email, and open to my feedback throughout. He built exactly what I
envisioned for our meditation group's website, and his estimate was the
final cost. When he asked what he could improve, I honestly couldn't come
up with anything. He delivered what he promised and was easy to reach the
whole way through. If you want someone skilled who will also make the
process feel comfortable, I can't recommend him highly enough.
</blockquote>
</li>
<li>
<strong>My Liberation Work Has Been Damn Ableist: A Landworker Memoir
@@ -147,7 +158,7 @@ layout: base.njk
datetime="2025-07">July 2025</time></p>
</div>
<h3>Software Development Engineer I & II</h3>
<h3 id="software-development-engineer-i-ii">Software Development Engineer I & II</h3>
<p>
Worked on green- and brown-field projects with customers, solving emerging
@@ -184,7 +195,7 @@ layout: base.njk
<p class="col2"><time datetime="2023-10">October 2023</time> – Present</p>
</div>
<h3>Co-owner and artist</h3>
<h3 id="co-owner-and-artist">Co-owner and artist</h3>
<p>
Maintains website, storefront, and inventory for a diverse set of artistic
@@ -210,7 +221,7 @@ layout: base.njk
datetime="2017-12">December 2017</time></p>
</div>
<h3>Undergraduate Programming Mentor</h3>
<h3 id="undergraduate-programming-mentor">Undergraduate Programming Mentor</h3>
<p>
Helped students debug and develop in Python and learn core programming
@@ -227,7 +238,7 @@ layout: base.njk
datetime="2017-08">August 2017</time></p>
</div>
<h3>Software Development Engineering Intern</h3>
<h3 id="software-development-engineering-intern">Software Development Engineering Intern</h3>
<p>
Developed a chatbot add-on for the Azure Android application.
</p>
@@ -239,7 +250,7 @@ layout: base.njk
<div class="job">
<div class="two-col job-details">
<h3>FediLearns (<a
<h3 id="fedilearns">FediLearns (<a
href="https://fedilearns.fyi" target="_blank">fedilearns.fyi</a>)</h3>
<p class="col2"><time datetime="2026-04">April 2026</time> – Present
</p>
@@ -254,7 +265,7 @@ layout: base.njk
<div class="job">
<div class="two-col job-details">
<h3>Siblinghood of the Traveling Greeting Card (<a
<h3 id="siblinghood-of-the-traveling-greeting-card">Siblinghood of the Traveling Greeting Card (<a
href="https://siblinghood.quest"
target="_blank">siblinghood.quest</a>)</h3>
<p class="col2"><time datetime="2025-11">November 2025</time> – Present
@@ -269,13 +280,13 @@ layout: base.njk
<div class="job">
<div class="two-col job-details">
<h3>FediZineFest (<a href="https://fedizinefest.fyi"
<h3 id="fedizinefest">FediZineFest (<a href="https://fedizinefest.fyi"
target="_blank">fedizinefest.fyi</a>)</h3>
<p class="col2"><time datetime="2023-12">December 2023</time> – Present</p>
</div>
<p>Creates and runs a global event for zine artists on the fediverse, now kicking
off its third year. Coordinates website, physical material shipping and
<p>Creates and runs a global event for zine artists on the fediverse, now in its
third year. Coordinates website, physical material shipping and
logistics, payment, and marketing for a 40–50 person project. Leads a small team
and delegates appropriate responsibilities.</p>
</div>
@@ -295,7 +306,7 @@ layout: base.njk
<div class="job">
<div class="two-col job-details">
<h3>Rescue Trans Rescue (<a href="https://rescue-trans-rescue.quest"
<h3 id="rescue-trans-rescue">Rescue Trans Rescue (<a href="https://rescue-trans-rescue.quest"
target="_blank">rescue-trans-rescue.quest</a>)</h3>
<p class="col2"><time datetime="2024">2024</time></p>
</div>
@@ -307,7 +318,7 @@ layout: base.njk
<hr>
<h2 class="centered upper">Education</h2>
<h2 class="centered upper" id="education">Education</h2>
<p class="centered">
<b>Bachelor of Science — Computer Science</b>
+2
View File
@@ -110,6 +110,8 @@ Code blocks can have syntax highlighting:
<h1>Hello, world</h1>
```
### You can even write `headers in monospace`
## Tables
Tables in Markdown are kind of annoying to format. You use the pipe (`|`) character as well as dashes.
@@ -30,6 +30,10 @@ tags:
- [Ten Thousand](https://xkcd.com/1053/) by Randall Munroe
## Movies
- [To Wong Foo, Thanks for Everything! Julie Newmar](https://www.imdb.com/title/tt0114682/)
## Short fiction
- [Why Don't We Just Kill the Kid in the Omelas Hole](https://clarkesworldmagazine.com/kim_02_24/) by Isabel J. Kim
+1
View File
@@ -1,5 +1,6 @@
---
title: butch hands pattern
layout: post-with-toc.njk
image:
src: 2023/butch-hands.jpg
alt: "Hands wearing a pair of pink and grey gloves with convertable mitten tops."
@@ -1,5 +1,6 @@
---
title: backend accessibility
layout: post-with-toc.njk
image:
src: 2023/camelCase-print.jpg
alt: "A carved stamp next to its print. The print reads '#camelCase' in a slightly formal-looking italic font."
@@ -8,7 +9,7 @@ tags:
- software
---
> These notes are from a talk I gave at work. If you think something is missing or incorrect, please let me know!
These notes are from a talk I gave at work. If you think something is missing or incorrect, please let me know!
Backend developers still have users: other developers. We're all human, with human limitations and differences. Design for those limitations and you'll find you improve the end result for everyone.
@@ -3,6 +3,8 @@ title: printing press notes
image:
src: 2023/printing-press.jpg
alt: "An open Speedball Model B printing press, which uses a lever handle to put even pressure on a 6 by 8 inch top plate."
tags:
- reference
---
## specs
@@ -1,5 +1,6 @@
---
title: leatherworking favorites
layout: post-with-toc.njk
image:
src: 2023/leather-harness-wip.jpg
alt: "two pieces of a chest harness sitting on a messy workbench. both pieces are about 8 inches long total and consist of two large o-rings joined by a dark teal leather strap. the o rings and rivets are matte black."
@@ -1,5 +1,6 @@
---
title: domain and site setup
layout: post-with-toc.njk
image:
src: 2023/crinkly-mushrooms.jpg
alt: "Picture unrelated to post. Some crinkly brown-orange mushrooms in vibrant green grass."
+2 -1
View File
@@ -1,5 +1,6 @@
---
title: on pronouns
layout: post-with-toc.njk
image:
src: 2023/starling.jpg
alt: Image unrelated to post. A starling, a beautifully iridescent black bird, stands on a hanging suet feeder.
@@ -8,7 +9,7 @@ tags:
- gender
---
Created in cooperation with [Julia Pinedo](https://www.linkedin.com/in/julia-pinedo-094162117/).
Created in cooperation with [Jonah Pinedo](https://www.linkedin.com/in/jonahpinedo/).
Adapted from a workplace session on pronouns and gender identity.
@@ -9,5 +9,3 @@ tags:
- gender
- patch
---
Limited number available for free in my [square shop](https://riverside-refuge.square.site/product/tooled-leather-pronoun-patch/91) with the code "FREEPATCH"
@@ -7,9 +7,3 @@ tags:
- gallery
- leather
---
Made a few variations of this; check out the shop for more details and options:
- [fixed o-ring bracelet](https://riverside-refuge.square.site/product/fixed-o-ring-bracelet/108)
- [swappable o-ring bracelet](https://riverside-refuge.square.site/product/swappable-o-ring-bracelet/102)
- [premade o-ring bracelets](https://riverside-refuge.square.site/product/premade-o-ring-bracelets/106)
@@ -1,5 +1,6 @@
---
title: gender as a proxy variable
layout: post-with-toc.njk
image:
src: 2024/gender-zine-cover.png
alt: "Part of a scan of the cover of my zine, Gender as a Proxy Variable. It shows the title and a bit of handsewn binding."
@@ -7,5 +7,3 @@ tags:
- gallery
- print
---
currently offering these free [in the shop](https://riverside-refuge.square.site/product/tiny-personal-pet-portrait-stamp/111) with the code FREESTAMP
+1
View File
@@ -1,5 +1,6 @@
---
title: no politics (wip)
layout: post-with-toc.njk
image:
src: 2024/mushroom-on-fence.jpg
alt: "Picture unrelated to post. A small orange mushroom grows from the center of a fence post."
@@ -7,10 +7,6 @@ tags:
- reference
---
Updated 13 Aug 2024
The content previously found on this page is now hosted on a standalone site.
[Visit the site](https://rescue-trans-rescue.glitch.me).
(Site down? Not loading? [Check for issues with Glitch, our hosting provider](https://status.glitch.com/).)
[Visit rescue-trans-rescue.quest](https://rescue-trans-rescue.quest).
@@ -1,5 +1,6 @@
---
title: handedness toggle
layout: post-with-toc.njk
image:
src: 2024/handedness-toggle-0.png
alt: "A screenshot of the rescue trans rescue navbar centered on a button that shows a hand pointing left."
@@ -1,5 +1,6 @@
---
title: azure locations and file crawling
layout: post-with-toc.njk
image:
src: 2025/azure-locations.jpg
alt: "A Linux terminal. There is a fun rainbow flag in ascii art at the top, and then the user has called a command asking Azure for a list of locations applicable to a specific resource type. The output is lengthy."
+3 -2
View File
@@ -11,11 +11,12 @@ Listed by recency.
## 2026
- [Imbolc Celebration & Market at Beall Greenhouses](https://beall-greenhouses-market.pages.dev/events/2026-imbolc) (vendor, web marketing)
- [Beltane Market at Beall Greenhouses](https://beall-greenhouses.com/events/2027-beltane) (vendor, web marketing)
- [Imbolc Celebration & Market at Beall Greenhouses](https://beall-greenhouses.com/events/2026-imbolc) (vendor, web marketing)
## 2025
- [Solstice Market at Beall Greenhouses](https://beall-greenhouses-market.pages.dev/events/2025-solstice) (vendor, web and print marketing)
- [Solstice Market at Beall Greenhouses](https://beall-greenhouses.com/events/2025-solstice) (vendor, web and print marketing)
- [Seattle Zine Fest](https://www.instagram.com/seattle.zine.fest) (vendor)
- [VIVA Spring Tour](https://vivartists.com/viva/events/spring-tour-2025/) (vendor)
- [Seattle Erotic Art Festival](https://www.seaf.art) (displayed artist)
@@ -1,5 +1,6 @@
---
title: my favorite git flag
layout: post-with-toc.njk
image:
src: 2025/shelf-mushrooms.jpg
alt: "Picture unrelated to post. Creamy beige shelf mushrooms on a mossy tree trunk."
@@ -20,7 +21,7 @@ also, [TIL](https://xkcd.com/1053/): this command is a shortcut to the `patch` s
a classic scenario: you've realized your uncommitted work doesn't just encapsulate one change, and it's not so easily split as to be separable per-file. `git add -p` instead lets you choose to stage changes chunk-by-chunk, or, as `git` terms it, hunk-by-hunk.
### hunks
### hunks...
...are not perfect. you can split hunks, but only so much, and there's going to be cases where your changes are *so* mixed in as to be inseparable.
+1 -19
View File
@@ -1,5 +1,6 @@
---
title: siblinghood of the traveling greeting card
layout: post-with-toc.njk
image:
src: 2025/rockery.jpg
alt: "Image unrelated to post. A surprisingly neat pile of rounded beach rocks, mainly speckly grey-white-bluish ones, with trees in the background."
@@ -12,25 +13,6 @@ welcome to the siblinghood of the traveling greeting card. it now has a home at
originated on the fediverse - see the [#siblinghoodOfTheTravelingGreetingCard hashtag](https://flipping.rocks/tags/siblinghoodOfTheTravelingGreetingCard) - with original idea thanks to [noctiluca@scholar.social](https://scholar.social/@noctiluca)
## table of contents
- [objective](#objective)
- [outline](#outline)
- [timeline](#timeline)
- [participants](#participants)
- [on randomization](#on-randomization)
- [card guidelines](#card-guidelines)
- [address privacy](#address-privacy)
- [what I'll need from participants](#what-ill-need-from-participants)
- [signing the card](#signing-the-card)
- [mailing it back out](#mailing-it-back-out)
- [status checks](#status-checks)
- [what I'll send participants](#what-ill-send-participants)
- [guidelines](#guidelines)
- [recipient and loop order assignment](#recipient-and-loop-order-assignment)
- [reminders](#reminders)
- [I want in!](#i-want-in)
## objective
send a greeting card around the world. maybe more than one. we'll see.
+2 -1
View File
@@ -1,5 +1,6 @@
---
title: moving images
layout: post-with-toc.njk
image:
src: 2026/cormorant.jpg
alt: "Image unrelated to post. A cormorant, a type of black waterfowl, poses with wings spread on a buoy in Puget Sound. Off to the left, another bird floats."
@@ -10,7 +11,7 @@ tags:
## problem statement
today I decided to finally clean up the `assets/img` directory for this site. Since 2022, when I started this project, I've just been adding images directly to that directory with no further segmentation - messy of me, I know! It's gotten unwieldy and I'm starting to get worried about generic names leading to duplicates at some point, particularly for the non-gallery images where I have a tendency to [use](/stationery-exchange) [lots](/favorite-git-flag) [of](/trans-networks) [mushroom](/no-politics) [images](/domain-and-site-setup).
today I decided to finally clean up the `assets/img` directory for this site. Since 2022, when I started this project, I've just been adding images directly to that directory with no further segmentation - messy of me, I know! It's gotten unwieldy and I'm starting to get worried about generic names leading to duplicates at some point, particularly for the non-gallery posts where I have a tendency to [use](/stationery-exchange) [lots](/my-favorite-git-flag) [of](/networks-of-trans-care) [mushroom](/no-politics-wip) [images](/domain-and-site-setup).
so it's time to move them into year-based folders. Let's talk about how I did that. `bash` away!
+13 -56
View File
@@ -1,5 +1,6 @@
---
title: an intro to git
layout: post-with-toc.njk
image:
src: 2026/goldeneye-tail.jpg
alt: "Image unrelated to post. The tail of a diving duck pokes out from the water with a small splash."
@@ -10,53 +11,7 @@ tags:
alrighty, this one's a real doozy. Strap in.
---
<!-- TOC -->
- [versioning](#versioning)
- [problem statement](#problem-statement)
- [what is git?](#what-is-git)
- [where can I use git?](#where-can-i-use-git)
- [what is a CLI?](#what-is-a-cli)
- [where can I use the git CLI?](#where-can-i-use-the-git-cli)
- [git for Windows](#git-for-windows)
- [WSL](#wsl)
- [a few terminal operations](#a-few-terminal-operations)
- [edit files](#edit-files)
- [git version](#git-version)
- [a few handy settings](#a-few-handy-settings)
- [git going](#git-going)
- [git init](#git-init)
- [git clone](#git-clone)
- [git status](#git-status)
- [branch main](#branch-main)
- [no commits / nothing to commit](#no-commits--nothing-to-commit)
- [commits and history](#commits-and-history)
- [git log](#git-log)
- [creating a commit](#creating-a-commit)
- [the staging area](#the-staging-area)
- [git add](#git-add)
- [git commit](#git-commit)
- [checking our work](#checking-our-work)
- [changes to existing files](#changes-to-existing-files)
- [git restore](#git-restore)
- [git revert](#git-revert)
- [git remote](#git-remote)
- [git fetch and git pull](#git-fetch-and-git-pull)
- [git push, take one](#git-push-take-one)
- [authentication](#authentication)
- [SSH keys](#ssh-keys)
- [creation](#creation)
- [an alias...](#an-alias)
- [and a function](#and-a-function)
- [SSH keys and the remote](#ssh-keys-and-the-remote)
- [git push, take two](#git-push-take-two)
- [summary](#summary)
<!-- /TOC -->
---
and as always, if you find an error or have feedback, please [let me know](/contact).
## versioning
@@ -77,7 +32,7 @@ this walkthrough is best suited for people who want to use `git` in single-perso
this walkthrough also focuses on the "happy path," without much discussion of troubleshooting. I may write more on the topic in the future, but we're already over *4,500 words*, so we're calling it a day.
finally, I wrote this walkthrough primarily with knowledge from using **WSL** [more on this later] on **Windows** and with **Zed** as my text editor. While I've tried to cover my bases with other OSes and options, there's a solid chance I'm missing things!
finally, I wrote this walkthrough primarily with knowledge from using **WSL** [more on this later] on **Windows** and with **Zed** as my text editor, and I've since lightly reviewed from **Linux Mint** with **Gram** as my text editor. While I've tried to cover my bases with other OSes and options, there's a solid chance I'm missing things!
that all said, let's get (git?) into it!
@@ -105,10 +60,10 @@ a CLI a way to interact with your computer and with software in text-only form.
if you want to use the `git` CLI, you'll need a terminal. You've got a couple options here:
- on Linux or Mac, you should have one built in! This is the easy path, congrats :) Even better, `git` generally ships with these systems, so there's no installation required. Search for an application called 'Terminal' or similar
- on Linux or Mac, you should have one built in! This is the easy path, congrats :) Even better, `git` generally ships with these systems (or is a one-liner install such as `apt install git`). Search for an application called 'Terminal' or similar
- note that I don't have a Mac and have never used one. I can't guarantee that everything operates the same over there - there may be discrepancies I don't know about
- on Windows, there's two options
- [`git` for Windows](https://gitforwindows.org/) packages a Linux-like terminal with a `git` GUI. This may be slightly friendlier for people who aren't at all familiar with Linux. If choosing `git` for Windows, [see my installation instructions below](#git-for-windows)
- [`git` for Windows](https://gitforwindows.org/) packages a Linux-like terminal with a `git` GUI. This is probably the friendlier option to get started with. If choosing `git` for Windows, [see my installation instructions below](#git-for-windows)
- I use [Windows Subsystem for Linux, or WSL](https://learn.microsoft.com/en-us/windows/wsl/install), which gives you a Linux distribution within Windows. It's pretty smooth sailing at this point, but there's some idiosyncracies to conquer - like the fact that your *Windows* files and your *Linux* files are stored in different places. If choosing WSL, [see my usage notes below](#wsl)
- both of the Windows options listed work with [Windows Terminal](https://apps.microsoft.com/detail/9n0dx20hk701) which offers a nicer-looking terminal experience than the basic command prompt. If you're going to keep working with what you set up today, I recommend it!
@@ -130,7 +85,7 @@ you can open `git` for Windows via the start menu by searching for 'git bash.' I
while *installing* WSL is a single command, here's a couple notes about getting started once *inside* WSL:
- don't be concerned that you can't see anything when you type or paste your password! Since it's sensitive information, this is intentional. You'll notice this pattern a couple of times while following this walkthrough
- `Ctrl+C` and `Ctrl+V` won't work like they do on Windows. If you want to copy/paste, right-click (there won't be a context menu, it'll just happen)
- `Ctrl+C` and `Ctrl+V` won't work like they do on Windows. If you want to copy/paste, use `Shift+Ctrl+C` and `Shift+Ctrl+V`
- if you're downloading a text editor like the ones mentioned above, you'll still follow the *Windows* instructions
you'll also need to be careful of a few things regarding text editors to make them work with WSL:
@@ -401,14 +356,16 @@ let's head on over to [Codeberg](https://codeberg.org/) First off, we'll make an
now we'll make a new project using the `+` in the upper right. Choose 'New repository,' then pick a repository name. You can leave the other settings be.
with the project created, Codeberg will tell us three things we can do: clone the repository, create a new repository, or push an existing repository. We'll push an existing one.
with the project created, Codeberg will tell us three things we can do: clone the repository, create a new repository, or push an existing repository. We'll push an existing one. Codeberg says we can do this:
```sh
git remote add origin https://codeberg.org/inherentlee/testing.git
git remote add origin https://codeberg.org/inherentlee/git-intro.git
git push -u origin main
```
first, we'll add a remote. Across from the project title, we should see a button that says `Code` with a dropdown indicator. It'll offer a few choices, the first two being SSH and HTTPS. I'll talk about SSH in a bit, but let's try HTTPS first. Copy that URL; we're about to use it in a command.
ok, let's break that down.
first, we'll add a remote. Across from the project title, we should see a button that says `Code` with a dropdown indicator. It'll offer a few choices, the first two being SSH and HTTPS. I'll talk about SSH in a bit, but let's try HTTPS first. Copy that URL; we're about to use it in a command. (You can also directly copy from the instructions we read above, but those won't be available after you've added code to the Codeberg project.)
> tip: the remote can be named whatever you want! Traditionally, it's called `origin`, but if it's easier for you to remember, you might call it `codeberg` or maybe `remote`
@@ -479,7 +436,7 @@ running `ssh-keygen` will take us through a series of prompts. Assuming we don't
when you choose a passphrase, *write it down*. If you lose it, there is no recourse. You will have to generate a new SSH key.
after generation, we will have two files at the location specified by the tool (or the custom location we chose). Generally, that's the folder `.ssh` in our home directory. If we navigate to that directory (`cd $HOME/.ssh`) and look at the files (`ls`), we'll see files named `id_rsa` and `id_rsa.pub`. The one that ends with `.pub` is the *public* key.
after generation, we will have two files at the location specified by the tool (or the custom location we chose). Generally, that's the folder `.ssh` in our home directory. If we navigate to that directory (`cd $HOME/.ssh`) and look at the files (`ls`), we'll see files named `id_rsa` and `id_rsa.pub` (or maybe `id_ed25519` and `id_ed25519.pub` or something else). The one that ends with `.pub` is the *public* key.
#### an alias...
@@ -535,7 +492,7 @@ in order for all this to be useful, we need to tell Codeberg about our SSH key.
### `git push`, take two
we can now call `git push` again and again now without having to repeat our credentials every time. We can also call `git pull` for our private repositories.
whether we're using HTTPS or SSH, we can now call `git push` again and again now without having to repeat our credentials every time. We can also call `git pull` for our private repositories.
## summary
@@ -1,5 +1,6 @@
---
title: comparing text editors
layout: post-with-toc.njk
image:
src: 2026/horsetail.jpg
alt: "Image unrelated to post. Close up on a horsetail plant's stem, with many small needle-like leaves emerging from all sides of the circular stem at each segmented joint."
@@ -1,5 +1,6 @@
---
title: screen reader optimizations
layout: post-with-toc.njk
image:
src: 2026/crow.jpg
alt: "Image unrelated to post. A crow poses on driftwood against a whitish sky."
@@ -1,5 +1,6 @@
---
title: eleventy lessons
layout: post-with-toc.njk
image:
src: 2026/hellebore.jpg
alt: Image unrelated to post. Close up on a pale green hellebore flower.
@@ -1,5 +1,6 @@
---
title: accessible image modals
layout: post-with-toc.njk
image:
src: 2026/snacking-seagull.jpg
alt: Image unrelated to post. A seagull floating in the water with a starfish hanging out of eir mouth.
@@ -10,7 +11,7 @@ tags:
Recently I've been working on a single-page digital rendition of a zine complete with many hand-drawn images. The author wanted to be able to bring images up to a full-screen view, to either zoom in or to put the whole enlarged image on one screen with no scrolling. It was a real struggle to find resources on how to do this in an accessible manner, so I'm writing up what I did.
> Fair warning: This solution is likely imperfect.
> Fair warning: this solution is likely imperfect.
## the `dialog` element
+1
View File
@@ -1,5 +1,6 @@
---
title: core CSS
layout: post-with-toc.njk
image:
src: 2026/core-css.png
alt: "A website mockup in dark mode with light pink accents. Everything is filler text such as the title 'This is my cool website', headers reading things like 'This is an h1', nav items 'Nav item 1', etc. There is a paragraph block - the opening of the Bee Movie - and part of an image visible - a screencap of the music video for Never Gonna Give You Up by Rick Astley."
@@ -1,5 +1,6 @@
---
title: visual site builders and accessibility
layout: post-with-toc.njk
image:
src: 2026/roses.jpg
alt: Image unrelated to post. Two peach-colored roses, the farther away one a bit out of focus.
@@ -71,6 +72,8 @@ Want to just see the final ranking? Pop down to the [summary](#summary).
[Framer](https://framer.com) is a full-featured site designer with a built-in CMS. It offers generative AI features.
I have written [further thoughts on Framer accessibility](/framer-accessibility) as part of a more in-depth review.
| Factor | Notes | Score |
|---|---|---|
| Semantic HTML | Tags can be set per-element in the "Accessibility" section of the right-hand pane. Takes work, but is doable with care. | 2 |
@@ -135,11 +138,11 @@ Want to just see the final ranking? Pop down to the [summary](#summary).
|---|---|---|
| Semantic HTML | Template tested uses somewhat reasonable semantic HTML. Choice of what is considered a heading is a bit curious | 2 |
| Keyboard navigation | Template tested has custom tab focus styling. Cannot be further edited, but custom that fits the theme is pretty standout. Skip link included in at least some templates. | 3 |
| Reading order | Imperfect and can't be edited by user. Block-based layout is a little too freeform to ensure proper reading order, so the user should be careful where they add things. Early testing indicates that reading order is determined by the *first* place a block is placed, and is never re-assessed by the builder. | 1 |
| Text alternatives | Supported. | 3 |
| Reading order | Imperfect and can't be edited by user. Block-based layout is a little too freeform to ensure proper reading order, so the user should be careful where they add things. It's a little unclear where the reading order follows from, because it doesn't always map to the blocks. | 1 |
| Text alternatives | Supported, but not for everything - for example event pictures don't support alt text. | 2 |
| Color | Dark mode requires custom code or a plugin and seems *extremely* painful to accomplish. | 1 |
| Other | This isn't an accessibility consideration, but *christ* is Squarespace a pain to work with. | 1 |
| | | **11** |
| | | **10** |
## Startup
@@ -240,10 +243,10 @@ Overall, I explored 11 builders, couldn't test 1 due to OS restrictions, and hav
| Startup | 13 |
| Blocs** | 12 |
| Framer* | 12 |
| Squarespace* | 11 |
| Univer.se | 11 |
| Cowsites | 10 |
| Showit | 10 |
| Squarespace* | 10 |
| Wobble Web | 10 |
| Kiki | 9 |
| mmm.page | 9 |
@@ -1,5 +1,6 @@
---
title: leatherworking zine
layout: post-with-toc.njk
image:
src: 2026/leatherworking-zine.jpg
alt: "3 copies of the same zine with different colored cardstock covers. The cover reads 'Leatherworking Tools' and lists myself as the author. Surrounding the text are many small icons of tools and explanatory diagrams. The text is dark teal and the icons are dark pink."
@@ -7,10 +8,11 @@ tags:
- gallery
- zine
- leather
draft: true
---
This page contains textual representation of and supplementary material for my Leatherworking Tools zine (purchase link to be added in the future), including links to all tools and additional information as needed.
This page contains textual representation of and supplementary material for my Leatherworking Tools zine, including links to all tools and additional information as needed.
The Leatherworking Tools zine has been created for [FediZineFest 2026-2027](/fedizinefest-2026-2027) and will be part of the physical and digital bundles. For digital material, there will be a home-printable version and a version for reading on digital devices. If you want the delightfully illustrated zine itself, [buy a bundle now](https://ko-fi.com/inherentlee/shop/fedizinefest2026_2027).
## On tool links
@@ -1,8 +1,9 @@
---
title: framer accessibility
layout: post-with-toc.njk
image:
src: 2026/framer.png
alt: "A screenshot of the Framer projects page showing part of the tile for a very rudimentary project titled Accessibility Test. It has a huge title that just reads Title, a basic form, and some pictures of my dog as notable features."
src: 2026/feather.jpg
alt: "Image unrelated to post. A very frail and wispy feather with variegated white and brown markings on top of pine-needle-covered ground."
tags:
- reference
- software
@@ -0,0 +1,11 @@
---
title: fediZineFest 2026-2027
image:
src: 2026/fedizinefest.png
alt: the logo of FediZineFest 2026-2027 which is a 4 by 4 grid of blocky letters reading fedi zine fest 26-27, randomly colored with the 26-27 palette.
tags:
- reference
- zine
---
FediZineFest returns for for its third run in 2026-2027. View the [FediZineFest site](https://fedizinefest.fyi), or [buy zine bundles](https://ko-fi.com/inherentlee/shop/fedizinefest2026_2027).
+55
View File
@@ -0,0 +1,55 @@
---
title: intro to the fediverse
layout: post-with-toc.njk
image:
src: 2026/madrone-bark.jpg
alt: "Image unrelated to post. A close up shot of the curling, shedding bark of the madrone tree. The shedding bark is a beautiful rusty brown, and the tree underneath light green."
tags:
- reference
---
this is a casual introduction to the fediverse (mastodon et al.) I wrote for a friend. I have shared it a few times, so I'm putting it here for ease of reference.
## general
the general style of fedi is microblogging (and sometimes more macroblogging). There's posts (image/video/audio and polls supported) and hashtags. Depending on your server, your post character limit will vary - some servers allow posts as long as you would ever want, but servers that haven't customized their post limit will be at 500 if I recall correctly. My favorite features of fedi are a) it is not corporate-run and b) there are **no ads!**
usernames are @user@server. Your server determines things like your post limit, what your UI looks like, who your mods are, and what rules you have to follow. Most of the UIs are pretty similar, so don't worry about that - just know that if you hop servers the interface may be a new color or have a few small changes. (You can also on mobile use an app - I don't recommend the "main" mastodon app. I use tusky on android and like it. Idk about apple, maybe ask for recs.)
## servers
all servers can, in theory, talk to each other. It's like email, using gmail doesn't mean you can only communicate with other gmail users. **However,** in practice, some servers have "defederated" from others, or have limitations in place that mean you'll review notifications from people on that server before accepting them. "Defederation" basically just means blocking - when two servers are connected, we say they are "federated" - this is where the "fed" part of "fediverse" comes from. (Mastodon, on the other hand, is just one of many apps that make up the fediverse.)
by and large, all (good) servers have defederated from the really trashy ones that host bigoted shit. But there's some borderline cases. For example, the "main" mastodon server run by the people who develop mastodon - mastodon.social - is huge and has signups totally open to anyone with no review. That means it is very vulnerable to waves of spam or rather unfriendly content. Because of this, some very solid servers consider limiting or blocking mastodon.social (or already have) despite its relevance as a huge presence in the fediverse.
because of the size, I would **never** recommend signing up with mastodon.social. Your moderation experience is likely to be **terrible**. Being on a smaller server allows you to have a more personal relationship with your mods!
speaking of your mods, they are usually moderating and paying for the server at no cost to the users, and it's good practice to chuck them some change every once and a while.
## moving between servers
you can migrate between servers, and your old account will point visitors over to your new account - but be aware that **your posts don't migrate with you**. This is very annoying for many people. The posts won't go away (they're still attached to the old account), but you won't be able to continue to edit them or see notifications for them. If you're really attached to a particular post, I recommend re-making it on the new account.
## other benefits and community norms
you can edit posts! You can pin posts to your profile! And if you're invested in digital privacy, you can set a deletion timeline for your posts (with granular settings like "posts with at least this many likes/boosts don't get deleted" and similar rules). You can also set your account up so you have to manually approve people before they can follow you (because of this, it's a good idea to fill in some basic profile info before following people - a lot of people who manually approve followers will deny requests from empty profiles).
image/video/audio content supports alt text and I highly recommend writing it, as many users won't boost posts that lack alt text. Depending on what software your server is running, you may or may not be able to set alt text for your profile/header photos - this is a newer feature that not all servers have yet, so I would recommend adding alt text for those pictures somewhere in your profile even if you are able to set it.
posts also include a content warning or subject field, and it's generally good practice to use it for sensitive topics - some people also just use it more like an actual subject field. Some common abbreviations for CWs are "mh/ph" - mental health/physical health - and "pol" - politics. Idk why people abbreviate their CWs when the character limits are often so big.
## choosing a server
choosing a server can be daunting. It's helpful to look at things like the rules and the size of the moderation team compared to the size of the userbase. The server name can be part of your choice! That's a tiny but fun benefit of unique servers. For example, I am at [flipping.rocks](https://flipping.rocks) and we love the outdoors, critters, etc. It's not as crafty of a server, but my photography and general love of nature fits in really well (and often you don't need to "fit" a server really - it's just nice to have a theme).
I generally recommend that people use their first 3-6 months looking at other servers and listening to the folks around them about whether they like their server. You may feel right at home in your starting server, or you may find something you like better, in which case you can learn how to migrate (happy to help).
## getting started
your feed will be oh so empty! There is no "algorithm" in the sense that we think of one in other corporate-run social medias. What you see is the posts/boosts of people you follow, as well as hashtags you follow, in reverse chronological order.
I recommend a few things to get started:
- make a post with the hashtag #introduction as well as #hashtags of your interests, and say hi! That lets people meet you and introduce themselves
- check out the "local" feed for your server and see who is around on there to follow
- use tools like [communitywiki.org/trunk](https://communitywiki.org/trunk) or [fedi.directory/](https://fedi.directory/) to find people based on topic
@@ -0,0 +1,339 @@
---
title: sticker vendors
layout: post-with-toc.njk
image:
src: 2026/fern-curl.jpg
alt: Image unrelated to post. The tip of a fern curling in such a way as to make a complete circle with fronds spreading outwards.
tags:
- reference
- sticker
---
I made a spreadsheet of sticker vendors so you don't have to. And also ordered a bunch of sample packs, so you don't have to (and because I get very very into doing my research, and sample packs are very cheap).
I priced out **3"x3" holographic die-cut vinyl stickers** from US-based sticker vendors at three price points: 100 (or nearest above 100), 200 (or nearest above 200), and 500. Free shipping referenced *may* require a minimum to kick in - I noted it down as free if the minimum was below the price point for 100 stickers.
I did this work because my previous vendor, DieCutStickers, had notable print issues in the last batch I bought from them, and I decided to look for a new vendor. Because of this, they will not be listed.
Got a recommendation not in this writeup? Feel free to [let me know](/contact) and I'll price them out and add them.
All sample packs ordered have been summarized and photographed with the exception of Sticker Bunnies, which has not arrived yet.
I think I have to make a weird art piece now with all these samples.
## Exclusions
Three other vendors are mentioned but will not appear in summaries: Sticker Guy, Sticker Mule, and Sticky Brand.
- Sticker Guy looks **awesome** for simple stickers (1 or maybe 2 colors printed on solid color vinyl), but holographic stickers are listed as temporarily unavailable, so I couldn't get a price quote.
- Sticker Mule's CEO is a vocal Trump supporter.
- Sticky Brand has started using generative AI marketing (this is secondhand information as I don't use instagram). Also I had a [pretty bad customer service experience](#sticky-brand).
I cannot promise that other makers do not have issues similar to Sticker Mule or Sticky Brand; this is just what I surfaced in my research.
## Summaries
### Overall summary
### Quality summary
Sticker Ninja - wow! Thick, sturdy vinyl that feels amazing. Plus loads of pretty finishes - I'm really noodling on what I could do on "Prism Party." They're not *the* cheapest, but for sets of 100 they're not awful, so they're probably my vendor of choice unless I'm buying more bulk (and 100 is my most common amount). I've ordered some new holo [hummingbirds](/hummingbird-become-ungovernable) from them as well as a design new to stickers, [big pidge](/big-pidges).
Also, they sent me a "queer joy is a revolution" sticker in the sample pack - that one actually went on my laptop. Also also, they seem like they have a great approach to work - they close their ordering on Sundays so they don't come in absolutely slammed on Mondays. I respect that a lot.
I was also impressed with StickerApp's variety of materials and product types, and their pricing is very competitive. If you want to save a little, they seem solid. Also, I just got the [FediZineFest](/fedizinefest-2026-2027) stickers through them, and they are *fast*.
### Pricing summary
Death by Stickers stands out as *by far* the cheapest option for ~100 or maybe less, and still fairly competitive for ~200, though bumped out of the top slot by StickerGiant (however, worth noting that I couldn't get Death by Stickers samples). If you want bulk, Brick City Printing comes out ahead - and they are union!
If you want really small lots, maybe try Sticker Bunnies - their pricing model is a flat per-sticker rate regardless of order size. Be aware, however, that they only take orders via email, so it may be a bit more of an involved process than most.
It is of course worth it with many vendors to join their email list and wait for deals. These are the standard prices and do not account for sales or discounts.
### Ease of peeling
Brick City Printing, StandOut Stickers, Sticker Junkie, StickerApp, and StickerGiant offer split backs.
Bend Print Co. offers split backs or peel tabs for an increased sticker price. Sticker Robot mentions split backs in their FAQ, but sticker options only support peel tabs, also for an increased price. Vinyl Disorder offers peel tabs for an increased price.
Sticker Ninja and StickerBros do not offer split backs.
Busy Beaver, Death by Stickers, and Sticker Bunnies do not specify.
## Pricing tables
### Price point 1: 100
Per 100 (unless noted otherwise).
| Vendor | Per sticker | Quantity |
| --- | --- | --- |
| Death by Stickers | $0.81 | |
| Sticker Bunnies | $0.90 | |
| StickerApp | $0.98 | |
| Brick City Printing | $1.05 | |
| Sticker Ninja | $1.06 | |
| Busy Beaver | $1.07 | |
| StandOut Stickers | $1.09 | |
| StickerGiant | $1.10 | 125 |
| StickerBros | $1.18 | |
| Sticker Robot | $1.27 | |
| Bend Print Co. | $1.45 | |
| Vinyl Disorder | $1.61 | |
| Sticker Junkie | n/a | No quantity ~100 offered |
### Price point 2: 200
Per 200 (unless noted otherwise).
| Vendor | Per sticker | Quantity |
| --- | --- | --- |
| StickerGiant | $0.73 | 250 |
| StickerApp | $0.77 | |
| Death by Stickers | $0.80 | |
| StandOut Stickers | $0.80 | |
| StickerBros | $0.84 | |
| Sticker Robot | $0.85 | 250 |
| Bend Print Co. | $0.88 | 250 |
| Sticker Bunnies | $0.90 | |
| Brick City Printing | $0.93 | |
| Vinyl Disorder | $0.94 | 250 |
| Sticker Ninja | $0.97 | |
| Sticker Junkie | $1.07 | |
| Busy Beaver | n/a | No quantity between 100 and 500 offered |
### Price point 3: 500
| Vendor | Per sticker |
| --- | --- |
| Brick City Printing | $0.49 |
| StickerGiant | $0.54 |
| StandOut Stickers | $0.55 |
| StickerApp | $0.56 |
| Sticker Ninja | $0.59 |
| StickerBros | $0.60 |
| Busy Beaver | $0.63 |
| Bend Print Co. | $0.65 |
| Sticker Robot | $0.65 |
| Sticker Junkie | $0.72 |
| Death by Stickers | $0.72 |
| Vinyl Disorder | $0.81 |
| Sticker Bunnies | $0.90 |
## Vendors
### Bend Print Co.
[Bend Print Co.](https://www.bendprintco.com/)
- 100 for $145.00 - $1.45/sticker
- 250 for $220.00 - $0.88/sticker
- 500 for $325.00 - $0.65/sticker
- Free shipping
- Split backs (or peel tabs) for additional cost
These are pretty thin. I'm really not sure if vinyl thickness correlates to quality, tbh, but they don't feel particularly sturdy. Still, I like the variety of fun vinyls.
(Sorry about the weird crop, I realized after I took this picture that I wanted a landscape picture not a portrait one. By then I had already peeled and stuck one of them.)
![8 sample stickers with the same Bend Print Co logo design on 8 different vinyls including glitter, chrome, 'galactic', and silver and gold holo. Each also has a small color test](/img/2026/stickers/bend-print-co.jpg)
### Brick City Printing
[Brick City Printing](https://www.brickcityprinting.com/)
Union made!
- 100 for $105.00 - $1.05/sticker
- 200 for $186.00 - $$0.93/sticker
- 500 for $245.00 - $0.49/sticker
- Free shipping
- Split backs
They don't have a ton of options - seems like just white or holo vinyl - but their quality is good! The stickers feel decently sturdy.
![Some sample stickers in both standard vinyl and holo, including 'stickers the cat,' some pride flag hearts overlaid with St. Louis flag iconography, and a riff on the Black Flag logo done with bricks.](/img/2026/stickers/brick-city-printing.jpg)
### Busy Beaver
[Busy Beaver](https://www.busybeaver.net/)
- 100 for $107.00 - $1.07/sticker
- No quantity between 100 and 500 offered
- 500 for $315.00 - $0.63/sticker
- Free shipping
- Couldn't find information regarding split backs
Apparently you have to call Busy Beaver... on the phone... to get samples. Nah. Not worth.
### Death by Stickers
[Death by Stickers](https://deathbystickers.com/)
- 100 for $81.00 - $0.81/sticker
- 200 for $160.00 - $0.80/sticker
- 500 for $361.25 - $0.72/sticker
- Free shipping for orders over $100.00
- Couldn't find information regarding split backs
Death by Stickers offers sample packs, but they're sold out currently.
### StandOut Stickers
[StandOut Stickers](https://www.standoutstickers.com/)
- 100 for $109.00 - $1.09/sticker
- 200 for $160.00 - $0.80/sticker
- 500 for $272.50 - $0.55/sticker
- $10.00 for template help - they looked to have pretty stringent art requirements
- Free shipping
- Split backs
StandOut Stickers doesn't offer samples as far as I could find.
### Sticker Bunnies
[Sticker Bunnies](https://www.stickerbunnies.com/)
Sticker Bunnies prices by sticker size and material - **not** quantity. 3"x3" holo die cut stickers are $0.90 per sticker - no bulk pricing. They also only accept orders via email (other than sample packs).
I am waiting on a Sticker Bunnies sample pack at current. I have no ETA yet.
### Sticker Guy
[Sticker Guy](https://stickerguy.com/)
I did not price out Sticker Guy as I could not find pricing information for holographic stickers. I did find one table that listed holo stickers as temporarily unavailable. Still, they look like a great option for simpler sticker needs.
### Sticker Junkie
[Sticker Junkie](https://www.stickerjunkie.com/)
- No quantity ~100 offered
- 200 for $214.00 - $1.07/sticker
- 500 for $360.00 - $0.72/sticker
- Free shipping
- Split backs
These feel pretty quality. They're not too flimsy, and the colors are vibrant. The split backs make them easy to peel.
![An array of colorful stickers, most featuring the sticker junkie logo of a monkey head smoking a cigar. There's a couple color sample stickers as well that show the full range of colors on glossy and matte stickers.](/img/2026/stickers/sticker-junkie.jpg)
### Sticker Mule
[CEO is a big Trump supporter](https://www.motherjones.com/politics/2026/09/anthony-constantino-donald-trump-sticker-mule-congress-stefanik/).
### Sticker Ninja
[Sticker Ninja](https://stickerninja.com/)
- 100 for $105.81 - $1.06/sticker
- 200 for $193.33 - $0.97/sticker
- 500 for $293.91 - $0.59/sticker
- Free shipping
- No split backs
Sticker Ninja has an *amazing* amount of variety when it comes to glitter, shimmer, mirror finish, and more - not just your standard holographic. I stuck one to my laptop, and while I can't vouch for longevity at this time, it feels *quality* - nice sturdy vinyl.
![Many stickers laid out on a desk, mostly with some variety of cutesy ninja iconography. There are a lot of shimmery, shiny, or glittery ones. A couple say things like 'queer joy is a revolution' or 'love beyond the binary'.](/img/2026/stickers/sticker-ninja.jpg)
### Sticker Robot
[Sticker Robot](https://stickerobot.com/)
- 100 for $127.00 - $1.27/sticker
- 250 for $212.00 - $0.85/sticker
- 500 for $327.00 - $0.65/sticker
- Free shipping
- FAQ says split backs can be added, but I didn't see this option; peel tabs can be added for additional cost
Sticker Robot does both silkscreen and digital stickers. The silkscreen ones seem really nice, but the digital holo stickers are what I priced out and looked at. They seem decent, but nothing outstanding - I'm kinda guessing the silkscreen ones might be more standout. Silkscreen stickers offer printed backs as well. One of the samples is a "business card sticker" which is kinda neat.
In the picture, silkscreen stickers are on the left and digital on the right.
![Some copies of the same two robot designs in different sticker materials as well as an info sheet.](/img/2026/stickers/sticker-robot.jpg)
### StickerApp
[StickerApp](https://stickerapp.com)
- 100 for $98.00 - $0.98/sticker
- 200 for $153.00 - $0.77/sticker
- 500 for $280.00 - $0.56/sticker
- Free shipping
- Split backs
I'm pretty impressed by the variety here, though the stickers that aren't specifically their "heavy duty" material feel a smidge flimsy. Their special finishes are fun and varied. They also offer a business card sticker option - though I personally wouldn't want a business card that thin...
They have several sample packs - sticker materials (image 1, left; image 2), label materials (image 1, right), and product types (image 3).
![A two-image collage showing all material samples laid out for both stickers - ranging from standard vinyl to finishes like 'pixie dust' and 'matte mirror' - and labels - five simpler varieties.](/img/2026/stickers/stickerapp-materials.jpg)
![9 color test stickers for a variety of special finishes, matte and glossy holo and mirror, and clear.](/img/2026/stickers/stickerapp-colors.jpg)
![A dozen or so varied stickers showing off business cards, die cut, special finishes, kiss cut, hang tag, heavy duty, and more, along with the packaging which has a sticker type key printed on it.](/img/2026/stickers/stickerapp.jpg)
### StickerBros
[StickerBros](https://www.stickerbros.com/)
- 100 for $118.00 - $1.18/sticker
- 200 for $168.00 - $0.84/sticker
- 500 for $300.00 - $0.60/sticker
- Free shipping
- No split backs
I am decently impressed with the quality of StickerBros, and particularly with their embossed and heavy duty embossed stickers. I haven't seen embossed stickers in any of the other sample packs! Despite not having split backs, I found them pretty easy to peel because there is an ever-so-slightly larger edge of backing paper surrounding the sticker than some others.
However, they were *really* slow to get my sample pack out. The shipping label was created more than 2 weeks before the package was delivered to USPS. Sample packs don't require any printing time, so I'm not sure why there was such a delay.
![A dozen or so stickers in fun design showing off different styles such as matte chrome, glitter, glow-in-the-dark, embossed, and more.](/img/2026/stickers/stickerbros.jpg)
### StickerGiant
[StickerGiant](https://www.stickergiant.com/)
- 125 for $137.50 - $1.10/sticker
- 250 for $182.50 - $0.73/sticker
- 500 for $270.00 - $0.54/sticker
- Free shipping
- Split backs
StickerGiant has a very comprehensive and informative sample pack showcasing a wide variety of materials ranging from the holo die cuts I priced out to kraft paper labels. They also include color samples on their materials for reference.
![An array of stickers on a table. All stickers are either labeled with their materials or their design is fully dedicated to describing their materials. There are many labels and die cut stickers.](/img/2026/stickers/sticker-giant.jpg)
![CMYK swatches on glossy and matte samples of holo, white, and clear, as well as on kraft paper.](/img/2026/stickers/sticker-giant-colors.jpg)
### Sticky Brand
Sticky Brand has apparently gone pretty hard in on generative AI marketing. I priced them out (and ordered some stickers due to a *deep* discount\*) before learning this, so I'm noting prices down for reference, but I don't recommend them.
- 100 for $118.13 - $1.18/sticker
- 250 for $236.25 - $0.95/sticker
- 500 for $393.75 - $0.79/sticker
- USPS ground shipping rates or thereabouts
- Couldn't find information regarding split backs
\*Or well, I *thought* I ordered stickers. Here's what happened:
I ordered a sample pack. I saw the discount on 100 holo stickers, realized I should have gone for that, and put in to cancel my sample pack, then ordered the 100 holo PLUS sample pack so I wasn't paying shipping twice. They then canceled my *second* order, of the 100 holo and sample pack, rather than my first. And now it's been 2 or 3 weeks and I still don't have a sample pack, because order 1 is seemingly stuck in printing. Their customer service *sucks*, too - I have been talking to them about this and they have gotten details wrong, failed to read the information I am giving them, and now have canceled my sample order without me asking for that. So, no samples, screw them, will not be putting in a new order.
### Vinyl Disorder
[Vinyl Disorder](https://vinyldisorder.com/)
- 100 for $161.22 - $1.61/sticker
- 250 for $236.25 - $0.94/sticker
- 500 for $406.35 - $0.81/sticker
- $5.00-$6.00 for shipping orders under $250.00; free shipping over $250.00 cannot be combined with other discounts
- Peel tabs for 25% extra
These are decent, but the price is a real deterrant. I think if you're getting more basic stickers their pricing *might* be more competitive - they are clear that holo and other premium materials are marked up 150% - but without doing those pricing tables I can't be sure. That said, I think their "cracked ice holo" is pretty cool.
![The same logo in 11 materials, plus a rectangular chunk of holo sticker vinyl. There's even such oddities as glow in the dark, view through (perforated so the design is not fully opaque), and static cling.](/img/2026/stickers/vinyl-disorder.jpg)
## Resources
- [Some Free Sticker Designs and Where to Print Them](https://docpop.org/2025/10/some-free-sticker-designs-and-where-to-print-them/)
@@ -0,0 +1,13 @@
---
title: plaid dishtowels
image:
src: 2026/plaid-dishtowels.jpg
alt: "A two image collage. Image one shows one navy, beige, and yellow towel in a simple plaid laid out on a table with two more folded on top. Image two is a close up of the plaid."
tags:
- gallery
- weaving
---
Yarn: [Circulo Anne Weaving Yarn](https://woolery.com/products/circulo-anne-weaving-yarn).
3 towels. Woven area roughly 12"x24". Hemstitched.