AmazonS3
tcp/443
CloudFront
tcp/80
Open service 3.174.46.70:80 · www.joeri.dev
2026-01-10 09:41
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Sat, 10 Jan 2026 09:41:53 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://www.joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 c9300fee53e483fd91f18a10d4431680.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P12 X-Amz-Cf-Id: hC9j-rJzEJLY9PRm92XpsplMG3nIr4iF4IAz6gWCboGAX9xQnkEg6g== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:3e00:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 413634bfcacd752107ee361d53948cee.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: vUYjgD9m29jJC4qPujvzNOKOYdGkgkvhzp5BeD3IKfHUrDachsFKUg==
Age: 59082
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:6e00:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 58e9d1f8f21a3575fa58a14f7f39c636.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: 9fDCrkqTfy8L5qr6OODwxgWSO_iqp96QQeknst37H0aocH0NPHts6w== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:c000:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 7af089de61bb0f71465732ed7f6f3386.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: s6MpGM2dgJ9iDlyIa74X0i13AGNSTu4PWhOWfQOHTanBf_FBuDVgPQ==
Age: 59082
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:4e00:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 10f6ed997c15c1439b3ae1db258c7d16.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: YQ6quF58lhBidXwOq0BsHxoVq9xuYIn2TYRNcXoHW36CSEbOLMOaVw== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:3e00:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 d60e84ebd0183f97f50eb1677fb4b7be.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: ruUuyfzb4bXRcDwu6-WM0BM1QJPoPKfS2nbOQUhms1VaNBTGLixYaQ== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:c000:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 84c3894c21a4640fb5c0efcf95646dca.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: UUVzoeBmYKC4CD9FY9fYLKtw3M2hj-eWu2wPXCop4XHNKjTZGvw9rg== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:d600:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 186bdaa7eeeac80deba6005ccbb75b56.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: BMq7MGB7d4SLTw0jKLxSvVSW1VKuJ-yWZqBYBJMJkDchKBsaIZ2-1g==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 18.172.112.21:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:36 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 413634bfcacd752107ee361d53948cee.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: OJWQFBej13veWbV0Z3EmAxNL3_a6WqIeCbq98bEaGxz2HqtFrIGTtg== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 18.172.112.27:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 81a2ccccd3da8ffc5c6580a9c9d4bace.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: t8MoXty__3tROzgMzNhJC5_ks4O3rECl1FtskeFNcrNbi6zMOIItxQ==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 18.172.112.97:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 e2239bbca97bdb08942ca2cd020caca8.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: h_zkBmYedQFJgoxiGDCu024KLUi0opxx6eTeqEvCgC5op7HClRIHog== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 18.172.112.54:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 1fa5d8f57b04797d33d03ff93cb7543e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: TkBvM7An3hoJPZ6rpMHVx7hav5xNGclgYsfK6uAsOEJEhDT-cUhLuQ==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:a400:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 58e9d1f8f21a3575fa58a14f7f39c636.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: wEYUVaqhE8vrXM9J60yLHD6zRhC5KRgctcZJBLqwBWQfqZhIptUtqw== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:3600:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 1fa5d8f57b04797d33d03ff93cb7543e.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: yFeuLiRpcROH-HS_myUmtkQziABLw2l5lYfOwj-iPfTaA3TYtTr2Jg== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:d600:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 360184e3d21355e6dfcea5cbe81a7f44.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: gwrgAmajb2NFFtmyw601yyskhLdYpLqvuW2EYPq0X-lIlTI3kabZJg== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 18.172.112.97:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 84c3894c21a4640fb5c0efcf95646dca.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: menFcrwVe0GLKYZgIArvta5mWua68WYP2XCoe2flCSEE2lguBYkYlg==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:6e00:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 58e9d1f8f21a3575fa58a14f7f39c636.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: ePdoprYzqXw0UaxelH31HFN_uUb6lJNwGkiLWfOiqg6wASQ_YyH_Lw==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:e00:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 725f43139b6c583d9defb7c5029a8928.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: XYryY_NY5VN_DLAzh7-H6UDsecGufjPGdCal7qi5l1gj4MkmtEKSUQ==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:a400:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 7b2737d1601ba8c676e6f68b6aa113d8.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: 6iPOIyi2J4J4-zSa5xkA2Z1mOWzzUSnQt5dA0iVXdNNl8mpWpUv0Mw==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 18.172.112.54:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 7af089de61bb0f71465732ed7f6f3386.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: aHRRanK4JNAcf3MycKrYffq5Kd_wcMiHovyTKarQkJw6onWGSfB83w== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 18.172.112.27:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 d60e84ebd0183f97f50eb1677fb4b7be.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: -BrlXmxqiNwU-nzSw7S-px24jlE9VgI3wyEgmEKjCzMjVxxGd9e9Jw== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 2600:9000:2761:3600:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 fc3a32609a2b1f220f223f3b87919ac2.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: gSSbFwSbZzTQHOffdkr9GNdlWYaZJ3yG0unrVsPmanoDw4RfaW8R8g==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:e00:c:956c:da00:93a1:80 · joeri.dev
2026-01-01 02:05
HTTP/1.1 301 Moved Permanently Server: CloudFront Date: Thu, 01 Jan 2026 02:05:35 GMT Content-Type: text/html Content-Length: 167 Connection: close Location: https://joeri.dev/ X-Cache: Redirect from cloudfront Via: 1.1 8e59b301b68bf6ac4dcacf061926e712.cloudfront.net (CloudFront) X-Amz-Cf-Pop: FRA60-P8 X-Amz-Cf-Id: Ce_Tv7wIwUPE-88zPOYpgQY-ejgaiM9Ep7C04rkySYZM00BPqEcN2g== Page title: 301 Moved Permanently <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>CloudFront</center> </body> </html>
Open service 18.172.112.21:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 413634bfcacd752107ee361d53948cee.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: A8uM_oHCJh4BpdGDyesBiMoAQsmTGkijd675p6iogILgucUF4tw-uQ==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
Open service 2600:9000:2761:4e00:c:956c:da00:93a1:443 · joeri.dev
2026-01-01 02:05
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 8424
Connection: close
Last-Modified: Sun, 02 Mar 2025 14:22:13 GMT
Server: AmazonS3
Date: Wed, 31 Dec 2025 09:40:55 GMT
ETag: "e56f213a983c2680751185978c4d604f"
X-Cache: Hit from cloudfront
Via: 1.1 360184e3d21355e6dfcea5cbe81a7f44.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P8
X-Amz-Cf-Id: Mc_1391OWQo8H7fkJX-wjjHjzlatU8MXOGfpEde2ZWyCzGh0nagqRg==
Age: 59081
Page title: Joeri Smits
<!DOCTYPE html>
<html lang="en-US" class="scroll-smooth dark">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joeri Smits</title>
<meta name="description" content="Personal blog of Joeri Smits, a Web Developer based in Nijmegen. Sharing technical posts and discussing technical matters.">
<meta property="og:title" content="Joeri Smits">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joeri.dev/">
<link rel="canonical" href="https://joeri.dev/">
<link rel="robots" href="/robots.txt" />
<script defer src="https://app.tinyanalytics.io/pixel/ZRH8LzdZiuOB1lNs"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });</script>
<link rel="stylesheet" href="https://joeri.dev/css/app.min.98dcd76fa55eca483e22b5f2c71a2da8abb35e5dac53858c7db9b7671b5ced42.css" integrity="sha256-mNzXb6Veykg+IrXyxxotqKuzXl2sU4WMfbm3Zxtc7UI=" /></head>
<body class="max-w-screen-md mx-auto p-3 text-left">
<div class="flex justify-between items-center flex-col-reverse sm:flex-row">
<header class="flex flex-col sm:flex-row items-center gap-5 sm:gap-10 pt-8 py-12 sm:pt-16">
<div class="flex-none w-20 h-20 rounded-full overflow-hidden">
<a href="https://joeri.dev">
<img
srcset="/images/profile_hu2b4606eb5e5d68072bad7e4f27880bb9_931550_160x160_fill_q90_box_smart1.jpeg 80w"
src="/images/profile.jpeg"
width="2751"
height="2763"
alt="Joeri Smits"
/>
</a>
</div>
<div class="flex flex-col gap-5">
<a href="https://joeri.dev">
<h1 id="site-title">Joeri Smits</h1>
</a>
<nav>
<ul>
<li>
<a href="/" class=" active ">
Home
</a>
</li>
<li>
<a href="/about" class="">
About me
</a>
</li>
<li>
<a href="/categories" class="">
Categories
</a>
</li>
<li>
<a href="/tags" class="">
Tags
</a>
</li>
</ul>
</nav>
</div>
</header>
<button class="toggle-theme w-8" aria-label="Toggle Theme" title="Toggle Theme" onclick="toggleTheme()">
<span class="theme-icon light"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z" />
</svg> </span>
<span class="theme-icon dark"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z" />
</svg> </span>
</button>
<script>
document.addEventListener('DOMContentLoaded', function () {
const theme = localStorage.getItem('theme');
if (!theme || theme === 'dark') {
setTheme('dark');
} else {
setTheme(theme);
}
});
function setTheme(theme) {
const html = document.querySelector('html');
localStorage.setItem('theme', theme);
if (theme === 'light') {
if (html.classList.contains('dark')) {
document.querySelector('html').classList.remove('dark');
}
document.querySelector('.theme-icon.light').style.display = 'none';
document.querySelector('.theme-icon.dark').style.display = 'block';
} else {
if (!html.classList.contains('dark')) {
document.querySelector('html').classList.add('dark');
}
document.querySelector('.the
3.174.46.70 1 2600:9000:2761:3e00:c:956c:da00:93a1 1 2600:9000:2761:6e00:c:956c:da00:93a1 1 2600:9000:2761:c000:c:956c:da00:93a1 1 2600:9000:2761:4e00:c:956c:da00:93a1 1 2600:9000:2761:d600:c:956c:da00:93a1 1 18.172.112.21 1 18.172.112.27 1 18.172.112.97 1 18.172.112.54 1 2600:9000:2761:a400:c:956c:da00:93a1 1 2600:9000:2761:3600:c:956c:da00:93a1 1 2600:9000:2761:e00:c:956c:da00:93a1 1