1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 8 9 <!-- Google fonts support --> 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 13 <!-- Theme styles --> 14 <link rel="stylesheet" href="https://keithsolomon.net/wp-content/themes/ksolo-2024/style.css?v=1737652681"> 15 16 <title>Weekend Rec Builds – KeithSolomon.net</title> 17<meta name='robots' content='max-image-preview:large' /> 18<link rel='dns-prefetch' href='//secure.gravatar.com' /> 19<link rel='dns-prefetch' href='//www.googletagmanager.com' /> 20<link rel='dns-prefetch' href='//stats.wp.com' /> 21<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 22<link rel='dns-prefetch' href='//v0.wordpress.com' /> 23<link rel='preconnect' href='//i0.wp.com' /> 24<link rel='preconnect' href='//c0.wp.com' /> 25<link rel="alternate" type="application/rss+xml" title="KeithSolomon.net » Weekend Rec Builds Category Feed" href="https://keithsolomon.net/category/weekend-rec-builds/feed/" /> 26<style type="text/css" media="all">@font-face{font-family:'Raleway';font-style:italic;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptsg8zYS_SKggPNyCg4QIFqL_KWxWMT.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-style:italic;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptsg8zYS_SKggPNyCg4SYFqL_KWxWMT.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Raleway';font-style:italic;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptsg8zYS_SKggPNyCg4QoFqL_KWxWMT.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Raleway';font-style:italic;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptsg8zYS_SKggPNyCg4Q4FqL_KWxWMT.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-style:italic;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptsg8zYS_SKggPNyCg4TYFqL_KWxQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Raleway';font-display:block;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Raleway';font-display:block;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Raleway';font-display:block;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Raleway';font-display:block;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Raleway';font-display:block;font-style:normal;font-weight:100 900;font-display:swap;
26src:url(https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style> 27<style id="wp-img-auto-sizes-contain-inline-css"> 28img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 29/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 30</style> 31<style id="wp-block-library-inline-css"> 32:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
32--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 33 34/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 35</style> 36<style id="classic-theme-styles-inline-css"> 37/*! This file is auto-generated */ 38.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 39/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 40</style> 41 42<style id="global-styles-inline-css"> 43:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
430) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
43.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 44/*# sourceURL=global-styles-inline-css */ 45</style> 46
47<script defer id="wpo_min-header-0-js" src="https://keithsolomon.net/wp-content/cache/wpo-minify/1777077741/assets/wpo-minify-header-kintsu-analytics1776712382.min.js"></script>
47 48 49<!-- Google tag (gtag.js) snippet added by Site Kit --> 50<!-- Google Analytics snippet added by Site Kit -->
vendor: 80 bytes, lines 50-51
50 51<script id="google_gtagjs-js" src="https://www.googletagmanager.com/gtag/js?id=
51GT-WB5HHVJ
vendor: 18 bytes, line 51
51" async></script>
52<script id="google_gtagjs-js-after"> 53window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);} 54gtag("set","linker",{"domains":["keithsolomon.net"]}); 55gtag("js", new Date()); 56gtag("set", "developer_id.dZTNiMT", true); 57gtag("config", "GT-WB5HHVJ"); 58//# sourceURL=google_gtagjs-js-after 59</script>
59 60<link rel="https://api.w.org/" href="https://keithsolomon.net/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://keithsolomon.net/wp-json/wp/v2/categories/261" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://keithsolomon.net/xmlrpc.php?rsd" /> 61 62<meta name="generator" content="Site Kit by Google 1.188.0" /> 63<meta name="description" content="A Posse Ad Esse" /> 64 <style>img#wpstats{display:none}</style> 65 66<!-- Jetpack Open Graph Tags --> 67<meta property="og:type" content="website" /> 68<meta property="og:title" content="Weekend Rec Builds – KeithSolomon.net" /> 69<meta property="og:url" content="https://keithsolomon.net/category/weekend-rec-builds/" /> 70<meta property="og:description" content="Sometimes a project doesnât need to be a sprawling framework or a months-long refactor. Sometimes itâs just about taking something you love and making it more fun to play with." /> 71<meta property="og:site_name" content="KeithSolomon.net" /> 72<meta property="og:image" content="https://s0.wp.com/i/blank.jpg" /> 73<meta property="og:image:width" content="200" /> 74<meta property="og:image:height" content="200" /> 75<meta property="og:image:alt" content="" /> 76<meta property="og:locale" content="en_US" /> 77<meta name="twitter:site" content="@KeithInWPG" /> 78 79<!-- End Jetpack Open Graph Tags --> 80</head> 81 82<body class="bg-slate-800"> 83 <a class="sr-only focus:not-sr-only font-bold ml-2 px-8 py-6 bg-stone-200 text-blue-700" href="#content">Skip to content</a> 84 <header class="p-4 bg-slate-600 text-gray-800 shadow-lg"> 85 <div class="container flex justify-between h-12 mx-auto"> 86 <nav class="navMain" aria-label="Main navigation"> 87 <ul id="primary-nav" class="items-stretch hidden lg:flex space-x-3"> 88 <li id="menu-item-491" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-491"><a href="https://keithsolomon.net/">Home</a></li> 89<li id="menu-item-667" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-667"><a href="https://keithsolomon.net/wordpress/">Extending WordPress</a></li> 90<li id="menu-item-495" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-495"><a href="https://keithsolomon.net/contact/">Contact Me</a></li> 91 </ul> 92 </nav> 93 94 <h1 class="text-38px m-0 p-0 uppercase text-sky-200 text-shadow-lg"> 95 <a rel="noopener noreferrer" href="https://keithsolomon.net" aria-label="Back to homepage" class="flex items-start p-2 gap-x-4 font-bold prose-img:hover:animate-spin-slow"> 96 <span class="sr-only">Back to homepage</span> 97 <span>Keith</span> 98 <img aria-hidden="true" src="https://keithsolomon.net/wp-content/themes/ksolo-2024/images/keith-avatar-250x250.webp" alt="My avatar" class="hidden lg:block rounded-full w-16 h-auto shadow-lg"> 99 <span>Solomon</span> 100 </a> 101 </h1> 102 103 <div class="flex items-center md:space-x-4"> 104 <div class="relative hidden lg:block"> 105 <form role="search" method="get" class="search-form" action="https://keithsolomon.net/" aria-label="Search Form"> 106 <span class="absolute inset-y-0 left-0 flex items-center pl-2"> 107 <button type="submit" title="Search" class="p-1 focus:outline-none focus:ring"> 108 <svg aria-label="Search" fill="currentColor" viewBox="0 0 512 512" class="w-4 h-4 text-gray-800"> 109 <path d="M479.6,399.716l-81.084-81.084-62.368-25.767A175.014,175.014,0,0,0,368,192c0-97.047-78.953-176-176-176S16,94.953,16,192,94.953,368,192,368a175.034,175.034,0,0,0,101.619-32.377l25.7,62.2L400.4,478.911a56,56,0,1,0,79.2-79.195ZM48,192c0-79.4,64.6-144,144-144s144,64.6,144,144S271.4,336,192,336,48,271.4,48,192ZM456.971,456.284a24.028,24.028,0,0,1-33.942,0l-76.572-76.572-23.894-57.835L380.4,345.771l76.573,76.572A24.028,24.028,0,0,1,456.971,456.284Z"> 110 </path> 111 </svg> 112 </button> 113 </span> 114 115 <input aria-label="Search Input" type="search" name="s" placeholder="Search..." value="" class="w-32 py-2 pl-10 text-sm rounded-md sm:w-auto focus:outline-none bg-gray-100 text-gray-800 focus::bg-gray-50"> 116 </form> 117 </div> 118 </div> 119 120 <button title="Open menu" type="button" class="px-4 py-2 lg:hidden" onClick="document.getElementById('menuMobile').classList.toggle('hidden')"> 121 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-10 h-10 text-gray-300"> 122 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path> 123 </svg> 124 </button> 125 </div> 126 127 <div id="menuMobile" class="hidden w-full py-4"> 128 <form role="search" method="get" class="search-form relative w-full mb-8" action="https://keithsolomon.net/" aria-label="Mobile Search Form">
129 <span class="absolute inset-y-0 left-0 flex items-center pl-2"> 130 <button type="submit" title="Search" class="p-1 focus:outline-none focus:ring"> 131 <svg aria-label="Search" fill="currentColor" viewBox="0 0 512 512" class="w-4 h-4 text-gray-800"> 132 <path d="M479.6,399.716l-81.084-81.084-62.368-25.767A175.014,175.014,0,0,0,368,192c0-97.047-78.953-176-176-176S16,94.953,16,192,94.953,368,192,368a175.034,175.034,0,0,0,101.619-32.377l25.7,62.2L400.4,478.911a56,56,0,1,0,79.2-79.195ZM48,192c0-79.4,64.6-144,144-144s144,64.6,144,144S271.4,336,192,336,48,271.4,48,192ZM456.971,456.284a24.028,24.028,0,0,1-33.942,0l-76.572-76.572-23.894-57.835L380.4,345.771l76.573,76.572A24.028,24.028,0,0,1,456.971,456.284Z"> 133 </path> 134 </svg> 135 </button> 136 </span> 137 138 <input aria-label="Search Input" type="search" name="s" placeholder="Search..." value="" class="w-full py-2 pl-10 text-sm rounded-md sm:w-auto focus:outline-none bg-gray-100 text-gray-800 focus::bg-gray-50"> 139 </form> 140 141 <nav id="navMobile" class="w-full" aria-label="Mobile navigation"> 142 <ul class="flex flex-col items-center space-y-2 prose-a:text-sky-300 font-bold text-30px"> 143 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-491"><a href="https://keithsolomon.net/">Home</a></li> 144<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-667"><a href="https://keithsolomon.net/wordpress/">Extending WordPress</a></li> 145<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-495"><a href="https://keithsolomon.net/contact/">Contact Me</a></li> 146 </ul> 147 </nav> 148 149 <div class="flex justify-center space-x-4 prose-a:text-sky-800 mt-8"> 150 <a rel="noopener noreferrer" title="Find me on Instagram" href="https://instagram.com/ksolomon" target="_blank" title="Instagram" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 151 <span class="sr-only">Instagram</span> 152 <svg aria-label="Instagram" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="currentColor" class="w-4 h-4"> 153 <path d="M16 0c-4.349 0-4.891 0.021-6.593 0.093-1.709 0.084-2.865 0.349-3.885 0.745-1.052 0.412-1.948 0.959-2.833 1.849-0.891 0.885-1.443 1.781-1.849 2.833-0.396 1.020-0.661 2.176-0.745 3.885-0.077 1.703-0.093 2.244-0.093 6.593s0.021 4.891 0.093 6.593c0.084 1.704 0.349 2.865 0.745 3.885 0.412 1.052 0.959 1.948 1.849 2.833 0.885 0.891 1.781 1.443 2.833 1.849 1.020 0.391 2.181 0.661 3.885 0.745 1.703 0.077 2.244 0.093 6.593 0.093s4.891-0.021 6.593-0.093c1.704-0.084 2.865-0.355 3.885-0.745 1.052-0.412 1.948-0.959 2.833-1.849 0.891-0.885 1.443-1.776 1.849-2.833 0.391-1.020 0.661-2.181 0.745-3.885 0.077-1.703 0.093-2.244 0.093-6.593s-0.021-4.891-0.093-6.593c-0.084-1.704-0.355-2.871-0.745-3.885-0.412-1.052-0.959-1.948-1.849-2.833-0.885-0.891-1.776-1.443-2.833-1.849-1.020-0.396-2.181-0.661-3.885-0.745-1.703-0.077-2.244-0.093-6.593-0.093zM16 2.88c4.271 0 4.781 0.021 6.469 0.093 1.557 0.073 2.405 0.333 2.968 0.553 0.751 0.291 1.276 0.635 1.844 1.197 0.557 0.557 0.901 1.088 1.192 1.839 0.22 0.563 0.48 1.411 0.553 2.968 0.072 1.688 0.093 2.199 0.093 6.469s-0.021 4.781-0.099 6.469c-0.084 1.557-0.344 2.405-0.563 2.968-0.303 0.751-0.641 1.276-1.199 1.844-0.563 0.557-1.099 0.901-1.844 1.192-0.556 0.22-1.416 0.48-2.979 0.553-1.697 0.072-2.197 0.093-6.479 0.093s-4.781-0.021-6.48-0.099c-1.557-0.084-2.416-0.344-2.979-0.563-0.76-0.303-1.281-0.641-1.839-1.199-0.563-0.563-0.921-1.099-1.197-1.844-0.224-0.556-0.48-1.416-0.563-2.979-0.057-1.677-0.084-2.197-0.084-6.459 0-4.26 0.027-4.781 0.084-6.479 0.083-1.563 0.339-2.421 0.563-2.979 0.276-0.761 0.635-1.281 1.197-1.844 0.557-0.557 1.079-0.917 1.839-1.199 0.563-0.219 1.401-0.479 2.964-0.557 1.697-0.061 2.197-0.083 6.473-0.083zM16 7.787c-4.541 0-8.213 3.677-8.213 8.213 0 4.541 3.677 8.213 8.213 8.213 4.541 0 8.213-3.677 8.213-8.213 0-4.541-3.677-8.213-8.213-8.213zM16 21.333c-2.948 0-5.333-2.385-5.333-5.333s2.385-5.333 5.333-5.333c2.948 0 5.333 2.385 5.333 5.333s-2.385 5.333-5.333 5.333zM26.464 7.459c0 1.063-0.865 1.921-1.923 1.921-1.063 0-1.921-0.859-1.921-1.921 0-1.057 0.864-1.917 1.921-1.917s1.923 0.86 1.923 1.917z"> 154 </path> 155 </svg> 156 </a>
157 <a rel="noopener noreferrer" title="Find me on Pinterest" href="https://pinterest.com/ksolomon75" target="_blank" title="Pinterest" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 158 <span class="sr-only">Pinterest</span> 159 <svg aria-label="Pinterest" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 160 <path d="M16.021 0c-8.828 0-15.984 7.156-15.984 15.984 0 6.771 4.214 12.552 10.161 14.88-0.141-1.266-0.266-3.203 0.052-4.583 0.292-1.25 1.875-7.943 1.875-7.943s-0.479-0.964-0.479-2.375c0-2.219 1.292-3.88 2.891-3.88 1.365 0 2.026 1.021 2.026 2.25 0 1.37-0.87 3.422-1.323 5.323-0.38 1.589 0.797 2.885 2.365 2.885 2.839 0 5.026-2.995 5.026-7.318 0-3.813-2.75-6.49-6.677-6.49-4.547 0-7.214 3.417-7.214 6.932 0 1.375 0.526 2.854 1.188 3.651 0.13 0.161 0.146 0.302 0.109 0.464-0.12 0.5-0.391 1.599-0.443 1.818-0.073 0.297-0.229 0.359-0.536 0.219-1.99-0.922-3.245-3.839-3.245-6.193 0-5.036 3.667-9.672 10.563-9.672 5.542 0 9.854 3.958 9.854 9.229 0 5.516-3.474 9.953-8.307 9.953-1.62 0-3.141-0.839-3.677-1.839l-1 3.797c-0.359 1.391-1.339 3.135-2 4.193 1.5 0.458 3.078 0.714 4.734 0.714 8.813 0 15.979-7.151 15.979-15.984 0-8.828-7.167-15.979-15.979-15.979z"> 161 </path> 162 </svg> 163 </a> 164 <a rel="noopener noreferrer" title="Find me on Twitter" href="https://twitter.com/KeithInWPG" target="_blank" title="Twitter" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 165 <span class="sr-only">Twitter</span> 166 <svg aria-label="Twitter" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 167 <path d="M31.937 6.093c-1.177 0.516-2.437 0.871-3.765 1.032 1.355-0.813 2.391-2.099 2.885-3.631-1.271 0.74-2.677 1.276-4.172 1.579-1.192-1.276-2.896-2.079-4.787-2.079-3.625 0-6.563 2.937-6.563 6.557 0 0.521 0.063 1.021 0.172 1.495-5.453-0.255-10.287-2.875-13.52-6.833-0.568 0.964-0.891 2.084-0.891 3.303 0 2.281 1.161 4.281 2.916 5.457-1.073-0.031-2.083-0.328-2.968-0.817v0.079c0 3.181 2.26 5.833 5.26 6.437-0.547 0.145-1.131 0.229-1.724 0.229-0.421 0-0.823-0.041-1.224-0.115 0.844 2.604 3.26 4.5 6.14 4.557-2.239 1.755-5.077 2.801-8.135 2.801-0.521 0-1.041-0.025-1.563-0.088 2.917 1.86 6.36 2.948 10.079 2.948 12.067 0 18.661-9.995 18.661-18.651 0-0.276 0-0.557-0.021-0.839 1.287-0.917 2.401-2.079 3.281-3.396z"> 168 </path> 169 </svg> 170 </a> 171 <a rel="noopener noreferrer" title="Find me on Facebook" href="https://facebook.com/ksolomon" target="_blank" title="Facebook" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 172 <span class="sr-only">Facebook</span> 173 <svg aria-label="Facebook" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 174 <path d="M32 16c0-8.839-7.167-16-16-16-8.839 0-16 7.161-16 16 0 7.984 5.849 14.604 13.5 15.803v-11.177h-4.063v-4.625h4.063v-3.527c0-4.009 2.385-6.223 6.041-6.223 1.751 0 3.584 0.312 3.584 0.312v3.937h-2.021c-1.984 0-2.604 1.235-2.604 2.5v3h4.437l-0.713 4.625h-3.724v11.177c7.645-1.199 13.5-7.819 13.5-15.803z"> 175 </path> 176 </svg> 177 </a> 178 </div> 179 </div> 180 </header> 181 182 <main class="pt-12"> 183 184<!-- Blog content --> 185<section id="archivePage" class="container max-w-6xl p-6 mx-auto"> 186 <div class="postFeatured block rounded-md rounded-b-none"> 187 <img src="https://picsum.photos/480/360.webp?random=9999" alt="" class="object-cover rounded-md rounded-b-none w-full h-auto max-h-128"> 188 </div> 189 190 <div id="content" class="p-6 bg-gray-300 text-gray-800"> 191 <span class="relative flex justify-center mt-16 mb-8"> 192 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-slate-800 to-transparent opacity-75"></div> 193 194 <h2 class="relative z-10 font-semibold leading-6 bg-gray-300 text-gray-800 px-4">Archive for Category: <span>
194Weekend Rec Builds</span></h2> 195 </span> 196 197 <div class="postGrid grid gap-6 justify-center grid-cols-1 md:grid-cols-2 lg:grid-cols-3"> 198 <div class="w-full mx-auto bg-gray-800 rounded-md shadow-xl h-full flex flex-col"> 199 <img role="presentation" class="object-cover w-full rounded-md rounded-b-none h-44 bg-gray-00" src="https://i0.wp.com/keithsolomon.net/wp-content/uploads/2025/12/wrb-3d-print-estimator.webp?fit=1024%2C1024&ssl=1" alt="Weekend Rec Builds: 3D Print Estimator"> 200 201 <div class="px-6 pt-6 pb-4"> 202 <div class="postMeta"> 203 <a rel="noopener noreferrer" href="https://keithsolomon.net/weekend-rec-builds-3d-print-estimator/" class="text-sky-400 hover:opacity-60 hover:no-underline focus:no-underline transition-all duration-500"> 204 <h3 class="text-lg sm:text-xl font-semibold">Weekend Rec Builds: 3D Print Estimator</h3> 205 </a> 206 207 <div class="text-xs text-gray-300 text-right">December 7th, 2025</div> 208 </div> 209 210 <div class="separator my-3"> 211 <div class="relative flex justify-center"> 212 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 213 </div> 214 </div> 215 216 <div class="postExcerpt prose prose-sm prose-p:text-gray-200 prose-p:mb-1 prose-p:leading-tight"> 217 <p>This project started (as so many do) with a message from my brother with 2 links. He was looking at printing some stuff for his kid, and asked the inevitable question:</p> 218<p>âHow much filament will this use, and how long will it take?â</p> 219<p>And there were only 100 individual STL files to check.</p> 220 </div> 221 </div> 222 223 <div class="separator mt-auto mb-2 px-6"> 224 <div class="relative flex justify-center"> 225 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 226 </div> 227 </div> 228 229 <div class="px-6 pb-6 text-sm text-right italic text-gray-200 prose-a:text-sky-400 hover:prose-a:opacity-60 prose-a:transition-all prose-a:duration-500">Posted in: <a class="text-sky-800 hover:opacity-80" href="https://keithsolomon.net/category/weekend-rec-builds/" title="View all posts in Weekend Rec Builds">Weekend Rec Builds</a></div> 230 </div> 231 <div class="w-full mx-auto bg-gray-800 rounded-md shadow-xl h-full flex flex-col"> 232 <img role="presentation" class="object-cover w-full rounded-md rounded-b-none h-44 bg-gray-00" src="https://i0.wp.com/keithsolomon.net/wp-content/uploads/2025/10/cifs-watch-post-hero.webp?fit=2208%2C840&ssl=1" alt="Weekend Rec Builds: cifs-watch"> 233 234 <div class="px-6 pt-6 pb-4"> 235 <div class="postMeta"> 236 <a rel="noopener noreferrer" href="https://keithsolomon.net/weekend-rec-builds-cifs-watch/" class="text-sky-400 hover:opacity-60 hover:no-underline focus:no-underline transition-all duration-500"> 237 <h3 class="text-lg sm:text-xl font-semibold">Weekend Rec Builds: cifs-watch</h3> 238 </a> 239 240 <div class="text-xs text-gray-300 text-right">October 20th, 2025</div> 241 </div> 242 243 <div class="separator my-3"> 244 <div class="relative flex justify-center"> 245 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 246 </div> 247 </div> 248 249 <div class="postExcerpt prose prose-sm prose-p:text-gray-200 prose-p:mb-1 prose-p:leading-tight"> 250 <p>It all started with an email from my Proxmox box, saying that the boot partition was out of spaceâ¦</p> 251<p>Every homelab has that one little annoyance that slowly drives you up the wall. For me, it was CIFS shares occasionally dropping off the radar. Sometimes itâs the network hiccuping, sometimes itâs the file server rebooting, and sometimes itâs just gremlins.</p> 252 </div> 253 </div> 254
255 <div class="separator mt-auto mb-2 px-6"> 256 <div class="relative flex justify-center"> 257 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 258 </div> 259 </div> 260 261 <div class="px-6 pb-6 text-sm text-right italic text-gray-200 prose-a:text-sky-400 hover:prose-a:opacity-60 prose-a:transition-all prose-a:duration-500">Posted in: <a class="text-sky-800 hover:opacity-80" href="https://keithsolomon.net/category/homelab/" title="View all posts in Homelab">Homelab</a>, <a class="text-sky-800 hover:opacity-80" href="https://keithsolomon.net/category/weekend-rec-builds/" title="View all posts in Weekend Rec Builds">Weekend Rec Builds</a></div> 262 </div> 263 <div class="w-full mx-auto bg-gray-800 rounded-md shadow-xl h-full flex flex-col"> 264 <img role="presentation" class="object-cover w-full rounded-md rounded-b-none h-44 bg-gray-00" src="https://i0.wp.com/keithsolomon.net/wp-content/uploads/2025/09/hall-of-the-dwarven-king.cover-lmdscp.webp?fit=2208%2C1024&ssl=1" alt="Weekend Rec Build: Hall of the Dwarven King – Web Edition"> 265 266 <div class="px-6 pt-6 pb-4"> 267 <div class="postMeta"> 268 <a rel="noopener noreferrer" href="https://keithsolomon.net/weekend-rec-build-hall-of-the-dwarven-king-web-edition/" class="text-sky-400 hover:opacity-60 hover:no-underline focus:no-underline transition-all duration-500"> 269 <h3 class="text-lg sm:text-xl font-semibold">Weekend Rec Build: Hall of the Dwarven King – Web Edition</h3> 270 </a> 271 272 <div class="text-xs text-gray-300 text-right">September 7th, 2025</div> 273 </div> 274 275 <div class="separator my-3"> 276 <div class="relative flex justify-center"> 277 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 278 </div> 279 </div> 280 281 <div class="postExcerpt prose prose-sm prose-p:text-gray-200 prose-p:mb-1 prose-p:leading-tight"> 282 <p>Sometimes a project doesnât need to be a sprawling framework or a months-long refactor. Sometimes itâs just about taking something you love and making it more fun to play with.</p> 283<p>This weekend, I built a browser-based version of the solo roll-and-build game Hall of the Dwarven King by Robin Gibson. The idea was simple: keep the heart of the original paper sheet, but drop the pencil-and-bookkeeping overhead.</p> 284 </div> 285 </div> 286 287 <div class="separator mt-auto mb-2 px-6"> 288 <div class="relative flex justify-center"> 289 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-gray-200 to-transparent opacity-75"></div> 290 </div> 291 </div> 292 293 <div class="px-6 pb-6 text-sm text-right italic text-gray-200 prose-a:text-sky-400 hover:prose-a:opacity-60 prose-a:transition-all prose-a:duration-500">Posted in: <a class="text-sky-800 hover:opacity-80" href="https://keithsolomon.net/category/weekend-rec-builds/" title="View all posts in Weekend Rec Builds">Weekend Rec Builds</a></div> 294 </div> 295 </div> 296 297 <span class="relative flex justify-center"> 298 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-sky-300 to-transparent opacity-75"></div> 299 </span> 300 301 <div class="flex justify-center dark"> 302 </div> 303 </div> 304</section> 305 306 </main> 307 308 <span class="relative flex justify-center mt-8"> 309 <div class="absolute inset-x-0 top-1/2 h-px -translate-y-1/2 bg-transparent bg-gradient-to-r from-transparent via-sky-300 to-transparent opacity-75"></div> 310 </span> 311 312 <footer> 313 <div class="container flex flex-col px-8 py-4 mx-auto lg:flex-row divide-gray-600 prose-a:text-sky-400 hover:prose-a:opacity-60 prose-a:transition-all prose-a:duration-500"> 314 <ul id="footer-nav" class="text-sky-200 self-center py-6 space-y-4 text-center sm:flex sm:space-y-0 sm:justify-around sm:space-x-4 lg:flex-1 lg:justify-start"> 315 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-491"><a href="https://keithsolomon.net/">Home</a></li> 316<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-667"><a href="https://keithsolomon.net/wordpress/">Extending WordPress</a></li> 317<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-495"><a href="https://keithsolomon.net/contact/">Contact Me</a></li> 318 </ul> 319 320 <div class="flex flex-col justify-center pt-6 lg:pt-0"> 321 <div class="flex justify-center space-x-4 prose-a:text-sky-800 hover:prose-a:opacity-60 prose-a:transition-all prose-a:duration-500"> 322 <a rel="noopener noreferrer" title="Find me on Instagram" href="https://instagram.com/ksolomon" target="_blank" title="Instagram" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl">
323 <span class="sr-only">Instagram</span> 324 <svg aria-label="Instagram" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="currentColor" class="w-4 h-4"> 325 <path d="M16 0c-4.349 0-4.891 0.021-6.593 0.093-1.709 0.084-2.865 0.349-3.885 0.745-1.052 0.412-1.948 0.959-2.833 1.849-0.891 0.885-1.443 1.781-1.849 2.833-0.396 1.020-0.661 2.176-0.745 3.885-0.077 1.703-0.093 2.244-0.093 6.593s0.021 4.891 0.093 6.593c0.084 1.704 0.349 2.865 0.745 3.885 0.412 1.052 0.959 1.948 1.849 2.833 0.885 0.891 1.781 1.443 2.833 1.849 1.020 0.391 2.181 0.661 3.885 0.745 1.703 0.077 2.244 0.093 6.593 0.093s4.891-0.021 6.593-0.093c1.704-0.084 2.865-0.355 3.885-0.745 1.052-0.412 1.948-0.959 2.833-1.849 0.891-0.885 1.443-1.776 1.849-2.833 0.391-1.020 0.661-2.181 0.745-3.885 0.077-1.703 0.093-2.244 0.093-6.593s-0.021-4.891-0.093-6.593c-0.084-1.704-0.355-2.871-0.745-3.885-0.412-1.052-0.959-1.948-1.849-2.833-0.885-0.891-1.776-1.443-2.833-1.849-1.020-0.396-2.181-0.661-3.885-0.745-1.703-0.077-2.244-0.093-6.593-0.093zM16 2.88c4.271 0 4.781 0.021 6.469 0.093 1.557 0.073 2.405 0.333 2.968 0.553 0.751 0.291 1.276 0.635 1.844 1.197 0.557 0.557 0.901 1.088 1.192 1.839 0.22 0.563 0.48 1.411 0.553 2.968 0.072 1.688 0.093 2.199 0.093 6.469s-0.021 4.781-0.099 6.469c-0.084 1.557-0.344 2.405-0.563 2.968-0.303 0.751-0.641 1.276-1.199 1.844-0.563 0.557-1.099 0.901-1.844 1.192-0.556 0.22-1.416 0.48-2.979 0.553-1.697 0.072-2.197 0.093-6.479 0.093s-4.781-0.021-6.48-0.099c-1.557-0.084-2.416-0.344-2.979-0.563-0.76-0.303-1.281-0.641-1.839-1.199-0.563-0.563-0.921-1.099-1.197-1.844-0.224-0.556-0.48-1.416-0.563-2.979-0.057-1.677-0.084-2.197-0.084-6.459 0-4.26 0.027-4.781 0.084-6.479 0.083-1.563 0.339-2.421 0.563-2.979 0.276-0.761 0.635-1.281 1.197-1.844 0.557-0.557 1.079-0.917 1.839-1.199 0.563-0.219 1.401-0.479 2.964-0.557 1.697-0.061 2.197-0.083 6.473-0.083zM16 7.787c-4.541 0-8.213 3.677-8.213 8.213 0 4.541 3.677 8.213 8.213 8.213 4.541 0 8.213-3.677 8.213-8.213 0-4.541-3.677-8.213-8.213-8.213zM16 21.333c-2.948 0-5.333-2.385-5.333-5.333s2.385-5.333 5.333-5.333c2.948 0 5.333 2.385 5.333 5.333s-2.385 5.333-5.333 5.333zM26.464 7.459c0 1.063-0.865 1.921-1.923 1.921-1.063 0-1.921-0.859-1.921-1.921 0-1.057 0.864-1.917 1.921-1.917s1.923 0.86 1.923 1.917z"> 326 </path> 327 </svg> 328 </a> 329 <a rel="noopener noreferrer" title="Find me on Pinterest" href="https://pinterest.com/ksolomon75" target="_blank" title="Pinterest" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 330 <span class="sr-only">Pinterest</span> 331 <svg aria-label="Pinterest" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 332 <path d="M16.021 0c-8.828 0-15.984 7.156-15.984 15.984 0 6.771 4.214 12.552 10.161 14.88-0.141-1.266-0.266-3.203 0.052-4.583 0.292-1.25 1.875-7.943 1.875-7.943s-0.479-0.964-0.479-2.375c0-2.219 1.292-3.88 2.891-3.88 1.365 0 2.026 1.021 2.026 2.25 0 1.37-0.87 3.422-1.323 5.323-0.38 1.589 0.797 2.885 2.365 2.885 2.839 0 5.026-2.995 5.026-7.318 0-3.813-2.75-6.49-6.677-6.49-4.547 0-7.214 3.417-7.214 6.932 0 1.375 0.526 2.854 1.188 3.651 0.13 0.161 0.146 0.302 0.109 0.464-0.12 0.5-0.391 1.599-0.443 1.818-0.073 0.297-0.229 0.359-0.536 0.219-1.99-0.922-3.245-3.839-3.245-6.193 0-5.036 3.667-9.672 10.563-9.672 5.542 0 9.854 3.958 9.854 9.229 0 5.516-3.474 9.953-8.307 9.953-1.62 0-3.141-0.839-3.677-1.839l-1 3.797c-0.359 1.391-1.339 3.135-2 4.193 1.5 0.458 3.078 0.714 4.734 0.714 8.813 0 15.979-7.151 15.979-15.984 0-8.828-7.167-15.979-15.979-15.979z"> 333 </path> 334 </svg> 335 </a> 336 <a rel="noopener noreferrer" title="Find me on Twitter" href="https://twitter.com/KeithInWPG" target="_blank" title="Twitter" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl"> 337 <span class="sr-only">Twitter</span> 338 <svg aria-label="Twitter" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 339 <path d="M31.937 6.093c-1.177 0.516-2.437 0.871-3.765 1.032 1.355-0.813 2.391-2.099 2.885-3.631-1.271 0.74-2.677 1.276-4.172 1.579-1.192-1.276-2.896-2.079-4.787-2.079-3.625 0-6.563 2.937-6.563 6.557 0 0.521 0.063 1.021 0.172 1.495-5.453-0.255-10.287-2.875-13.52-6.833-0.568 0.964-0.891 2.084-0.891 3.303 0 2.281 1.161 4.281 2.916 5.457-1.073-0.031-2.083-0.328-2.968-0.817v0.079c0 3.181 2.26 5.833 5.26 6.437-0.547 0.145-1.131 0.229-1.724 0.229-0.421 0-0.823-0.041-1.224-0.115 0.844 2.604 3.26 4.5 6.14 4.557-2.239 1.755-5.077 2.801-8.135 2.801-0.521 0-1.041-0.025-1.563-0.088 2.917 1.86 6.36 2.948 10.079 2.948 12.067 0 18.661-9.995 18.661-18.651 0-0.276 0-0.557-0.021-0.839 1.287-0.917 2.401-2.079 3.281-3.396z"> 340 </path> 341 </svg> 342 </a> 343 <a rel="noopener noreferrer" title="Find me on Facebook" href="https://facebook.com/ksolomon" target="_blank" title="Facebook" class="flex items-center justify-center w-8 h-8 rounded-full sm:w-10 sm:h-10 bg-sky-200 text-gray-900 shadow-xl">
344 <span class="sr-only">Facebook</span> 345 <svg aria-label="Facebook" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 32 32" class="w-4 h-4"> 346 <path d="M32 16c0-8.839-7.167-16-16-16-8.839 0-16 7.161-16 16 0 7.984 5.849 14.604 13.5 15.803v-11.177h-4.063v-4.625h4.063v-3.527c0-4.009 2.385-6.223 6.041-6.223 1.751 0 3.584 0.312 3.584 0.312v3.937h-2.021c-1.984 0-2.604 1.235-2.604 2.5v3h4.437l-0.713 4.625h-3.724v11.177c7.645-1.199 13.5-7.819 13.5-15.803z"> 347 </path> 348 </svg> 349 </a> 350 </div> 351 </div> 352 </div> 353 354 <div id="credit" class="text-center text-xs text-sky-200 mb-4">Copyright © 2026 Keith Solomon.</div> 355 </footer> 356 357
357<script type="speculationrules"> 358{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/ksolo-2024/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 359</script>
359 360<!-- ERROR: WP-Optimize Minify was not allowed to save its cache on - wp-content/cache/wpo-minify/1777077741/assets/wpo-minify-footer-theme_library1737652684.min.js --><!-- Please check if the path above is correct and ensure your server has write permission there! -->
360<script defer id="theme_library-js" src="https://keithsolomon.net/wp-content/themes/ksolo-2024/js/functions.js"></script>
vendor: 1 bytes, line 360
360
361<script id="jetpack-stats-js-before"> 362_stq = window._stq || []; 363_stq.push([ "view", {"v":"ext","blog":"1081880","post":"0","tz":"-5","srv":"keithsolomon.net","arch_cat":"weekend-rec-builds","arch_results":"3","j":"1:15.7.2"} ]); 364_stq.push([ "clickTrackerInit", "1081880", "0" ]); 365//# sourceURL=jetpack-stats-js-before 366</script>
vendor: 1 bytes, line 366
366
367<script data-wp-strategy="defer" defer id="jetpack-stats-js" src="https://stats.wp.com/e-202639.js"></script>
367 368
368<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"1d1be5c1964f44b1865ec3aefacfa08a","r":1,"spa":2}' crossorigin="anonymous"></script>
368 369</body> 370 371 </html> 372 373<!-- Cached by WP-Optimize (gzip) - https://teamupdraft.com/wp-optimize/ - Last modified: Thursday, September 24th, 2026 11:33 am (America/Winnipeg UTC:-6) -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.