{"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>