Compare commits

..
246 Commits
Author SHA1 Message Date
inherentlee 230e86bf7c Merge branch 'main' into stickers
continuous-integration/drone/push Build is passing
2026-10-21 15:23:12 -07:00
inherentlee 32b055f328 note re samples 2026-10-21 15:21:37 -07:00
inherentlee 438d1a67e2 stickerbros 2026-10-21 15:15:12 -07:00
inherentlee cd7f525bac plaid dishtowels
continuous-integration/drone/push Build is passing
2026-10-19 13:09:35 -07:00
inherentlee 6933f11630 stickerapp 2026-10-17 19:35:31 -07:00
inherentlee 62dab04ee9 more about sticky brand ew 2026-10-15 11:24:07 -07:00
inherentlee e60d191e09 sticker update 2026-10-14 13:45:54 -07:00
inherentlee efe79ff639 Merge branch 'main' into stickers 2026-10-14 10:39:12 -07:00
inherentlee 4be20cccb3 border radius for blockquotes
continuous-integration/drone/push Build is passing
2026-10-14 10:38:57 -07:00
inherentlee aba74f280e some tweaks to git post
continuous-integration/drone/push Build is passing
2026-10-14 08:48:25 -07:00
inherentlee 0125216d96 add more aout remote commands
continuous-integration/drone/push Build is passing
2026-10-14 08:43:19 -07:00
inherentlee 6ee81d8784 small updates to git post
continuous-integration/drone/push Build is passing
2026-10-14 08:28:24 -07:00
inherentlee 2bfe616195 update fedizinefest
continuous-integration/drone/push Build is failing
2026-10-13 08:31:32 -07:00
inherentlee f9d8123b9d add header ids
continuous-integration/drone/push Build is passing
2026-10-13 08:30:50 -07:00
inherentlee c7ef4c701a sticker updates 2026-10-13 07:45:30 -07:00
inherentlee d8f3ea3430 add stickerapp 2026-10-10 11:16:25 -07:00
inherentlee a9b96e567e add bend print co samples 2026-10-09 15:46:26 -07:00
inherentlee bc1a51a4d5 add district dharma testimonial
continuous-integration/drone/push Build is passing
2026-10-06 09:52:56 -07:00
inherentlee 16c3ef1e26 audit fix 2026-10-06 09:52:44 -07:00
inherentlee efe153191a another tiny mobile tweak
continuous-integration/drone/push Build is passing
2026-10-06 09:03:41 -07:00
inherentlee 8c2c2231ac some size tweaks for headers on mobile
continuous-integration/drone Build is passing
2026-10-05 13:38:48 -07:00
inherentlee 62b1e448ea Merge branch 'main' into stickers 2026-10-05 13:31:36 -07:00
inherentlee d53198e1aa add sticker junkie, sticker robot, and vinyl disorder
continuous-integration/drone/push Build is running
2026-10-05 13:29:44 -07:00
inherentlee c6ec6b8f48 make urls easier to read font
continuous-integration/drone/push Build is passing
2026-10-04 11:17:32 -07:00
inherentlee 75909355ba couple of notes about samples
continuous-integration/drone/push Build is passing
2026-10-02 17:28:05 -07:00
inherentlee d5660455bd add drone trigger that requires main branch
continuous-integration/drone/push Build is passing
2026-10-02 12:59:15 -07:00
inherentlee 7df4c1ff8e more about sticker bunnies
continuous-integration/drone/push Build is passing
2026-10-02 12:54:06 -07:00
inherentlee d6c2bb9aa9 wording
continuous-integration/drone/push Build is passing
2026-10-02 09:57:23 -07:00
inherentlee 604a6787f4 sticker bunnies
continuous-integration/drone/push Build is passing
2026-10-01 18:55:54 -07:00
inherentlee 980cd0b3a6 update with stickergiant info
continuous-integration/drone/push Build is passing
2026-10-01 13:05:34 -07:00
inherentlee 5be42a4ff3 vinyl disorder and a few details 2026-10-01 08:53:36 -07:00
inherentlee 25c8e56a76 more re sticker ninja
continuous-integration/drone/push Build is passing
2026-09-30 17:44:29 -07:00
inherentlee 8752eeb904 sticker ninja details
continuous-integration/drone/push Build is passing
2026-09-30 17:41:40 -07:00
inherentlee b1135beddb update squarespace more
continuous-integration/drone/push Build is passing
2026-09-30 16:52:53 -07:00
inherentlee 84160a0574 update squarespace
continuous-integration/drone/push Build is passing
2026-09-30 16:51:12 -07:00
inherentlee 557308f3f9 sticker post wip
continuous-integration/drone/push Build is failing
2026-09-29 14:20:22 -07:00
inherentlee 382419e6d6 add toc to fediverse post
continuous-integration/drone/push Build is passing
2026-09-29 14:19:35 -07:00
inherentlee 66df77c32c remove old shop links 2026-09-29 10:01:11 -07:00
inherentlee a3e0ba5037 fedi intro post
continuous-integration/drone/push Build is passing
2026-09-28 09:38:52 -07:00
inherentlee 51d836c71b add to wong foo
continuous-integration/drone/push Build is passing
2026-09-23 20:25:08 -07:00
inherentlee 67e70e68ab remove scroll-margin-top since navbar is no longer sticky
continuous-integration/drone/push Build is passing
2026-09-23 19:29:19 -07:00
inherentlee b31e683786 i honestly don't know why this was working without this but i'm adding it just in case
continuous-integration/drone/push Build is passing
2026-09-23 14:47:53 -07:00
inherentlee 1bb26176ba tweak some breakpoints
continuous-integration/drone/push Build is passing
2026-09-21 16:08:11 -07:00
inherentlee a000d1c1b9 i'm not happy with this but it's better for width
continuous-integration/drone/push Build is passing
2026-09-21 15:55:44 -07:00
inherentlee cf26b06e3d update tree styling to box method
continuous-integration/drone/push Build is passing
2026-09-21 15:40:27 -07:00
inherentlee 5acda53f58 publish leatherworking zine with link to fzf post
continuous-integration/drone/push Build is passing
2026-09-21 13:55:29 -07:00
inherentlee f2bc045735 fedizinefest post
continuous-integration/drone/push Build is passing
2026-09-21 13:49:51 -07:00
inherentlee 3b1c5ffa88 SR fix
continuous-integration/drone/push Build is passing
2026-09-21 12:48:45 -07:00
inherentlee 0882fcda41 better images
continuous-integration/drone/push Build is passing
2026-09-21 12:46:38 -07:00
inherentlee 7d042abe1d fuck spacing and tabs all my homies hate spacing and tabs
continuous-integration/drone/push Build is passing
2026-09-21 12:27:30 -07:00
inherentlee f5bbda1f14 small edits
continuous-integration/drone/push Build is passing
2026-09-21 12:23:53 -07:00
inherentlee 9999775e44 tree style post
continuous-integration/drone/push Build is passing
2026-09-21 12:19:01 -07:00
inherentlee 463cabe793 update framer post pic 2026-09-21 12:18:48 -07:00
inherentlee 4aa7516cb9 fix hanging indent 2026-09-21 12:18:13 -07:00
inherentlee f49a7faa4d more contrasting focus outlines for toc
continuous-integration/drone/push Build is passing
2026-09-21 08:38:59 -07:00
inherentlee 2e26cefab2 tiny tweak to prevent gap
continuous-integration/drone/push Build is passing
2026-09-20 19:04:19 -07:00
inherentlee 870a6e5e0f prevent blockquotes interferring with toc
continuous-integration/drone/push Build is passing
2026-09-20 19:01:54 -07:00
inherentlee be364d7644 it's important that the comment have a slant rhyme
continuous-integration/drone/push Build is passing
2026-09-20 18:50:52 -07:00
inherentlee 06bcfc1522 toc tree styling
continuous-integration/drone/push Build is passing
2026-09-20 18:46:09 -07:00
inherentlee dd1943bcdd li line height matches p line height
continuous-integration/drone/push Build is passing
2026-09-20 15:13:17 -07:00
inherentlee bfa91ea19f big ol toc update
continuous-integration/drone/push Build is passing
2026-09-20 15:07:49 -07:00
inherentlee b4fbeffc41 new font omg
continuous-integration/drone/push Build is passing
2026-09-19 17:40:10 -07:00
inherentlee 25cf8a38ec fix sitemap size 2026-09-18 12:30:23 -07:00
inherentlee 5724f509a0 update resume
continuous-integration/drone/push Build is passing
2026-09-18 08:48:30 -07:00
inherentlee fe6956aaa3 mark down framer for complex keyboard interactions
continuous-integration/drone/push Build is passing
2026-09-17 17:59:08 -07:00
inherentlee 846ef7538f note re dropdowns in framer
continuous-integration/drone/push Build is passing
2026-09-17 17:57:33 -07:00
inherentlee f8aacdc85d note about dropdowns
continuous-integration/drone/push Build is passing
2026-09-17 17:04:46 -07:00
inherentlee 776218805a more notes about framer
continuous-integration/drone/push Build is passing
2026-09-17 12:03:26 -07:00
inherentlee 91c7f14113 add instructions just for completeness
continuous-integration/drone/push Build is passing
2026-09-17 08:18:27 -07:00
inherentlee 8bcdaeff52 idk these notes were wrong i guess 2026-09-17 08:16:38 -07:00
inherentlee 3e766eb519 find a few more target=_blank bits
continuous-integration/drone/push Build is passing
2026-09-17 08:02:47 -07:00
inherentlee 2ad41daa2e make leatherworking zine a draft
continuous-integration/drone/push Build is passing
2026-09-17 07:56:09 -07:00
inherentlee 7b248c24b9 Merge branch 'leatherworking-zine' 2026-09-17 07:55:34 -07:00
inherentlee abec70c655 add missing page 2026-09-17 07:55:26 -07:00
inherentlee 2d35768db9 preliminary squarespace findings
continuous-integration/drone/push Build is passing
2026-09-16 11:06:40 -07:00
inherentlee 30498307c8 npm audit fix
continuous-integration/drone/push Build is passing
2026-09-15 18:05:04 -07:00
inherentlee 953f651c4f draft
continuous-integration/drone/push Build is passing
2026-09-15 14:47:53 -07:00
inherentlee ee0a39333d package-lock.json update
continuous-integration/drone/push Build is passing
2026-09-14 18:17:10 -07:00
inherentlee a2fd1cb797 package.lock updates? 2026-09-14 18:11:59 -07:00
inherentlee 9889cf4adb fix og metadata
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is failing
2026-09-14 10:38:11 -07:00
inherentlee a3b9d20dfb small style and word fixes to framer accessibility 2026-09-12 10:53:25 -07:00
inherentlee 1a0898c214 update guestbook page to remove embed
continuous-integration/drone/push Build is passing
2026-09-12 10:50:34 -07:00
inherentlee 07bb31111f remove target=blank etc 2026-09-12 10:48:36 -07:00
inherentlee c517bb8d69 remove keyboard shortcut on smaller screens, this could be more complex 2026-09-12 10:43:57 -07:00
inherentlee 830c1a4666 clean up search output
continuous-integration/drone/push Build is passing
2026-09-12 10:13:43 -07:00
inherentlee 1a2850ca8c fix apostrophes in browser title bar
continuous-integration/drone/push Build is passing
2026-09-11 17:53:34 -07:00
inherentlee 96e70dbd2f bit of further cleanup of pf styles
continuous-integration/drone/push Build is passing
2026-09-11 11:55:51 -07:00
inherentlee 58da634ec7 search bar timeeee 2026-09-11 11:46:47 -07:00
inherentlee d8049a1f34 update fedilearns icon
continuous-integration/drone/push Build is passing
2026-09-10 14:22:46 -07:00
inherentlee 12ae5f9a4e houndstooth dishtowels
continuous-integration/drone/push Build is passing
2026-09-10 09:58:30 -07:00
inherentlee 672a03d4e9 some tweaks to color picker
continuous-integration/drone/push Build is passing
2026-09-09 14:02:59 -07:00
inherentlee 0e46e65034 color picker yay
continuous-integration/drone/push Build is passing
2026-09-09 13:37:35 -07:00
inherentlee 782912c8a6 tweak intro content for gallery, reference, home pages
continuous-integration/drone/push Build is passing
2026-09-08 16:18:11 -07:00
inherentlee 470a84429c add link to view all tags to tag pages
continuous-integration/drone/push Build is passing
2026-09-08 16:14:35 -07:00
inherentlee 05e40f0ea7 add patchwork wallet to highlights
continuous-integration/drone/push Build is passing
2026-09-08 16:12:24 -07:00
inherentlee 35841f26fd mouse purse
continuous-integration/drone/push Build is passing
2026-09-08 16:05:29 -07:00
inherentlee 3fc4468d09 add styling to sitemap
continuous-integration/drone/push Build is passing
2026-09-08 10:49:41 -07:00
inherentlee bbcdb5ee03 i only just realized my style page didn't have code highlighting woops
continuous-integration/drone/push Build is passing
2026-09-08 10:40:24 -07:00
inherentlee d663b851c9 small margin change to lists
continuous-integration/drone/push Build is passing
2026-09-08 10:34:16 -07:00
inherentlee 4ac0441c3d framer accessibliity post
continuous-integration/drone/push Build is passing
2026-09-08 10:26:01 -07:00
inherentlee f6620e19a4 remove dead link
continuous-integration/drone/push Build is passing
2026-09-08 10:25:24 -07:00
inherentlee df9b5e4c55 add framer, gen -> generative
continuous-integration/drone/push Build is passing
2026-09-08 09:14:49 -07:00
inherentlee f4a32e5292 remove extraneous css line and add framer to builders post
continuous-integration/drone/push Build is passing
2026-09-06 09:02:49 -07:00
inherentlee 01c0bf00a2 tag edits
continuous-integration/drone/push Build is passing
2026-08-30 09:25:45 -07:00
inherentlee ff03344b81 rainbow shawl from 2023
continuous-integration/drone/push Build is passing
2026-08-30 09:09:21 -07:00
inherentlee e437febdf8 change webring button spacing
continuous-integration/drone/push Build is passing
2026-08-28 11:59:53 -07:00
inherentlee 21858e5dd3 add birder subtract bread baker
continuous-integration/drone/push Build is passing
2026-08-28 11:56:28 -07:00
inherentlee a780e7cc9e black and red journal
continuous-integration/drone/push Build is passing
2026-08-26 17:04:09 -07:00
inherentlee d0cb1cf7f5 resume updates re fedizinefest 2026-08-26 17:03:47 -07:00
inherentlee cd30f192eb REMOVE Z
continuous-integration/drone/push Build is passing
2026-08-26 16:55:20 -07:00
inherentlee d246ba3437 add og url
continuous-integration/drone/push Build is passing
2026-08-25 18:37:19 -07:00
inherentlee 7abb27739e fix tag alignment on mobile post layout
continuous-integration/drone/push Build is passing
2026-08-25 13:13:12 -07:00
inherentlee 742d2b9666 fix errors in 11ty lessons post
continuous-integration/drone/push Build is passing
2026-08-20 17:21:42 -07:00
inherentlee 3ff187ae10 add woven shawl
continuous-integration/drone/push Build is passing
2026-08-20 17:11:59 -07:00
inherentlee 0ec803b447 change modal size 2026-08-20 17:11:48 -07:00
inherentlee 1863efa802 site builders v1
continuous-integration/drone/push Build is passing
2026-08-06 11:37:38 -07:00
inherentlee 153a90fb0a better table margins 2026-08-06 11:26:14 -07:00
inherentlee 0a5d393618 update alt for table runner
continuous-integration/drone/push Build is passing
2026-08-01 08:49:50 -07:00
inherentlee 532424c953 table runner
continuous-integration/drone/push Build is passing
2026-08-01 08:44:24 -07:00
inherentlee 9b5ee21bf7 update log cabin dishtowels 2026-08-01 08:44:07 -07:00
inherentlee 33ad5815a7 atom feed stylesheet
continuous-integration/drone/push Build is passing
2026-07-29 14:56:25 -07:00
inherentlee 7a30ee3216 more dishtowel deets
continuous-integration/drone/push Build is passing
2026-07-26 15:08:33 -07:00
inherentlee 88562bd766 log cabin dishtowels
continuous-integration/drone/push Build is passing
2026-07-26 14:50:07 -07:00
inherentlee 75d3a12bdc update signal
continuous-integration/drone/push Build is passing
2026-07-01 14:47:59 -07:00
inherentlee f488a6aa54 remove draft flag
continuous-integration/drone/push Build is passing
2026-06-30 16:28:29 -07:00
inherentlee 8c135a09c7 core css 2026-06-30 16:28:05 -07:00
inherentlee 7ede08fd43 fix categories on two posts
continuous-integration/drone/push Build is passing
2026-06-30 13:19:10 -07:00
inherentlee e80f340642 remove site folder
continuous-integration/drone/push Build is passing
2026-05-21 16:35:18 -07:00
inherentlee 4b43f76ac4 add ai declaration meta values 2026-05-21 16:33:50 -07:00
inherentlee 54b63df970 drone file
continuous-integration/drone/push Build is passing
2026-05-15 09:23:58 -07:00
inherentlee b40f41a5f7 add submodule 2026-05-15 09:23:40 -07:00
inherentlee 1cf7b8560e build 2026-05-14 09:32:29 -07:00
inherentlee ba5b01d084 improve copyright 2026-05-14 09:30:54 -07:00
inherentlee feaaeb30b7 build 2026-05-14 09:24:37 -07:00
inherentlee 4af8d68ac9 add all years in footer 2026-05-14 09:19:20 -07:00
inherentlee c51e5b502a gram reformat 2026-05-14 09:19:05 -07:00
inherentlee 6585b8e74d fix time zone issue 2026-05-14 09:18:15 -07:00
inherentlee 22d4c48b46 core css draft 2026-05-14 09:02:08 -07:00
inherentlee 18989f817f build 2026-05-14 08:57:06 -07:00
inherentlee 5dfaac6820 tweak sizing/margins of modal images 2026-05-14 08:56:32 -07:00
inherentlee 814d4efe8b build 2026-05-14 08:51:09 -07:00
inherentlee 0b0822d21b reorder contact page 2026-05-14 08:50:30 -07:00
inherentlee f1c073535d build 2026-05-14 08:46:01 -07:00
inherentlee 4f0a0f3969 move tabindex setting to modal controls 2026-05-14 08:45:31 -07:00
inherentlee c4b7faca88 build 2026-05-13 20:50:51 -07:00
inherentlee 68487ad342 tweak alpha value of close button 2026-05-13 20:50:25 -07:00
inherentlee 2b90da7572 build 2026-05-13 20:47:18 -07:00
inherentlee 58be723eef pointer for clickable images 2026-05-13 20:46:48 -07:00
inherentlee 72c5904c27 build 2026-05-13 20:44:22 -07:00
inherentlee e615e6a91f image modals for posts 2026-05-13 20:42:31 -07:00
inherentlee a56ca4c03e remove pdf link 2026-05-07 14:30:54 -07:00
inherentlee 9a483ad27c build 2026-05-06 11:04:35 -07:00
inherentlee 63e225aebc fedilearns 2026-05-06 11:04:05 -07:00
inherentlee 60c07e629b update fedilearns url 2026-05-05 17:27:08 -07:00
inherentlee ff1fa0a966 build 2026-05-05 13:32:00 -07:00
inherentlee 64007ea884 add fedilearns to resume 2026-05-05 13:00:41 -07:00
inherentlee 1108f38939 explicit favicon setting 2026-05-05 12:57:21 -07:00
inherentlee cddc20ad3d build 2026-05-04 15:39:47 -07:00
inherentlee 3a9095c4e8 couple small fixes: home title attr, add mising tag, move post topics up in postlist 2026-05-04 11:48:19 -07:00
inherentlee 914243feb9 move anchor links to aria-labelledby model 2026-05-04 08:35:44 -07:00
inherentlee 3f9e6727de fix page title in metadata 2026-05-04 08:21:35 -07:00
inherentlee f980c8c682 switch order of heading and image 2026-05-03 21:20:24 -07:00
inherentlee 8104cd4520 update signal link 2026-04-21 14:31:42 -07:00
inherentlee 4f38bbfc82 build last 4 commits 2026-04-09 07:41:16 -07:00
inherentlee 56736453fe resume wording 2026-04-09 07:40:47 -07:00
inherentlee c04993c983 mobile margins 2026-04-09 07:40:38 -07:00
inherentlee ed3a845a55 small colophon edits 2026-04-09 07:38:06 -07:00
inherentlee c8ce389065 spell things right omg 2026-04-09 07:34:56 -07:00
inherentlee c95b3c080a testimonial from mari 2026-04-07 15:37:23 -07:00
inherentlee c559aa9154 add testimonial 2026-04-07 10:00:40 -07:00
inherentlee a14753e656 build 2026-04-06 13:27:56 -07:00
inherentlee 82db8f8758 beall testimonial 2026-04-06 13:27:21 -07:00
inherentlee d434da450f wording 2026-04-06 13:24:22 -07:00
inherentlee 913f8469f3 build 2026-04-06 10:27:00 -07:00
inherentlee 4f12d9c5ac change how resume page is handled and add some testimonials 2026-04-06 10:26:22 -07:00
inherentlee e14261bf4d fix weird spaces 2026-03-27 12:35:25 -07:00
inherentlee 073ad660e4 ok finishing up the blur stuff and also building 2026-03-27 12:33:35 -07:00
inherentlee c6dcdacbec further reorder art shows page 2026-03-27 12:25:26 -07:00
inherentlee 8ab1cb687b blur adulty matieral 2026-03-27 12:23:26 -07:00
inherentlee ac1903c5a1 reorder art shows page 2026-03-27 12:23:04 -07:00
inherentlee bf677c3cdf add line to remove structural tags 2026-03-27 11:54:48 -07:00
inherentlee 8adb83d8a8 rel external for accessible image modals 2026-03-25 13:03:30 -07:00
inherentlee 0439f0478d build prev 2026-03-25 13:00:47 -07:00
inherentlee ebe2490fd3 accessible image modals crosses fingers 2026-03-25 13:00:13 -07:00
inherentlee 409ca37f74 wording tweak 2026-03-25 12:50:36 -07:00
inherentlee e129b26e63 build 2026-03-24 10:38:18 -07:00
inherentlee dc49b1cad5 update contact page 2026-03-24 10:37:53 -07:00
inherentlee 21e3dca187 build last two commits 2026-03-24 10:11:20 -07:00
inherentlee ff9eb09838 update headers to use code blocks again now that i fixed that 2026-03-24 10:10:57 -07:00
inherentlee ce6aa0fb00 tweak heading anchor styling 2026-03-24 10:10:16 -07:00
inherentlee f89f135f9b build prev and add draft handling 2026-03-24 09:58:14 -07:00
inherentlee 422a0e45e8 format on save plus: 1) update spoonfairies URL 2) remove 11ty Lessons link 2026-03-24 09:50:14 -07:00
inherentlee 191ee1a355 make code blocks responsive to containing block font size 2026-03-23 15:32:27 -07:00
inherentlee 43ccb40e0b update resume page with gryphon's roost 2026-03-19 15:03:42 -07:00
inherentlee b5aff7207e sitemap styling 2026-03-18 11:11:11 -07:00
inherentlee aa9951e68d build 2026-03-12 11:52:52 -07:00
inherentlee 35519d9d4b remove anchor from related posts section 2026-03-12 11:52:24 -07:00
inherentlee 43ae5c489e rename script 2026-03-07 10:31:53 -08:00
inherentlee b51e953a1b fix date zone 2026-03-02 07:49:22 -08:00
inherentlee 0e14d3ca72 build prev 2026-03-01 14:41:07 -08:00
inherentlee 50d4b61037 jesus h christ 2026-03-01 14:40:42 -08:00
inherentlee 73a0278392 update resume with freelance work 2026-02-25 18:10:11 -08:00
inherentlee b241cc14af move 11ty lessons on resume page 2026-02-25 14:37:31 -08:00
inherentlee 98c00bb1fd robots txt 2026-02-25 14:25:33 -08:00
inherentlee bfefa33f13 exclude tag redirect pages from sitemap 2026-02-21 13:11:30 -08:00
inherentlee 89ff36afc7 build prev 2026-02-21 13:09:59 -08:00
inherentlee afbf693d3b redirects for the old tag urls 2026-02-21 13:09:15 -08:00
inherentlee a3ba14abd2 build prev 2026-02-21 12:23:40 -08:00
inherentlee e45e9b0f7a remove anchors from related posts 2026-02-21 12:23:05 -08:00
inherentlee 3e61e004f4 add space above footer 2026-02-20 19:22:14 -08:00
inherentlee 58a412f002 build now 2026-02-20 14:35:54 -08:00
inherentlee 64db3a2446 FAVICON 2026-02-20 14:35:32 -08:00
inherentlee a03a1b6c52 update beall greenhouses url 2026-02-20 14:12:22 -08:00
inherentlee 7f5dc28cad remove excess note 2026-02-20 13:15:09 -08:00
inherentlee 7e95d9ff16 build prev 2026-02-20 12:24:10 -08:00
inherentlee 6e3bfd9a08 fix some accessibilty issues 2026-02-20 12:23:36 -08:00
inherentlee ae056c75bd built with last change 2026-02-20 12:01:30 -08:00
inherentlee 5c786b15d2 remove redundant text 2026-02-20 11:59:29 -08:00
inherentlee 2c3711fe1e woops 2026-02-20 11:57:19 -08:00
inherentlee f18e2f2078 woops i forgot the lang attribute lmao 2026-02-20 11:53:41 -08:00
inherentlee 9a566f99ab build 2026-02-20 08:46:50 -08:00
inherentlee 9db3d3b34c tweak navbar border width 2026-02-20 08:46:40 -08:00
inherentlee 9249a6e050 run build 2026-02-20 08:36:56 -08:00
inherentlee 7d1fe776c7 add related posts and update some styling 2026-02-20 08:36:46 -08:00
inherentlee c4b549bc75 update site 2026-02-20 08:02:52 -08:00
inherentlee 6203735ff8 note re if you're doing multiple widths 2026-02-20 08:01:41 -08:00
inherentlee 3848af101b don't let the live build overwrite the built files cause of the iamge handling 2026-02-19 22:20:03 -08:00
inherentlee 25f5d5897b new post on eleventy 2026-02-19 22:19:39 -08:00
inherentlee fc71c05327 let's keep good ol mogrify around 2026-02-19 21:13:56 -08:00
inherentlee d080981f2d remainder of site this should be fine right 2026-02-19 21:12:12 -08:00
inherentlee 778d323db9 img 2026-02-19 21:10:56 -08:00
inherentlee 6e33a3baca a-h of site pages 2026-02-19 21:09:25 -08:00
inherentlee 522842c2f0 we can add the site now 2026-02-19 21:07:45 -08:00
inherentlee ecd5de37f4 literally spacing and a semicolon 2026-02-19 21:07:01 -08:00
inherentlee 4bf8c7e334 some metadata stuff 2026-02-19 17:54:01 -08:00
inherentlee 94716d8e63 post-to-post pagination and a few spacing tweaks 2026-02-19 17:22:15 -08:00
inherentlee 3249c8305f readme 2026-02-19 16:57:54 -08:00
inherentlee 1b4a4bd654 most recent not least recent tag preview 2026-02-19 15:02:55 -08:00
inherentlee 8e9a356aea missing tag 2026-02-19 14:56:27 -08:00
inherentlee ac4f19f9ca fix misnamed tag 2026-02-19 14:54:54 -08:00
inherentlee 2139a422a8 2026 2026-02-19 14:51:35 -08:00
inherentlee 895eb9b314 2025 2026-02-19 14:51:06 -08:00
inherentlee f142098f1d 2024 2026-02-19 14:50:32 -08:00
inherentlee 7bf791fdf3 2023 2026-02-19 14:49:35 -08:00
inherentlee ff738388b1 2022 2026-02-19 14:48:55 -08:00
inherentlee 863f4bf127 pre-post addition 2026-02-19 14:47:35 -08:00
485 changed files with 10905 additions and 504 deletions

No files matched your search

+28
View File
@@ -0,0 +1,28 @@
kind: pipeline
type: docker
name: default
trigger:
branch:
- main
steps:
- name: build
image: node:current
environment:
REPOSITORY: leecat.art-site
GIT_USER: inherentlee
GIT_TOKEN:
from_secret: GIT_TOKEN
commands:
- git config credential.helper '!f() { echo username=$GIT_USER; echo "password=$GIT_TOKEN"; };f'
- git submodule update --remote --init --merge
- npm install
- npm run build
- apt-get update && apt-get install -y rsync
- rsync -uavh _site/ $REPOSITORY --delete --exclude .git
- cd $REPOSITORY
- git checkout main
- git config --global --add safe.directory /drone/src/$REPOSITORY
- git add -A
- git commit -m "drone build $(TZ=':America/Los_Angeles' date)"
- git push
+3 -3
View File
@@ -1,5 +1,5 @@
# eleventy output
_site
# npm
node_modules
# build
_site
+3
View File
@@ -0,0 +1,3 @@
[submodule "leecat.art-site"]
path = leecat.art-site
url = https://heckin.technology/inherentlee/leecat.art-site.git
+23
View File
@@ -0,0 +1,23 @@
# leecat.art
Lee Cattarin's personal website, v2. Built on Eleventy.
## Install
```sh
npm i
# or
npm install
```
## Run locally
```sh
npm run dev
```
## Build website
```sh
npm run build
```
+72 -10
View File
@@ -2,29 +2,91 @@ import { DateTime } from "luxon";
export default function (eleventyConfig) {
// Return the keys used in an object
eleventyConfig.addFilter("getKeys", target => {
eleventyConfig.addFilter("getKeys", (target) => {
return Object.keys(target);
});
/* Exclude all posts with given URLs from a collection list */
eleventyConfig.addFilter(
"excludeFromCollection",
function (collection = [], urls = [this.ctx.page.url]) {
return collection.filter((post) => urls.indexOf(post.url) === -1);
},
);
/* Filter a collection by a set of tags, returning any that share one or more tags */
eleventyConfig.addFilter(
"filterByTags",
function (collection = [], ...requiredTags) {
return collection.filter((post) => {
return requiredTags.flat().some((tag) => post.data.tags.includes(tag));
});
},
);
/* Return n elements from a list */
eleventyConfig.addFilter("head", (collection = [], n) => {
if (!Array.isArray(collection) || collection.length === 0) {
return [];
}
if (n < 0) {
return collection.slice(n);
}
return collection.slice(0, n);
});
/* For <time> elements */
eleventyConfig.addFilter("htmlDateString", (dateObj) => {
return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat('yyyy-LL-dd');
return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat("yyyy-LL-dd");
});
/* What it says on the tin */
eleventyConfig.addFilter("randomize", function (array) {
// Create a copy of the array to avoid modifying the original
let shuffledArray = array.slice();
// Fisher-Yates shuffle algorithm
for (let i = shuffledArray.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffledArray[i], shuffledArray[j]] = [
shuffledArray[j],
shuffledArray[i],
];
}
return shuffledArray;
});
/* Human-readable dates */
eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => {
return DateTime.fromJSDate(dateObj, { zone: zone || "utc" })
.toLocaleString(DateTime.DATE_FULL);
eleventyConfig.addFilter("readableDate", (dateObj) => {
return DateTime.fromJSDate(dateObj, { zone: "utc" }).toLocaleString(
DateTime.DATE_FULL,
);
});
/* Filter out structural tags */
eleventyConfig.addFilter("removeBasicTags", (tags) => {
return tags.filter(tag => ["all", "posts", "gallery", "reference", "tagPagination"].indexOf(tag) === -1);
return tags.filter(
(tag) =>
[
"all",
"posts",
"gallery",
"reference",
"tagPagination",
"blur",
].indexOf(tag) === -1,
);
});
/* What it says */
eleventyConfig.addFilter("sortAlphabetically", strings =>
(strings || []).sort((b, a) => b.localeCompare(a))
/* What it says on the tin */
eleventyConfig.addFilter("sortAlphabetically", (strings) =>
(strings || []).sort((b, a) => b.localeCompare(a)),
);
};
/* Remove year from image filenames for OG metadata file path */
eleventyConfig.addFilter("toOgFilename", (filename) => {
return filename.split("/")[1];
});
}
+24 -3
View File
@@ -1,7 +1,7 @@
<footer>
<ul>
<li>
<a href="/colophon" title="colophon" aria-label="colophon"
<a href="/colophon/"
{% if page.url == "/colophon/" %}aria-current="page"{% endif %}>
colophon
</a>
@@ -9,9 +9,9 @@
<li>
<a href="/" title="go home"
aria-label="go home | {{ metadata.title }} from {{ metadata.author }} in 2026"
aria-label="go home | {{ metadata.title }} from {{ metadata.author }}, copyright 2022-2026"
{% if page.url == "/" %}aria-current="page"{% endif %}>
{{ metadata.title }} from {{ metadata.author }} in 2026</a>
{{ metadata.title }} from {{ metadata.author }}, © 2022-2026</a>
</li>
<li>
@@ -21,4 +21,25 @@
</a>
</li>
</ul>
<fieldset id="theme">
<legend>color scheme</legend>
<input type="radio" id="theme-light" name="theme" value="light"/>
<label class="theme-light" for="theme-light">
<i class="fa-regular fa-sun" aria-hidden="true"></i>
light
</label>
<input type="radio" id="theme-auto" name="theme" value="auto" checked/>
<label class="theme-auto" for="theme-auto">
auto
</label>
<input type="radio" id="theme-dark" name="theme" value="dark"/>
<label class="theme-dark" for="theme-dark">
dark
<i class="fa-regular fa-moon" aria-hidden="true"></i>
</label>
</fieldset>
</footer>
+51
View File
@@ -0,0 +1,51 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
{% set pageTitle %}{{ title | safe }} | {{ metadata.title }}{% endset %}
<title>{{ pageTitle }}</title>
<meta name="description" content="{{ description or metadata.description }}">
<link rel="alternate" href="/feed.xml" type="application/atom+xml" title="{{ metadata.title }}">
<meta property="og:title" content="{{ pageTitle }}" />
<meta property="og:type" content="website" />
<meta property="og:description" content="{{ description or metadata.description }}" />
<meta property="og:site_name" content="{{ metadata.title }}" />
<meta property="og:url" content="{{ metadata.url }}{{ page.url }}" />
{% if image %}
<meta property="og:image" content="{{ metadata.url }}/img/{{ image.src | toOgFilename }}" />
<meta property="og:image:alt" content="{{ image.alt }}" />
{% else %}
<meta property="og:image" content="{{ metadata.url }}/favicon.ico" />
<meta property="og:image:alt" content="a teal bird icon" />
{% endif %}
<meta name="generator" content="{{ eleventy.generator }}">
<meta itemprop="ai-content-declaration:version" content="1.0.0">
<meta itemprop="ai-content-declaration:level" content="none">
{# Fonts #}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
{# Icons #}
<script src="https://kit.fontawesome.com/884dded219.js" crossorigin="anonymous"></script>
{# Styles #}
<style>{% include "css/main.css" %}</style>
<style>{% include "css/nav.css" %}</style>
<style>{% include "css/pagefind.css" %}</style>
<style>{% include "css/highlighting.css" %}</style>
<style>{% include "css/print.css" %}</style>
<style>{% getBundle "css" %}</style>
{# Scripts #}
<script>{% include "js/theme.js" %}</script>
<script type="module">{% getBundle "js" %}</script>
{# Pagefind #}
<link href="/pagefind/pagefind-component-ui.css" rel="stylesheet">
<script src="/pagefind/pagefind-component-ui.js" type="module"></script>
+8 -4
View File
@@ -1,6 +1,5 @@
<header>
<a href="#main" id="skip" title="skip to main content" aria-label="skip to main content">
<a href="#main" id="skip" title="skip to main content">
<i class="fa-solid fa-forward" aria-hidden="true"></i> skip
</a>
@@ -9,8 +8,7 @@
{% for entry in collections.all | eleventyNavigation %}
<li>
<a href="{{ entry.url }}" title="{{ entry.data.label }}"
{% if entry.url == page.url %}aria-current="page"{% endif %}
aria-label="{{ entry.data.label }}">
{% if entry.url == page.url %}aria-current="page"{% endif %}>
<i class="{{ entry.data.icon }}" aria-hidden="true"></i>
<span class="menu-text">{{ entry.title }}</span>
</a>
@@ -19,4 +17,10 @@
</ul>
</nav>
<div class="dark searchbox" data-pf-theme="dark">
<pagefind-searchbox></pagefind-searchbox>
</div>
<div class="light searchbox">
<pagefind-searchbox></pagefind-searchbox>
</div>
</header>
+4 -33
View File
@@ -1,46 +1,17 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title or metadata.title }}</title>
<meta name="description" content="{{ description or metadata.description }}">
{# <link rel="alternate" href="/feed/feed.xml" type="application/atom+xml" title="{{ metadata.title }}"> #}
<meta property="og:title" content="{{ title or metadata.title }}" />
<meta property="og:type" content="website" />
<meta property="og:description" content="{{ description or metadata.description }}" />
<meta property="og:site_name" content="{{ metadata.title }}" />
<meta name="generator" content="{{ eleventy.generator }}">
{# Fonts #}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
{# Icons #}
<script src="https://kit.fontawesome.com/884dded219.js" crossorigin="anonymous"></script>
{# Styles #}
<style>{% include "css/main.css" %}</style>
<style>{% include "css/nav.css" %}</style>
<style>{% include "css/print.css" %}</style>
<style>{% getBundle "css" %}</style>
<script type="module">{% getBundle "js" %}</script>
{% include "head-content.njk" %}
</head>
<body>
{% include "header.njk" %}
<main id="main">
{{ content | safe }}
<hr>
</main>
{% include "footer.njk" %}
<!-- This page `{{ page.url }}` was built on {% currentBuildDate %} -->
<body>
</body>
</html>
+1 -1
View File
@@ -3,7 +3,7 @@ layout: base.njk
---
{% js %}{% include "node_modules/@zachleat/heading-anchors/heading-anchors.js" %}{% endjs %}
<heading-anchors content="<i class='fa-solid fa-anchor'></i>">
<heading-anchors content="<i class='fa-solid fa-anchor'></i>" data-pagefind-body>
<h1>{{ title }}</h1>
{{ content | safe }}
+13
View File
@@ -0,0 +1,13 @@
---
layout: post.njk
---
{% css %}{% include "css/post-toc.css" %}{% endcss %}
<aside id="toc">
<details>
<summary><h2>table of contents</h2></summary>
{{ content | toc | safe }}
</details>
</aside>
{{ content | safe }}
+30 -3
View File
@@ -2,11 +2,13 @@
layout: base.njk
---
{% css %}{% include "css/post.css" %}{% endcss %}
{% css %}{% include "css/highlighting.css" %}{% endcss %}
{% css %}{% include "css/lists.css" %}{% endcss %}
{% css %}{% include "css/modal.css" %}{% endcss %}
{% js %}{% include "node_modules/@zachleat/heading-anchors/heading-anchors.js" %}{% endjs %}
{% js %}{% include "js/modal.js" %}{% endjs %}
<heading-anchors content="<i class='fa-solid fa-anchor'></i>">
<article>
<article data-pagefind-body>
<h1>{{ title }}</h1>
<div class="post-metadata">
@@ -29,9 +31,34 @@ layout: base.njk
</div>
{% if image %}
<img src="/img/{{ image.src }}" alt="{{ image.alt }}">
<dialog closedby="any" aria-label="image modal" tabindex="-1">
<button class="close-dialog" autofocus aria-label="close the image modal">&times;</button>
<img class="modal-img" src="/img/{{ image.src }}" alt="{{ image.alt }}">
</dialog>
<img class="hero" src="/img/{{ image.src }}" alt="{{ image.alt }}">
{% endif %}
{{ content | safe }}
</article>
{% set olderPost = collections.posts | getPreviousCollectionItem %}
{% set newerPost = collections.posts | getNextCollectionItem %}
{% set olderHref = olderPost.url %}
{% set newerHref = newerPost.url %}
{% set olderTitle = olderPost.data.title %}
{% set newerTitle = newerPost.data.title %}
{% set inPost = true %}
{% include "pagination.njk" %}
<hr>
{% set relevantTags = tags | removeBasicTags %}
{% set postlist = collections.posts | filterByTags(relevantTags) | excludeFromCollection([page.url, olderHref, newerHref]) | randomize | head(3) %}
{% if postlist.length %}
<section class="related-posts">
<h2 data-ha-exclude>related posts</h2>
{% include "postlist.njk" %}
</section>
{% endif %}
</heading-anchors>
-6
View File
@@ -1,6 +0,0 @@
---
layout: base.njk
---
{% css %}{% include "css/resume.css" %}{% endcss %}
{{ content | safe }}
+21
View File
@@ -0,0 +1,21 @@
<!doctype html>
<html lang="en">
<head>
{% include "head-content.njk" %}
<meta http-equiv="refresh" content="0; url=/tags/{{ tag }}">
</head>
<body>
{% include "header.njk" %}
<main id="main">
<h1>{{ title }}</h1>
{{ content | safe }}
</main>
{% include "footer.njk" %}
<!-- This page `{{ page.url }}` was built on {% currentBuildDate %} -->
<body>
</html>
+3 -3
View File
@@ -1,17 +1,17 @@
{% if olderHref or newerHref %}
<nav aria-label="pagination">
<ol class="pagination">
<ol class="pagination {% if inPost %}post-pagination{% endif %}">
{% if olderHref %}
<li class="older">
<a href="{{ olderHref }}">
<i class="fa-solid fa-hand-point-left" aria-hidden="true"></i> older
<i class="fa-solid fa-hand-point-left" aria-hidden="true"></i> {{ olderTitle or "older" }}
</a>
</li>
{% endif %}
{% if newerHref %}
<li class="newer">
<a href="{{ newerHref }}">
newer <i class="fa-solid fa-hand-point-right" aria-hidden="true"></i>
{{ newerTitle or "newer" }} <i class="fa-solid fa-hand-point-right" aria-hidden="true"></i>
</a>
</li>
{% endif %}
+4 -3
View File
@@ -2,15 +2,16 @@
{% for post in postlist %}
<li class="post">
<a class="postlink" href="{{ post.url }}">
<h2 data-ha-exclude>{{ post.data.title }} {% if "blur" in post.data.tags %}(mature){% endif %}</h2>
{% if post.data.image %}
<img src="/img/{{ post.data.image.src }}" alt="{{ post.data.image.alt }}">
{% endif %}
<h2>{{ post.data.title }}</h2>
<ul class="postlist-tags">
{% for tag in post.data.tags | removeBasicTags %}
<li>{{ tag }}</li>
{% endfor %}
</ul>
<img src="/img/{{ post.data.image.src }}" alt="{{ post.data.image.alt }}"
{% if "blur" in post.data.tags %}class="blur"{% endif %}>
{% endif %}
</a>
</li>
{% endfor %}
+30
View File
@@ -0,0 +1,30 @@
main {
margin-bottom: 2rem;
}
.rss-explainer {
background: var(--color-bg-alt);
padding: 1rem;
margin-block: 1rem;
border-radius: .5rem;
}
.rss-explainer p {
margin: 0;
}
.rss-explainer p + p {
margin-top: 1.25rem;
}
.feed-url {
font-family: var(--font-family-code);
font-size: .9rem;
text-align: center;
}
p:has(small) {
display: block;
margin: .25rem 0 0 .75rem;
color: var(--color-grey);
}
+1 -1
View File
@@ -7,7 +7,7 @@ code[class*=language-],
pre[class*=language-] {
font-family: var(--font-family-code);
background-color: var(--color-bg-alt);
font-size: .9rem;
font-size: .9em;
text-shadow: 0 1px var(--color-shadow);
-moz-tab-size: 4;
-o-tab-size: 4;
+7 -3
View File
@@ -93,7 +93,6 @@
/* Click animation */
.postlink:active,
.taglink:active {
box-shadow: none;
top: .2rem;
left: .2rem;
box-shadow: .15rem .15rem var(--color-shadow);
@@ -112,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;
@@ -143,6 +143,11 @@
grid-area: img;
}
.blur {
filter: blur(.75rem);
clip-path: inset(0 round 1rem);
}
.tag-imgs {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -158,7 +163,7 @@
width: 100%;
aspect-ratio: 3 / 2;
background-color: var(--color-bg-alt);
border-radius: calc(1rem);
border-radius: 1rem;
}
.taglink:focus-visible .missing-image {
@@ -216,4 +221,3 @@
.tag:nth-child(odd) p {
text-align: right;
}
+58 -19
View File
@@ -1,7 +1,17 @@
@font-face {
font-family: "Peritel";
src:
url("/fonts/Peritel/Peritel-Regular.woff2") format("woff2"),
url("/fonts/Peritel/Peritel-Regular.otf") format("opentype");
}
:root {
color-scheme: light dark;
--font-family: 'Atkinson Hyperlegible Next', sans-serif;
/* if you change the header font, go to post-toc.css and fuck about with the width
of the table of contents */
--font-family-headers: 'Peritel', 'Atkinson Hyperlegible Next', sans-serif;
--font-family-code: 'Atkinson Hyperlegible Mono', monospace;
--color-dark: #2e303e;
@@ -17,7 +27,7 @@
--color-shadow: rgba(2, 10, 40, .25);
/* Used for syntax highlighting */
--color-red-light: #e95678;
--color-red-light: #f195aa;
--color-orange-light: #fab795;
--color-yellow-light: #fbe6bc;
--color-green-light: #29d398;
@@ -49,12 +59,16 @@
--color-blue: light-dark(var(--color-blue-dark), var(--color-blue-light));
--color-purple: light-dark(var(--color-purple-dark), var(--color-purple-light));
--color-grey: light-dark(var(--color-grey-dark), var(--color-grey-light));
}
--header-offset: 3.1rem;
:root:has(#theme-light:checked) {
color-scheme: light;
}
:root:has(#theme-dark:checked) {
color-scheme: dark;
}
/* Base */
* {
box-sizing: border-box;
margin: 0;
@@ -71,10 +85,9 @@ main {
width: 60vw;
max-width: 1000px;
margin: 0 auto;
scroll-margin-top: var(--header-offset);
}
@media (max-width: 1050px) {
@media (max-width: 1100px) {
main {
width: 75vw;
}
@@ -90,28 +103,38 @@ main {
h1, h2, h3, h4, h5, h6 {
line-height: 1.25;
color: var(--color-teal);
scroll-margin-top: var(--header-offset);
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 {
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 {
margin-top: 1.5rem;
font-size: 2.25rem;
}
h2 { font-size: 1.8rem; }
h3 { font-size: 1.4rem; }
}
h4, h5, h6 {
margin-top: 1rem;
font-size: 1.2rem;
font-size: 1.25rem;
}
/* Images */
@@ -120,6 +143,7 @@ img {
max-width: 100%;
height: auto;
border-radius: 1rem;
margin: 0 auto;
}
/* Paragraphs */
@@ -163,12 +187,13 @@ a:active {
a.ha,
span.ha-placeholder {
color: var(--color-pink);
font-size: .8em;
vertical-align: .1em;
}
span.ha-placeholder {
opacity: .55;
}
/* Lists */
::marker {
color: var(--color-pink);
@@ -178,14 +203,27 @@ ul, ol, dl, li {
margin-left: 1rem;
}
@media (max-width: 650px) {
ul, ol, dl {
margin-left: 0;
}
}
li {
line-height: 1.2 5;
line-height: 1.4;
margin-top: .65rem;
margin-bottom: .65rem;
}
li ul, li ol {
margin: .5rem 0;
margin-left: 1rem;
}
@media (max-width: 650px) {
li ul, li ol {
margin-left: 0;
}
}
dt {
@@ -200,9 +238,9 @@ dd {
/* Blockquotes */
blockquote {
margin: .5rem 1rem;
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);
}
@@ -225,6 +263,7 @@ table {
border-spacing: 0; /* border collapse doesn't play nice with radii */
border-radius: .3rem;
border: thin solid var(--color-pink);
margin: 1.25rem 0;
}
th {
@@ -232,6 +271,10 @@ th {
background-color: var(--color-pink);
}
th code {
color: var(--color-text); /* Yes, I actually do this somewhere */
}
th, td {
padding: .5rem;
text-align: left;
@@ -250,13 +293,9 @@ time {
/* Horizontal rules */
hr {
color: var(--color-teal);
border: .25rem solid var(--color-teal);
border: .25rem solid var(--color-pink);
margin: 2rem 0;
}
hr:last-child {
margin-bottom: 0;
}
/* Used on home, reference, gallery pages */
.centered {
+89
View File
@@ -0,0 +1,89 @@
img[tabindex="0"] {
cursor: pointer;
}
img[tabindex="0"]:focus-visible {
outline: .15rem solid var(--color-teal);
}
dialog {
margin: auto;
flex-flow: column;
background: transparent;
border: none;
position: absolute;
}
dialog[open] {
display: flex;
}
dialog::backdrop {
background-color: rgba(from var(--color-bg) r g b / .8);
backdrop-filter: blur(4px);
}
body:has(dialog[open]) {
overflow: hidden;
}
.close-dialog {
background-color: rgba(from var(--color-teal) r g b / .35);
font-size: 1.5rem;
padding: 0 .5rem .15rem;
border-radius: 1rem;
color: var(--color-teal);
box-shadow: .15rem .15rem var(--color-shadow);
border: .08rem solid var(--color-teal);
align-self: flex-end;
justify-self: flex-start;
margin: 0 .1rem;
/* Click animation handling */
position: relative;
top: 1rem;
left: -.15rem;
transition: top .1s ease-in, left .1s ease-in;
}
.close-dialog:focus-visible {
outline: none;
background-color: var(--color-teal);
color: var(--color-bg);
}
@media (any-hover: hover) {
.close-dialog:hover {
outline: none;
background-color: var(--color-teal);
color: var(--color-bg);
}
}
@media (forced-colors: active) {
.close-dialog:focus-visible {
outline-offset: .08rem;
outline: .08rem solid;
}
@media (any-hover: hover) {
.close-dialog:hover {
outline-offset: .08rem;
outline: .08rem solid;
}
}
}
/* Click animation */
.close-dialog:active {
top: 1.1rem;
left: -.05rem;
box-shadow: .05rem .05rem var(--color-shadow);
}
.modal-img {
max-height: calc(100vh - 2rem);
object-fit: contain;
width: auto;
max-width: 90%;
margin: 0 auto;
}
+129 -10
View File
@@ -1,11 +1,11 @@
/* Header */
header {
position: sticky;
top: 0;
background-color: var(--color-bg);
box-shadow: 0 .25rem .15rem var(--color-shadow);
padding: .75rem 0;
z-index: 10;
border-bottom: thick solid var(--color-teal);
box-shadow: 0 .25rem .15rem var(--color-shadow);
display: grid;
grid-template-columns: auto;
}
/* Header links, pagination links */
@@ -163,7 +163,7 @@ a[aria-current="page"] a:focus-visible i,
width: auto;
height: auto;
overflow: auto;
margin: 0 10%;
margin: -.125rem 10%;
z-index: 999;
}
@@ -198,6 +198,8 @@ header li {
footer {
padding: 1rem 0;
font-size: .9rem;
border-top: thick solid var(--color-pink);
margin-top: 2rem;
}
footer ul {
@@ -205,6 +207,7 @@ footer ul {
list-style: none;
gap: .5rem;
justify-content: center;
margin: 0;
}
footer li {
@@ -237,17 +240,133 @@ footer a:focus-visible {
outline-color: var(--color-pink);
}
/* color picker */
#theme {
display: flex;
justify-content: center;
margin: .5rem auto 0;
padding: 0 .75rem .5rem;
width: fit-content;
border: .125rem solid var(--color-teal);
border-radius: 2rem;
}
#theme legend {
margin: 0 auto;
color: var(--color-teal);
}
footer label {
cursor: pointer;
border: .125rem solid var(--color-pink);
padding: 0 .25rem;
color: var(--color-pink);
background-color: var(--color-bg); /* this stops the box shadows from showing through */
box-shadow: .15em .15em var(--color-shadow);
/* Click animation handling */
position: relative;
top: 0;
left: 0;
transition: top .05s ease-in, left .05s ease-in;
}
footer input:checked + label {
color: var(--color-blue);
border-color: var(--color-blue);
}
footer label i {
color: var(--color-teal);
}
footer input:checked + label i {
color: var(--color-pink);
}
@media (any-hover: hover) {
footer label:hover,
footer input:checked + label:hover,
footer label:hover i,
footer input:checked + label:hover i {
color: var(--color-bg);
}
footer label:hover {
background-color: var(--color-pink);
}
footer input:checked + label:hover {
background-color: var(--color-teal);
}
}
footer input:focus-visible + label,
footer input:focus-visible + label i {
color: var(--color-bg);
background-color: var(--color-pink);
border-color: var(--color-pink);
}
footer input:checked:focus-visible + label,
footer input:checked:focus-visible + label i {
color: var(--color-bg);
background-color: var(--color-teal);
border-color: var(--color-teal);
}
footer label:active {
top: .09em;
left: .09em;
box-shadow: .05em .05em var(--color-shadow);
}
label.theme-light {
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
border-right: none;
padding-left: .35rem;
}
label.theme-auto {
}
label.theme-dark {
border-top-right-radius: 1rem;
border-bottom-right-radius: 1rem;
border-left: none;
padding-right: .35rem;
}
footer input {
/* To allow screen reader to still access these. */
/* From https://lyra.horse/blog/2025/08/you-dont-need-js/ */
opacity: 0;
position: absolute;
pointer-events: none;
}
/* Pagination */
.pagination,
.pagination li {
margin: 0;
}
.pagination {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-areas: "older newer";
list-style: none;
margin-top: 3rem;
}
.pagination,
.pagination li {
margin: 0;
@media (max-width: 650px) {
.post-pagination {
grid-template-columns: 1fr;
grid-template-areas:
"older"
"newer";
gap: .75rem;
}
}
.pagination .older {
@@ -268,8 +387,8 @@ footer a:focus-visible {
display: flex;
flex-flow: row wrap;
list-style: none;
justify-content: space-around;
gap: .35rem;
justify-content: center;
gap: .5rem;
}
.webring ul,
+106
View File
@@ -0,0 +1,106 @@
/* Handle color schemes */
:root:has(#theme-light:checked) .dark {
display: none;
}
:root:has(#theme-dark:checked) .light {
display: none;
}
@media (prefers-color-scheme: light) {
:root:not(:has(#theme-dark:checked)) .dark {
display: none;
}
}
@media (prefers-color-scheme: dark) {
:root:not(:has(#theme-light:checked)) .light {
display: none;
}
}
.searchbox {
margin: 1rem auto 0;
}
pagefind-searchbox {
/* Shadows */
--pf-scroll-shadow: var(--color-shadow) !important;
--pf-shadow-sm: .15rem .15rem 0 var(--color-shadow) !important;
--pf-shadow-md: .25rem .25rem 0 var(--color-shadow) !important;
--pf-shadow-lg: 1rem 1rem 0 var(--color-shadow) !important;
/* Typography */
--pf-font: var(--font-family) !important;
/* Border */
--pf-border-radius: 1.5rem !important;
/* Focus */
--pf-outline-width: .125rem !important;
--pf-outline-offset: 0 !important;
/* Width */
--pf-searchbox-max-width: min(550px, 92vw) !important;
}
.light pagefind-searchbox {
--pf-text: var(--color-dark) !important;
--pf-text-secondary: var(--color-dark-alt) !important;
--pf-text-muted: var(--color-dark-alt) !important;
--pf-background: var(--color-light-alt) !important;
--pf-border: var(--color-pink-dark) !important;
--pf-border-focus: var(--color-pink-dark) !important;
--pf-skeleton: var(--color-light) !important;
--pf-skeleton-shine: var(--color-dark) !important;
--pf-hover: var(--color-light) !important;
--pf-mark: var(--color-teal-dark) !important;
--pf-outline-focus: var(--color-teal-dark) !important;
/* Error */
--pf-error-bg: var(--color-light-alt) !important;
--pf-error-border: var(--color-red-dark) !important;
--pf-error-text: var(--color-red-dark) !important;
--pf-error-text-secondary: var(--color-red-dark) !important;
}
.dark pagefind-searchbox {
--pf-text: var(--color-light) !important;
--pf-text-secondary: var(--color-light-alt) !important;
--pf-text-muted: var(--color-light-alt) !important;
--pf-background: var(--color-dark-alt) !important;
--pf-border: var(--color-pink-light) !important;
--pf-border-focus: var(--color-pink-light) !important;
--pf-skeleton: var(--color-dark) !important;
--pf-skeleton-shine: var(--color-dark) !important;
--pf-hover: var(--color-dark) !important;
--pf-mark: var(--color-teal-light) !important;
--pf-outline-focus: var(--color-teal-light) !important;
/* Error */
--pf-error-bg: var(--color-dark-alt) !important;
--pf-error-border: var(--color-red-light) !important;
--pf-error-text: var(--color-red-light) !important;
--pf-error-text-secondary: var(--color-red-light) !important;
}
pagefind-searchbox input {
border-width: .125rem !important;
}
pagefind-searchbox input:not(:focus-visible) {
box-shadow: var(--pf-shadow-md) !important;
}
@media (max-width: 650px) {
.pf-trigger-shortcut {
display: none !important;
}
}
.pf-searchbox-dropdown,
.pf-searchbox-footer {
border-width: .125rem !important;
}
.pf-error {
margin-top: .5rem !important;
}
+103
View File
@@ -0,0 +1,103 @@
#toc {
float: right;
margin: 1rem 0 1.5rem 1.5rem;
width: fit-content;
max-width: 55%;
}
@media (max-width: 900px) {
#toc {
float: unset;
margin-top: 2rem;
margin-left: .5rem;
width: calc(100% - .5rem);
max-width: unset;
}
}
#toc details {
border: thick solid var(--color-pink);
border-radius: 1rem;
margin-top: 1rem;
background-color: var(--color-bg);
}
#toc summary {
position: relative;
top: -1.5rem;
left: -.75rem;
width: fit-content;
background: var(--color-bg);
border-radius: .5rem;
cursor: pointer;
padding-inline-end: .25rem;
}
#toc summary:focus-visible {
outline: .15rem solid var(--color-teal);
}
#toc summary::marker {
font-size: 2.35rem;
}
#toc h2 {
margin-top: 0;
display: inline;
line-height: normal;
}
#toc nav {
position: relative;
top: -1.25rem;
}
/* `tree` style toc */
#toc nav > ol {
margin-inline: 1rem;
}
#toc ol {
margin: 0;
}
#toc li {
position: relative;
padding-inline-start: 1em;
list-style: none;
margin-block: 0;
margin-left: .35rem;
}
#toc li::before,
#toc li::after {
display: block;
position: absolute;
box-sizing: border-box;
inset-block: 0 auto;
inset-inline: 0 auto;
inline-size: .75em;
border-inline-start: .1rem solid var(--color-pink);
}
#toc li::before {
block-size: .5lh;
border-block-end: .1rem solid var(--color-pink);
content: "";
}
#toc li:not(:last-child)::after {
block-size: 100%;
content: "";
}
/* underlines are unnecessary in this context */
#toc a {
text-decoration: none;
color: var(--color-blue);
font-weight: bold;
}
#toc a:focus-visible {
outline-color: var(--color-pink);
}
+1 -1
View File
@@ -17,6 +17,7 @@
gap: .5rem;
list-style: none;
margin: 0;
margin-left: auto;
}
.post-tags li {
@@ -72,4 +73,3 @@
left: .1rem;
box-shadow: .05rem .05rem var(--color-shadow);
}
+16
View File
@@ -34,8 +34,24 @@
.job-details a {
font-size: 1rem;
font-family: var(--font-family);
}
.job p {
margin-top: 0;
}
.job li strong:not(a) {
color: var(--color-teal);
}
.testimonial {
font-style: italic;
text-align: right;
color: var(--color-teal);
/* reset some of the default bq styling */
border-left: none;
border-radius: 0;
background-color: transparent;
margin-top: 0;
}
+66 -5
View File
@@ -1,9 +1,17 @@
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';
import { chunk } from "lodash-es";
import pluginFilters from "./_config/filters.js";
@@ -12,6 +20,23 @@ export default async function(eleventyConfig) {
/* Markdown HTML attribute parsing */
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(attrs));
/* Markdown apply target="_blank" to all external links */
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownitLinkAttributes, {
matcher(href) {
return href.match(/^https?:\/\//);
},
attrs: {
target: "_blank",
rel: "external",
},
}));
/* Markdown apply ID attributes to headers */
eleventyConfig.amendLibrary("md", (mdLib) => mdLib.use(markdownitIdAttributes, {
level: [2, 3, 4],
tabIndex: false,
}));
/* Bundles */
/* CSS */
eleventyConfig.addBundle("css", {
@@ -29,7 +54,7 @@ export default async function(eleventyConfig) {
/* Tag pagination */
eleventyConfig.addCollection("tagPagination", function(collection) {
let tagSet = new Set(collection.getAllSorted().flatMap((post) => post.data.tags || []));
tagSet = tagSet.difference(new Set(["posts", "gallery", "reference"]));
tagSet = tagSet.difference(new Set(["posts", "gallery", "reference", "blur"]));
let paginationSize = 13;
let tagMap = [];
@@ -52,6 +77,12 @@ export default async function(eleventyConfig) {
return tagMap;
});
/* Passthrough */
eleventyConfig
.addPassthroughCopy("favicon.ico")
.addPassthroughCopy("fonts")
.addPassthroughCopy("robots.txt");
/* Plugins */
/* All filters from _config/filters.js */
eleventyConfig.addPlugin(pluginFilters);
@@ -60,6 +91,7 @@ export default async function(eleventyConfig) {
eleventyConfig.addPlugin(feedPlugin, {
type: "atom", // or "rss", "json"
outputPath: "/feed.xml",
stylesheet: "/feed.xsl",
collection: {
name: "posts", // iterate over `collections.posts`
limit: 10, // 0 means no limit
@@ -76,6 +108,9 @@ export default async function(eleventyConfig) {
}
});
/* HTML base */
eleventyConfig.addPlugin(HtmlBasePlugin);
/* Images */
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
// output image formats
@@ -91,17 +126,36 @@ export default async function(eleventyConfig) {
decoding: "async",
},
},
filenameFormat: function (hash, src, width, format, options) {
// If you're building multiple widths
// const extension = path.extname(src);
// const name = path.basename(src, extension);
// return `${name}-${width}.${extension}`;
return path.basename(src);
},
});
/* 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) {
data.title = `${data.title} (draft)`;
}
if(data.draft && process.env.ELEVENTY_RUN_MODE === "build") {
return false;
}
});
/* Shortcodes */
eleventyConfig.addShortcode("currentBuildDate", () => {
return (new Date()).toISOString();
@@ -109,6 +163,13 @@ export default async function(eleventyConfig) {
/* Watch when serving */
eleventyConfig.addWatchTarget("css");
eleventyConfig.addWatchTarget("js");
/* Implement search */
/* From https://rknight.me/blog/using-pagefind-with-eleventy-for-search/ */
eleventyConfig.on('eleventy.after', () => {
execSync(`npx pagefind --site _site --glob \"**/*.html\"`, { encoding: 'utf-8' })
});
};
export const config = {
Executable
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+33
View File
@@ -0,0 +1,33 @@
# End User License Agreement (EULA)
This End User License Agreement is a legal agreement between the licensee (you), and the author of this font, Christopher Kirk-Nielsen.
You are granted a perpetual, non-exclusive license to use the font with your purchase.
## By downloading or purchasing this font, you agree to the following terms:
**For use on a website**
Use on any website owned or under the licensee's control, no pageview limits.
**For use in an app**
App embed allowed for 1 app. Another app = another license.
**Distribution**
The font may not be redistributed.
**Personal modification**
The font may be modified for personal use, but cannot be redistributed.
**Do not use the font for hateful purposes**
The font is not allowed to be used in any material promoting hate speech of any kind, including but not limited to: racism, xenophobia, homophobia, sexism, or other types of discrimination.
**Do not use the font with AI**
The font is not allowed to be used in, or in training of, AI/LLMs.
**Use at your own risk**
Any usage of the fonts are at the licensee's own risk.
For ebooks and other commercial use, or any other specific needs, email me to figure something out: chriskirknielsen+fonts[at]gmail.com
Thank you very much for the support!
Christopher Kirk-Nielsen (https://chriskirknielsen.com/fonts/)
Binary file not shown.
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
/* don't even bother on mobile */
if (window.innerWidth > 650) {
const dialog = document.querySelector("dialog");
const closeButton = document.querySelector(".close-dialog");
const hero = document.querySelector(".hero");
hero.tabIndex = 0;
hero.addEventListener("click", (e) => dialog.showModal());
hero.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
dialog.showModal();
}
});
closeButton.addEventListener("click", (e) => dialog.close());
closeButton.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
dialog.close();
}
});
}
+35
View File
@@ -0,0 +1,35 @@
const THEME = "theme";
const saveTheme = (themeValue) => {
localStorage.setItem(THEME, themeValue);
};
const themeLight = document.getElementById("theme-light");
themeLight.addEventListener("input", (e) => {
saveTheme(themeLight.value);
});
const themeAuto = document.getElementById("theme-auto");
themeAuto.addEventListener("input", (e) => {
saveTheme(themeAuto.auto);
});
const themeDark = document.getElementById("theme-dark");
themeDark.addEventListener("input", (e) => {
saveTheme(themeDark.value);
});
var currentThemeValue = localStorage.getItem(THEME);
switch (currentThemeValue) {
case "light":
themeLight.checked = true;
themeAuto.checked = false;
break;
case "dark":
themeDark.checked = true;
themeAuto.checked = false;
break;
case "auto":
default:
themeAuto.checked = true;
}
+1
Submodule leecat.art-site added at 7e4d8c1a97.
Executable
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
# check for mogrify
which mogrify > /dev/null
if [[ $? -ne 0 ]]
then
echo "mogrify not found, run the following:"
echo "sudo apt install imagemagick"
exit 1
fi
# finds pattern [number]x[number]
REGEX="([0-9]+)x[0-9]+"
MAX_WIDTH=1200
for FILE in $(find src/img)
do
# skip directories
if [ -d $FILE ]
then
continue
fi
# `identify` prints out file info incl. dimensions in pixels
if [[ $(identify $FILE) =~ $REGEX ]]
then
# regex capture groups
WIDTH=${BASH_REMATCH[1]}
# resize if too large
if (( $WIDTH > $MAX_WIDTH ))
then
echo "resizing $FILE with width $WIDTH"
mogrify -resize 1200x $FILE
fi
fi
done
+714 -143
View File
File diff suppressed because it is too large. Load diff
+8 -4
View File
@@ -2,10 +2,9 @@
"name": "leecat.art",
"version": "1.0.0",
"description": "Lee's personal website, take 2, built with 11ty",
"main": "index.js",
"scripts": {
"build": "rm -rf _site && npx @11ty/eleventy",
"start": "rm -rf _site && npx @11ty/eleventy --serve --quiet"
"build": "rm -rf _site && npx @11ty/eleventy --quiet",
"dev": "rm -rf _site && npx @11ty/eleventy --serve --quiet --output _site"
},
"keywords": [],
"author": "Lee Cattarin",
@@ -20,7 +19,12 @@
"@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"
"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"
}
}
+151
View File
@@ -0,0 +1,151 @@
# Sourced from https://codeberg.org/superseriousbusiness/gotosocial/
# AI scrapers and the like.
# https://github.com/ai-robots-txt/ai.robots.txt/
User-agent: AddSearchBot
User-agent: AI2Bot
User-agent: AI2Bot-DeepResearchEval
User-agent: Ai2Bot-Dolma
User-agent: aiHitBot
User-agent: amazon-kendra
User-agent: Amazonbot
User-agent: AmazonBuyForMe
User-agent: Andibot
User-agent: Anomura
User-agent: anthropic-ai
User-agent: Applebot
User-agent: Applebot-Extended
User-agent: atlassian-bot
User-agent: Awario
User-agent: bedrockbot
User-agent: bigsur.ai
User-agent: Bravebot
User-agent: Brightbot 1.0
User-agent: BuddyBot
User-agent: Bytespider
User-agent: CCBot
User-agent: Channel3Bot
User-agent: ChatGLM-Spider
User-agent: ChatGPT Agent
User-agent: ChatGPT-User
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: Claude-Web
User-agent: ClaudeBot
User-agent: Cloudflare-AutoRAG
User-agent: CloudVertexBot
User-agent: cohere-ai
User-agent: cohere-training-data-crawler
User-agent: Cotoyogi
User-agent: Crawl4AI
User-agent: Crawlspace
User-agent: Datenbank Crawler
User-agent: DeepSeekBot
User-agent: Devin
User-agent: Diffbot
User-agent: DuckAssistBot
User-agent: Echobot Bot
User-agent: EchoboxBot
User-agent: FacebookBot
User-agent: facebookexternalhit
User-agent: Factset_spyderbot
User-agent: FirecrawlAgent
User-agent: FriendlyCrawler
User-agent: Gemini-Deep-Research
User-agent: Google-CloudVertexBot
User-agent: Google-Extended
User-agent: Google-Firebase
User-agent: Google-NotebookLM
User-agent: GoogleAgent-Mariner
User-agent: GoogleOther
User-agent: GoogleOther-Image
User-agent: GoogleOther-Video
User-agent: GPTBot
User-agent: iAskBot
User-agent: iaskspider
User-agent: iaskspider/2.0
User-agent: IbouBot
User-agent: ICC-Crawler
User-agent: ImagesiftBot
User-agent: imageSpider
User-agent: img2dataset
User-agent: ISSCyberRiskCrawler
User-agent: Kangaroo Bot
User-agent: KlaviyoAIBot
User-agent: KunatoCrawler
User-agent: laion-huggingface-processor
User-agent: LAIONDownloader
User-agent: LCC
User-agent: LinerBot
User-agent: Linguee Bot
User-agent: LinkupBot
User-agent: Manus-User
User-agent: meta-externalagent
User-agent: Meta-ExternalAgent
User-agent: meta-externalfetcher
User-agent: Meta-ExternalFetcher
User-agent: meta-webindexer
User-agent: MistralAI-User
User-agent: MistralAI-User/1.0
User-agent: MyCentralAIScraperBot
User-agent: netEstate Imprint Crawler
User-agent: NotebookLM
User-agent: NovaAct
User-agent: OAI-SearchBot
User-agent: omgili
User-agent: omgilibot
User-agent: OpenAI
User-agent: Operator
User-agent: PanguBot
User-agent: Panscient
User-agent: panscient.com
User-agent: Perplexity-User
User-agent: PerplexityBot
User-agent: PetalBot
User-agent: PhindBot
User-agent: Poggio-Citations
User-agent: Poseidon Research Crawler
User-agent: QualifiedBot
User-agent: QuillBot
User-agent: quillbot.com
User-agent: SBIntuitionsBot
User-agent: Scrapy
User-agent: SemrushBot-OCOB
User-agent: SemrushBot-SWA
User-agent: ShapBot
User-agent: Sidetrade indexer bot
User-agent: Spider
User-agent: TerraCotta
User-agent: Thinkbot
User-agent: TikTokSpider
User-agent: Timpibot
User-agent: TwinAgent
User-agent: VelenPublicWebCrawler
User-agent: WARDBot
User-agent: Webzio-Extended
User-agent: webzio-extended
User-agent: wpbot
User-agent: WRTNBot
User-agent: YaK
User-agent: YandexAdditional
User-agent: YandexAdditionalBot
User-agent: YouBot
User-agent: ZanistaBot
Disallow: /
# Marketing/SEO "intelligence" data scrapers
User-agent: AwarioRssBot
User-agent: AwarioSmartBot
User-agent: DataForSeoBot
User-agent: magpie-crawler
User-agent: Meltwater
User-agent: peer39_crawler
User-agent: peer39_crawler/1.0
User-agent: PiplBot
User-agent: scoop.it
User-agent: Seekr
Disallow: /
# Rules for everything else
User-agent: *
Crawl-delay: 500
+1 -2
View File
@@ -1,6 +1,5 @@
---
layout: page-lists.njk
permalink: gallery/index.html
pagination:
data: collections["gallery"]
size: 13
@@ -14,7 +13,7 @@ icon: fa-regular fa-images
label: view the gallery
---
<p class="centered">the gallery page is for finished art</p>
<p class="centered">the gallery section is for finished art</p>
<p class="centered">(or <a href="/tags/">browse by tags</a>)</p>
{% include "postlist.njk" %}
Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 KiB

Loaded 100 of 485 files, more files were not shown because too many files have changed in this diff. Show more