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" /> 8 <meta name="accent-color" content="#FF1A75" /> 9 10 <!-- Preload critical fonts --> 11 <link rel="preload" href="/assets/fonts/space-grotesk-v21-latin-regular.woff2?v=fnQ4kqvA6RcxzflC" as="font" type="font/woff2" 12 crossorigin> 13 <link rel="preload" href="/assets/fonts/space-grotesk-v21-latin-700.woff2?v=hkDX3M4xoJPtYrmU" as="font" type="font/woff2" 14 crossorigin> 15 <link rel="preload" href="/assets/fonts/fira-sans-v17-latin-regular.woff2?v=ia4XQ2VrdZSL4wzE" as="font" type="font/woff2" 16 crossorigin> 17 <link rel="preload" href="/assets/fonts/fira-sans-v17-latin-700.woff2?v=RfG2VOxhxgIV9Zfj" as="font" type="font/woff2" crossorigin> 18 19 <link rel="stylesheet" type="text/css" href="https://errantjones.com/assets/built/screen.css?v=x9WkOX5kn4EZVSxo" /> 20 21 <!-- Self-hosted fonts --> 22 <link rel="stylesheet" href="/assets/fonts/fonts.css?v=ylonpWL5S4uvNREF"> 23 24 <title>ERRANT</title> 25 26 <style> 27 body { 28 font-family: var(--gh-font-body, "Space Grotesk", sans-serif); 29 } 30 31 h1, 32 h2, 33 h3, 34 h4, 35 h5, 36 h6 { 37 font-family: var(--gh-font-heading, "Fira Sans", serif); 38 } 39 40 /* Keep original Tailwind mappings */ 41 .font-sans { 42 font-family: "Space Grotesk", sans-serif !important; 43 } 44 45 .font-serif { 46 font-family: "Fira Sans", serif !important; 47 } 48 49 /* Ghost font classes */ 50 .gh-font-heading { 51 font-family: var(--gh-font-heading, "Fira Sans", serif) !important; 52 } 53 54 .gh-font-body { 55 font-family: var(--gh-font-body, "Space Grotesk", sans-serif) !important; 56 } 57 </style> 58 59 <!-- Include custom font adjustments --> 60 <link rel="stylesheet" href="/assets/css/custom-fonts.css?v=bNQl6UfN3Tb2QIH2"> 61 62 <meta name="description" content="Eli Jones, Writer"> 63 <link rel="canonical" href="https://errantjones.com/"> 64 <meta name="referrer" content="origin-when-cross-origin"> 65 66 <meta property="og:site_name" content="ERRANT"> 67 <meta property="og:type" content="website"> 68 <meta property="og:title" content="ERRANT"> 69 <meta property="og:description" content="Eli Jones, Writer"> 70 <meta property="og:url" content="https://errantjones.com/"> 71 <meta property="og:image" content="https://static.ghost.org/v5.0.0/images/publication-cover.jpg"> 72 <meta name="twitter:card" content="summary_large_image"> 73 <meta name="twitter:title" content="ERRANT"> 74 <meta name="twitter:description" content="Eli Jones, Writer"> 75 <meta name="twitter:url" content="https://errantjones.com/"> 76 <meta name="twitter:image" content="https://static.ghost.org/v5.0.0/images/publication-cover.jpg"> 77 <meta property="og:image:width" content="1200"> 78 <meta property="og:image:height" content="840"> 79 80
80<script type="application/ld+json"> 81{ 82 "@context": "https://schema.org", 83 "@type": "WebSite", 84 "publisher": { 85 "@type": "Organization", 86 "name": "ERRANT", 87 "url": "https://errantjones.com/", 88 "logo": { 89 "@type": "ImageObject", 90 "url": "https://errantjones.com/favicon.ico", 91 "width": 48, 92 "height": 48 93 } 94 }, 95 "url": "https://errantjones.com/", 96 "name": "ERRANT", 97 "image": { 98 "@type": "ImageObject", 99 "url": "https://static.ghost.org/v5.0.0/images/publication-cover.jpg", 100 "width": 1200, 101 "height": 840 102 }, 103 "mainEntityOfPage": "https://errantjones.com/", 104 "description": "Eli Jones, Writer" 105} 106 </script>
106 107 108 <meta name="generator" content="Ghost 6.64"> 109 <link rel="alternate" type="application/rss+xml" title="ERRANT" href="https://errantjones.com/rss/"> 110
110<script defer src="https://errantjones.com/content/files/ghost-apps/portal/portal.min.js" data-i18n="true" data-ghost="https://errantjones.com/" data-key="75b8aeca29758f7c40948391b5" data-api="https://errantjones.com/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
110<style id="gh-members-styles">.gh-post-upgrade-cta-content, 111.gh-post-upgrade-cta { 112 display: flex; 113 flex-direction: column; 114 align-items: center; 115 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 116 text-align: center; 117 width: 100%; 118 color: #ffffff; 119 font-size: 16px; 120} 121 122.gh-post-upgrade-cta-content { 123 border-radius: 8px; 124 padding: 40px 4vw; 125} 126 127.gh-post-upgrade-cta h2 { 128 color: #ffffff; 129 font-size: 28px; 130 letter-spacing: -0.2px; 131 margin: 0; 132 padding: 0; 133} 134 135.gh-post-upgrade-cta p { 136 margin: 20px 0 0; 137 padding: 0; 138} 139 140.gh-post-upgrade-cta small { 141 font-size: 16px; 142 letter-spacing: -0.2px; 143} 144 145.gh-post-upgrade-cta a { 146 color: #ffffff; 147 cursor: pointer; 148 font-weight: 500; 149 box-shadow: none; 150 text-decoration: underline; 151} 152 153.gh-post-upgrade-cta a:hover { 154 color: #ffffff; 155 opacity: 0.8; 156 box-shadow: none; 157 text-decoration: underline; 158} 159 160.gh-post-upgrade-cta a.gh-btn { 161 display: block; 162 background: #ffffff; 163 text-decoration: none; 164 margin: 28px 0 0; 165 padding: 8px 18px; 166 border-radius: 4px; 167 font-size: 16px; 168 font-weight: 600; 169} 170 171.gh-post-upgrade-cta a.gh-btn:hover { 172 opacity: 0.92; 173}</style> 174
174<script defer src="https://errantjones.com/content/files/ghost-apps/sodo-search/sodo-search.min.js" data-key="75b8aeca29758f7c40948391b5" data-styles="https://errantjones.com/content/files/ghost-apps/sodo-search/main.css" data-sodo-search="https://errantjones.com/" data-locale="en" crossorigin="anonymous"></script>
174 175 176 <link href="https://errantjones.com/webmentions/receive/" rel="webmention"> 177
177<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
177 178 <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc"> 179
179<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://errantjones.com/.ghost/analytics/api/v1/page_hit" tb_site_uuid="b545b1d7-8872-4b3b-b3e4-8340eae6b976" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
179<style>:root {--ghost-accent-color: #FF1A75;}</style> 180</head> 181 182<body class="home-template dark:bg-slate-800"> 183 <main> 184 185<nav 186 class="bg-white border-gray-200 dark:bg-slate-900 dark:border-slate-700 dark:text-slate-200" 187> 188 <div 189 class="container flex flex-wrap items-center justify-between mx-auto py-4" 190 > 191 <a href="https://errantjones.com" class="flex items-center"> 192 <span 193 class="self-center text-2xl md:text-3xl font-extrabold whitespace-nowrap text-[color:var(--ghost-accent-color)] uppercase" 194 > 195 ERRANT 196 </span> 197 </a> 198 <div class="flex md:order-2"> 199 <a 200 href="/#/portal/signup" 201 class="button hidden md:block" 202 > 203 Subscribe 204 </a> 205 <button 206 data-collapse-toggle="navbar-cta" 207 type="button" 208 class="inline-flex items-center p-2 text-gray-500 rounded-lg md:hidden hover:bg-gray-100 dark:hover:bg-slate-600 focus:outline-none focus:ring-2 dark:focus:ring-gray-500 focus:ring-gray-200" 209 aria-controls="navbar-cta" 210 aria-expanded="false" 211 > 212 <span class="sr-only">Open main menu</span> 213 <svg 214 class="w-6 h-6" 215 aria-hidden="true" 216 fill="currentColor"
217 viewBox="0 0 20 20" 218 xmlns="http://www.w3.org/2000/svg" 219 ><path 220 fill-rule="evenodd" 221 d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" 222 clip-rule="evenodd" 223 ></path></svg> 224 </button> 225 </div> 226 <div 227 class="items-center justify-between hidden w-full md:flex md:w-auto md:order-1" 228 id="navbar-cta" 229 > 230 <ul 231 class="flex flex-col font-medium p-4 md:p-0 mt-4 border border-gray-100 rounded-lg md:flex-row md:space-x-8 md:mt-0 md:border-0 dark:text-slate-200 bg-slate-100 dark:bg-slate-800 md:bg-transparent" 232 > 233 <li> 234 <a 235 href="/" 236 class="block py-2 pl-3 pr-4 text-gray-900 hover:text-[color:var(--ghost-accent-color)] md:p-0 dark:text-slate-200 text-center md:text-left" 237 >Home</a> 238 </li> 239 <li> 240 <a 241 href="/about/" 242 class="block py-2 pl-3 pr-4 text-gray-900 hover:text-[color:var(--ghost-accent-color)] md:p-0 dark:text-slate-200 text-center md:text-left" 243 >About</a> 244 </li> 245 </ul> 246 </div> 247 </div> 248</nav> 249 250 <header class="container flex flex-col py-16 md:py-32 gap-8 items-center justify-center mx-auto"> 251 <h1 252 class="text-3xl md:text-5xl font-bold text-slate-800 text-center leading-tight md:leading-tight dark:text-slate-300"> 253 This is the start of something truly magical. Something that will change the way you think about websites. 254 </h1> 255 <div class="flex flex-col theme-cta"> 256 <form data-members-form class="membership-form" id="membership-form"> 257 <div class="flex flex-col md:flex-row justify-center items-center mt-8"> 258 <input data-members-email type="email" required="true" placeholder="Your email address" 259 class="border border-gray-500 md:border-r-0 placeholder-gray-500 px-4 py-3 mb-4 md:mb-0 w-full md:w-auto focus:outline-none focus:border-[color:var(--ghost-accent-color)] md:focus:border-r-0 md:min-w-[300px] rounded-md md:rounded-r-none md:rounded-l-md dark:bg-slate-700 dark:border-slate-600 dark:text-slate-400 dark:placeholder-slate-400" /> 260 <button type="submit" class="button md:rounded-l-none"> 261 Subscribe to my newsletter 262 </button> 263 </div> 264 <div class="form-error hidden bg-red-200 text-red-800 px-4 py-3 mt-4 rounded-md border border-red-800" 265 role="alert" id="form-error"> 266 Oops, there was a problem with your submission. Please try again. 267 </div> 268 <div class="form-success hidden bg-green-200 text-green-800 px-4 py-3 mt-4 rounded-md border border-green-800" 269 role="alert" id="form-success"> 270 Success! Now check your email to confirm your subscription. 271 </div> 272 </form> 273 <div class="text-center text-gray-500 italic mt-1 dark:text-slate-400"> 274 I won't send you spam. Promise. Unsubscribe at any time. 275 </div> 276 </div> 277 </header> 278 <main> 279 <div class="container mb-8" id="post-grid"> 280 <h2 281 class="text-2xl md:text-3xl font-bold text-slate-800 leading-tight w-full md:w-1/2 mb-8 dark:text-slate-300"> 282 Latest Posts 283 </h2> 284 285<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> 286 <div 287 class="aspect-[1/1] relative rounded-md overflow-hidden hover:scale-[1.03] transition-all duration-300 hover:shadow-lg dark:border dark:border-slate-700" 288 > 289 <a href="/umberto-eco-on-ebooks/" class="block w-full h-full"> 290 <div 291 class="absolute inset-0 object-cover w-full h-full bg-[color:var(--ghost-accent-color)]" 292 ></div> 293 </a> 294 <div class="absolute bottom-0 left-0 right-0 p-8"> 295 <a href="/umberto-eco-on-ebooks/"> 296 <h2 297 class="text-2xl font-bold text-white leading-tight line-clamp-3" 298 >Umberto Eco on eBooks</h2> 299 <p 300 class="text-white italic mt-2 line-clamp-3 mb-0" 301 > 302 Iâm no traditionalist. On a 250-gigabyte portable hard disk Iâve recorded the greatest masterpieces of world literature and the history of philosophy; 303 </p> 304 </a> 305 </div> 306 </div> 307 <div 308 class="aspect-[1/1] relative rounded-md overflow-hidden hover:scale-[1.03] transition-all duration-300 hover:shadow-lg dark:border dark:border-slate-700" 309 > 310 <a href="/on-storytelling/" class="block w-full h-full"> 311 <div 312 class="absolute inset-0 object-cover w-full h-full bg-[color:var(--ghost-accent-color)]" 313 ></div> 314 </a> 315 <div class="absolute bottom-0 left-0 right-0 p-8"> 316 <a href="/on-storytelling/"> 317 <h2 318 class="text-2xl font-bold text-white leading-tight line-clamp-3" 319 >On Storytelling</h2> 320 <p 321 class="text-white italic mt-2 line-clamp-3 mb-0" 322 > 323 Freddie deBoer on storytelling and Stranger Things. 324 </p> 325 </a> 326 </div> 327 </div> 328 <div 329 class="aspect-[1/1] relative rounded-md overflow-hidden hover:scale-[1.03] transition-all duration-300 hover:shadow-lg dark:border dark:border-slate-700" 330 > 331 <a href="/errant-worlds-available-for-purchase/" class="block w-full h-full"> 332 <div 333 class="absolute inset-0 bg-gradient-to-t from-slate-800 to-transparent" 334 ></div> 335 <img 336 src="/content/images/size/w1200/2026/01/Errant-Worlds-Cover-2.jpg" 337 alt="Errant Worlds Available for Purchase" 338 class="object-cover w-full h-full" 339 /> 340 </a> 341 <div class="absolute bottom-0 left-0 right-0 p-8"> 342 <a href="/errant-worlds-available-for-purchase/"> 343 <h2 344 class="text-2xl font-bold text-white leading-tight line-clamp-3" 345 >Errant Worlds Available for Purchase</h2> 346 <p 347 class="text-white italic mt-2 line-clamp-3 mb-0" 348 > 349 The collection is live! 350 </p> 351 </a> 352 </div> 353 </div> 354</div> <nav class="pagination-nav mt-12 mb-8" role="navigation" aria-label="Pagination Navigation"> 355 <div class="flex justify-between items-center text-slate-600 dar
355k:text-slate-400"> 356 <div class="flex-1"> 357 </div> 358 359 <div class="flex-1 text-center"> 360 <span class="text-sm text-slate-500 dark:text-slate-400"> 361 Page 1 of 1 362 </span> 363 </div> 364 365 <div class="flex-1 text-right"> 366 </div> 367 </div> 368</nav> 369 </div> 370 <div class="container mt-16 md:mt-32 flex flex-col gap-2"> 371 <h2 class="text-2xl md:text-3xl font-bold text-slate-800 leading-tight w-full md:w-1/2 dark:text-slate-300"> 372 News 373 </h2> 374 <p class="text-gray-500 italic w-full md:w-1/2 dark:text-slate-400"> 375 376 </p> 377 <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> 378 <div 379 class="aspect-[19/9] relative rounded-md overflow-hidden hover:scale-[1.03] transition-all duration-300 hover:shadow-lg dark:border dark:border-slate-700"> 380 <a href="/errant-worlds-available-for-purchase/" class="block w-full h-full"> 381 <div class="absolute inset-0 bg-slate-800 bg-opacity-80 dark:bg-slate-800 dark:bg-opacity-80"> 382 </div> 383 <img src="/content/images/2026/01/Errant-Worlds-Cover-2.jpg" alt="Errant Worlds Available for Purchase" 384 class="object-cover w-full h-full" /> 385 </a> 386 <div class="absolute bottom-0 left-0 right-0 px-8"> 387 <a href="/errant-worlds-available-for-purchase/"> 388 <h2 class="text-2xl font-bold text-white leading-tight line-clamp-2">Errant Worlds Available for Purchase</h2> 389 <p class="text-white italic line-clamp-2"> 390 The collection is live! 391 </p> 392 </a> 393 </div> 394 </div> 395 </div> 396 </div> 397 </main> 398
398<script> 399 document.addEventListener("DOMContentLoaded", function () { 400 const membershipForm = document.getElementById("membership-form"); 401 const formError = document.getElementById("form-error"); 402 const formSuccess = document.getElementById("form-success"); 403 404 function updateFormMessages() { 405 if (membershipForm.classList.contains("error")) { 406 formError.classList.remove("hidden"); 407 formSuccess.classList.add("hidden"); 408 } else if (membershipForm.classList.contains("success")) { 409 formError.classList.add("hidden"); 410 formSuccess.classList.remove("hidden"); 411 } else { 412 formError.classList.add("hidden"); 413 formSuccess.classList.add("hidden"); 414 } 415 } 416 417 // Update messages on page load 418 updateFormMessages(); 419 420 // Listen for form submission 421 membershipForm.addEventListener("submit", function () { 422 // Wait for Ghost to update the form classes 423 setTimeout(updateFormMessages, 100); 424 }); 425 }); 426 </script>
426 427 </main> 428 <footer> 429 <div class="bg-slate-800 text-white py-16 text-center dark:bg-slate-900"> 430 <div class="container flex flex-col gap-12 items-center justify-center mx-auto"> 431 <div class="w-full md:w-2/3 flex flex-col gap-2"> 432 <h2 class="text-4xl md:text-5xl font-bold text-white leading-tight"> 433 Get started 434 </h2> 435 <p class="text-gray-300 mt-2"> 436 437 </p> 438 </div> 439 <div class="w-full md:w-1/2"> 440 <a href="/#/portal/signup" class="button"> 441 Get started 442 </a> 443 </div> 444 </div> 445 </div> 446 <div class="bg-slate-700 text-white py-4 text-center dark:bg-slate-800"> 447 <div class="container flex flex-col gap-4 items-center justify-center mx-auto"> 448 <div class="w-full flex flex-col md:flex-row w-full justify-center gap-4 mt-2"> 449 <ul class="flex flex-col md:flex-row gap-4"> 450 <li> 451 <a href="#/portal/" 452 class="text-gray-300 hover:text-white transition-all duration-300 underline"> 453 Sign up 454 </a> 455 </li> 456 </ul> 457 </div> 458 <p class="text-gray-300 text-sm !mb-2 mt-2 md:mt-0"> 459 © 460 2026 461 ERRANT. All rights reserved. 462 </p> 463 </div> 464 </div> 465 </footer> 466
466<script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/1.6.5/flowbite.min.js"></script>
466 467
467<script> 468 function styleAnnouncementBarContent() { 469 const announcementBarContent = document.querySelector('.gh-announcement-bar-content'); 470 471 if (announcementBarContent) { 472 const pElement = announcementBarContent.querySelector('p'); 473 474 if (pElement) { 475 pElement.style.fontFamily = 'Space Grotesk, sans-serif'; 476 pElement.style.marginBottom = '0'; 477 pElement.style.fontSize = '1rem'; 478 479 const announcementBar = announcementBarContent.closest('.gh-announcement-bar'); 480 if (announcementBar.classList.contains('dark') || announcementBar.classList.contains('accent')) { 481 pElement.style.color = 'white'; 482 } 483 } 484 } 485 } 486 487 function waitForAnnouncementBar() { 488 const observer = new MutationObserver((mutationsList) => { 489 for (const mutation of mutationsList) { 490 if (mutation.type === 'childList') { 491 const announcementBarContent = document.querySelector('.gh-announcement-bar-content'); 492 493 if (announcementBarContent) { 494 styleAnnouncementBarContent(); 495 observer.disconnect(); 496 break; 497 } 498 } 499 } 500 }); 501 502 observer.observe(document.body, { childList: true, subtree: true }); 503 } 504 505 waitForAnnouncementBar(); 506 </script>
506 507 508</body> 509 510</html>
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.