{"name":"Stephen AfamO's Blog","short_name":"Stephen AfamO's Blog","icons":[{"src":"https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-192.png?last_modified=1751583379","sizes":"192x192","type":"image/png"},{"src":"https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-256.png?last_modified=1751583379","sizes":"256x256","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone","start_url":"https://stephenafamo.com/blog"} <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="pgpkey" href="https://stephenafamo.com/blog/public-key.txt"> <link type="image/png" sizes="32x32" href="https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-32.png?last_modified=1751583379" rel="icon"> <link type="image/png" sizes="128x128" href="https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-128.png?last_modified=1751583379" rel="icon"> <link type="image/png" sizes="196x196" href="https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-196.png?last_modified=1751583379" rel="shortcut icon"> <link type="image/png" sizes="180x180" href="https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-180.png?last_modified=1751583379" rel="apple-touch-icon"> <link rel="manifest" href="https://stephenafamo.com/blog/site.webmanifest"> <meta name="theme-color" content="#9c0000"> <meta name="msapplication-TileColor" content="#ffffff"> <style> :where(body, iframe, pre, img, svg, video, canvas, select) { max-width: 100%; overflow: auto; word-break: break-word; } </style> <link rel="alternate" type="application/rss+xml" title="RSS feed | Stephen AfamO's Blog" href="https://stephenafamo.com/blog/feed.xml"/> <style> :root { --light-primary-color: 156, 0, 0; --light-primary-color-hex: #9c0000; --light-background-color: 255, 253, 249; --light-background-color-hex: #FFFDF9; --heading-font-family: 'Poppins', var(--font-family-sans); --body-font-family: 'Work Sans', var(--font-family-sans); --mono-font-family: JetBrains Mono, var(--font-family-mono); } </style> <link rel="stylesheet" href="https://stephenafamo.com/blog/assets/css/main.css?theme=medium&time=1751583435"> </head> <body class=""> <div class="antialiased flex flex-col justify-between min-h-screen"> <div class="text-medium-black"> <div id="navbar" class="grid sm:flex items-center sm:justify-between text-sm text-medium-gray sm:border-b border-medium-ash"> <div id="logo-and-search" class="px-6 py-2 flex flex-none grow sm:grow-0 items-center justify-between sm:justify-start border-b sm:border-0 border-medium-ash"> <a href="https://stephenafamo.com/blog" class="flex-none text-lg font-bold text-gray-900"> <img width="196" height="196" class="inline-block w-auto h-12 mr-2" src="https://cdn.swish.ink/a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0/branding/favicon-196.png?last_modified=1751583379" alt="Stephen AfamO's Blog logo"> </a> <form method="GET" action="https://stephenafamo.com/blog/posts/search" class="flex items-center rounded-full bg-medium-bg pl-3 focus-within:ring-1 focus-within:ring-light-primary focus-within:border-light-primary"> <button type="submit"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.1 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0zm6.94-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .8-.79l-3.74-3.73A8.05 8.05 0 0 0 11.04 3v.01z" fill="currentColor"></path></svg> </button> <input type="text" name="q" id="query" placeholder="Search this blog" class="py-2.5 pr-5 w-full border-none bg-medium-bg rounded-full text-medium-black text-sm focus:ring-0 focus:border-0" value="" required/> </form> </div> <span class="order-first sm:order-none flex flex-initial justify-end px-6 text-xs sm:text-sm border-b sm:border-0 border-medium-ash"> <a href="https://stephenafamo.com" rel="noopener" class="my-2 mr-2 text-medium-gray hover:text-medium-black transition duration-150 ease-in-out [&:not(:any-link)]:text-medium-black"> Homepage </a> <a href="https://twitter.com/stephenafamo" target="_blank" rel="noopener" class="my-2 mr-2 text-medium-gray hover:text-medium-black transition duration-150 ease-in-out [&:not(:any-link)]:text-medium-black"> Twitter </a> </span> </div> <div class="flex justify-center"> <div class="mx-6 w-full max-w-[680px]"> <h1 class="my-10 text-2xl sm:text-[2.625rem] font-bold"> 404: Not Found </h1> </div> </div> </div> <div class="w-full py-6 text-center text-sm text-medium-gray"> Powered By <a href="https://swish.ink" class="font-bold powered-by">Swish</a> </div> </div> <script type="text/javascript" src="https://stephenafamo.com/blog/assets/js/main.js?theme=medium&time=1751583435"></script> <script async defer data-api-url="https://app.swish.ink/" data-hostname="a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0.i.swish.ink" data-collect-dnt="true" src="https://app.swish.ink/assets/js/latest.js"></script> <noscript><img src="https://app.swish.ink/simple.gif?collect-dnt=true&hostname=a9af59c2-0fdb-4a2a-9a9f-719eeb17b3b0.i.swish.ink" alt="" referrerpolicy="no-referrer-when-downgrade"/></noscript> <script> var eTag window.getEtag = function(callback) { if (eTag) { console.log('cached eTag', eTag) callback(eTag) return } fetch('https:\/\/stephenafamo.com\/blog/etag', { method: 'GET', }).then(function (response) { eTag = response.headers.get('ETag') callback(eTag) }.bind(this)).catch(function(err) { console.log('Fetch Error :-S', err); }) } function addStylesheetURL(url) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = url; document.getElementsByTagName('head')[0].appendChild(link); } addStylesheetURL('https:\/\/fonts.swish.ink/css2?family=Poppins:ital,wght@0,400;0,700;1,400;1,700&display=swap'); addStylesheetURL('https:\/\/fonts.swish.ink/css2?family=Work Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap'); addStylesheetURL('https:\/\/fonts.swish.ink/css2?family=JetBrains Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap'); </script> </body> </html>