Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20f87d209f | ||
|
|
cd6d75fa48 | ||
|
|
230e86bf7c | ||
|
|
32b055f328 | ||
|
|
438d1a67e2 | ||
|
|
cd7f525bac | ||
|
|
6933f11630 | ||
|
|
62dab04ee9 | ||
|
|
e60d191e09 | ||
|
|
efe79ff639 | ||
|
|
4be20cccb3 | ||
|
|
aba74f280e | ||
|
|
0125216d96 | ||
|
|
6ee81d8784 | ||
|
|
2bfe616195 | ||
|
|
f9d8123b9d | ||
|
|
c7ef4c701a | ||
|
|
d8f3ea3430 | ||
|
|
a9b96e567e | ||
|
|
bc1a51a4d5 | ||
|
|
16c3ef1e26 | ||
|
|
efe153191a | ||
|
|
8c2c2231ac | ||
|
|
62b1e448ea | ||
|
|
d53198e1aa | ||
|
|
c6ec6b8f48 | ||
|
|
75909355ba | ||
|
|
d5660455bd | ||
|
|
7df4c1ff8e | ||
|
|
d6c2bb9aa9 | ||
|
|
604a6787f4 | ||
|
|
980cd0b3a6 | ||
|
|
5be42a4ff3 | ||
|
|
25c8e56a76 | ||
|
|
8752eeb904 | ||
|
|
b1135beddb | ||
|
|
84160a0574 | ||
|
|
557308f3f9 | ||
|
|
382419e6d6 | ||
|
|
66df77c32c | ||
|
|
a3e0ba5037 | ||
|
|
51d836c71b | ||
|
|
67e70e68ab | ||
|
|
b31e683786 | ||
|
|
1bb26176ba | ||
|
|
a000d1c1b9 | ||
|
|
cf26b06e3d | ||
|
|
5acda53f58 | ||
|
|
f2bc045735 | ||
|
|
3b1c5ffa88 | ||
|
|
0882fcda41 | ||
|
|
7d042abe1d | ||
|
|
f5bbda1f14 | ||
|
|
9999775e44 | ||
|
|
463cabe793 | ||
|
|
4aa7516cb9 | ||
|
|
f49a7faa4d | ||
|
|
2e26cefab2 | ||
|
|
870a6e5e0f | ||
|
|
be364d7644 | ||
|
|
06bcfc1522 | ||
|
|
dd1943bcdd | ||
|
|
bfa91ea19f | ||
|
|
b4fbeffc41 | ||
|
|
25cf8a38ec |
No files matched your search
@@ -1,6 +1,9 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
.job-details a {
|
||||
font-size: 1rem;
|
||||
font-family: var(--font-family);
|
||||
}
|
||||
|
||||
.job p {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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/)
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 5.6 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 240 KiB |
|
After Width: | Height: | Size: 234 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 341 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 524 KiB |
|
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 351 KiB |
|
Before Width: | Height: | Size: 3.0 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 428 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 447 KiB |
|
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 1001 KiB |
|
After Width: | Height: | Size: 538 KiB |
|
Before Width: | Height: | Size: 372 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 292 KiB |
|
After Width: | Height: | Size: 391 KiB |
|
After Width: | Height: | Size: 411 KiB |
|
After Width: | Height: | Size: 397 KiB |
|
After Width: | Height: | Size: 457 KiB |
|
After Width: | Height: | Size: 383 KiB |
|
After Width: | Height: | Size: 395 KiB |
|
After Width: | Height: | Size: 458 KiB |
|
After Width: | Height: | Size: 517 KiB |
|
After Width: | Height: | Size: 375 KiB |
|
After Width: | Height: | Size: 598 KiB |
|
After Width: | Height: | Size: 580 KiB |
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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."
|
||||
|
||||
@@ -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,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."
|
||||
|
||||
@@ -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,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.
|
||||
|
||||
@@ -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!
|
||||
|
||||
|
||||
@@ -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,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).
|
||||
@@ -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,337 @@
|
||||
---
|
||||
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
|
||||
|
||||
### 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.)
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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).
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||