850 lines
24 KiB
HTML
Executable File
850 lines
24 KiB
HTML
Executable File
<!doctype html>
|
||
<html
|
||
lang="de-DE"
|
||
dir="ltr"
|
||
class="h-full">
|
||
<head>
|
||
<meta name="generator" content="Hugo 0.159.1">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
<meta name="language" content="de-DE">
|
||
<script>
|
||
|
||
(function () {
|
||
const storedTheme = localStorage.getItem("theme");
|
||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||
document.documentElement.setAttribute("data-theme", theme);
|
||
})();
|
||
</script>
|
||
<title>Demians Blog</title>
|
||
<meta
|
||
name="description"
|
||
content="
|
||
Mein persönlicher Blog über Open-Source Technologien, Hostinglösungen, Linux und den ganzen Rest.
|
||
|
||
">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://pyte.dev/">
|
||
|
||
<meta name="robots" content="index, follow">
|
||
|
||
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="Demians Blog">
|
||
<meta property="og:description" content="Mein persönlicher Blog über Open-Source Technologien, Hostinglösungen, Linux und den ganzen Rest.">
|
||
<meta property="og:url" content="https://pyte.dev/">
|
||
<meta property="og:site_name" content="Demians Blog"><meta property="og:image" content="https://pyte.dev/assets/patrick.png">
|
||
<meta property="og:image:width" content="1200">
|
||
<meta property="og:image:height" content="630">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:title" content="Demians Blog">
|
||
<meta name="twitter:description" content="Mein persönlicher Blog über Open-Source Technologien, Hostinglösungen, Linux und den ganzen Rest."><meta name="twitter:image" content="https://pyte.dev/assets/patrick.png">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script type="application/ld+json">"{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"author\":{\"@type\":\"Person\",\"email\":\"demian (at) pyte (dot) dev\",\"name\":\"Demians Blog\"},\"description\":\"Mein persönlicher Blog über Open-Source Technologien, Hostinglösungen, Linux und den ganzen Rest.\",\"name\":\"Demians Blog\",\"potentialAction\":{\"@type\":\"SearchAction\",\"query-input\":\"required name=search_term_string\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://pyte.dev/?q={search_term_string}\"}},\"publisher\":{\"@type\":\"Organization\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://pyte.dev/assets/patrick.png\"},\"name\":\"Demians Blog\"},\"url\":\"https://pyte.dev/\"}"</script>
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap"
|
||
rel="stylesheet">
|
||
|
||
|
||
<link
|
||
rel="stylesheet"
|
||
href="/css/theme.min.86a32b729f656fc6c119ed69193950db815a3ad9fdc967b32c76d602f11449a4.css"
|
||
integrity="sha256-hqMrcp9lb8bBGe1pGTlQ24FaOtn9yWezLHbWAvEUSaQ=">
|
||
|
||
<link
|
||
rel="stylesheet"
|
||
href="/css/syntax-dark.min.3e403a03e3af837b3829e9b6f01fc7792bda7cb7f5056f5e9786109545c6b2e1.css"
|
||
integrity="sha256-PkA6A+Ovg3s4Kem28B/HeSvafLf1BW9el4YQlUXGsuE="
|
||
id="syntax-dark-theme"
|
||
class="syntax-theme"><link
|
||
rel="stylesheet"
|
||
href="/css/syntax-light.min.d0d33b879698595e6b2c0f75f0cea95a8517fb0150570cd0ee4dc42e25c8d147.css"
|
||
integrity="sha256-0NM7h5aYWV5rLA918M6pWoUX+wFQVwzQ7k3ELiXI0Uc="
|
||
id="syntax-light-theme"
|
||
class="syntax-theme"
|
||
disabled><script>
|
||
|
||
(function () {
|
||
const storedTheme = localStorage.getItem("theme");
|
||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||
|
||
const syntaxDark = document.getElementById("syntax-dark-theme");
|
||
const syntaxLight = document.getElementById("syntax-light-theme");
|
||
|
||
if (theme === "light") {
|
||
if (syntaxDark) syntaxDark.disabled = true;
|
||
if (syntaxLight) syntaxLight.disabled = false;
|
||
} else {
|
||
if (syntaxDark) syntaxDark.disabled = false;
|
||
if (syntaxLight) syntaxLight.disabled = true;
|
||
}
|
||
|
||
|
||
const observer = new MutationObserver(() => {
|
||
const currentTheme = document.documentElement.getAttribute("data-theme");
|
||
if (currentTheme === "light") {
|
||
if (syntaxDark) syntaxDark.disabled = true;
|
||
if (syntaxLight) syntaxLight.disabled = false;
|
||
} else {
|
||
if (syntaxDark) syntaxDark.disabled = false;
|
||
if (syntaxLight) syntaxLight.disabled = true;
|
||
}
|
||
});
|
||
|
||
observer.observe(document.documentElement, {
|
||
attributes: true,
|
||
attributeFilter: ["data-theme"],
|
||
});
|
||
})();
|
||
</script>
|
||
|
||
|
||
|
||
|
||
<link
|
||
rel="stylesheet"
|
||
href="/css/bundle.min.783a79746a859af9be598cbc33fba2a1087434b23768524277b07ef28336f113.css"
|
||
integrity="sha256-eDp5dGqFmvm+WYy8M/uioQh0NLI3aFJCd7B+8oM28RM=">
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
||
|
||
<link rel="icon" type="image/png" href="/favicon.png">
|
||
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/logo-transparent/favicon-32x32.png">
|
||
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/logo-transparent/favicon-16x16.png">
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/logo-transparent/apple-touch-icon.png">
|
||
<link
|
||
rel="icon"
|
||
type="image/png"
|
||
sizes="192x192"
|
||
href="/favicon/logo-transparent/android-chrome-192x192.png">
|
||
<link
|
||
rel="icon"
|
||
type="image/png"
|
||
sizes="512x512"
|
||
href="/favicon/logo-transparent/android-chrome-512x512.png">
|
||
<link rel="manifest" href="/favicon/logo-transparent/site.webmanifest">
|
||
|
||
|
||
<link rel="alternate" type="application/json" href="https://pyte.dev/index.json">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</head>
|
||
<body class="flex flex-col min-h-screen">
|
||
<a href="#main-content" class="skip-to-main" aria-label="Skip to main content"
|
||
>Skip to main content</a
|
||
>
|
||
<header class="sticky-header">
|
||
<div class="header-container">
|
||
<nav class="header-nav" role="navigation" aria-label="Main navigation">
|
||
<div class="header-content">
|
||
<div class="header-logo">
|
||
<a href="/" class="logo-link" aria-label="Home - Demians Blog">
|
||
Demians Blog
|
||
</a>
|
||
</div>
|
||
|
||
<div class="header-menu">
|
||
<ul class="menu-list">
|
||
|
||
<li class="menu-item">
|
||
<a
|
||
href="/"
|
||
class="menu-link ">
|
||
Home
|
||
</a>
|
||
</li>
|
||
|
||
<li class="menu-item">
|
||
<a
|
||
href="/posts/"
|
||
class="menu-link ">
|
||
Blog
|
||
</a>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<button id="search-toggle" class="search-toggle" aria-label="Search" type="button">
|
||
<svg class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||
</svg>
|
||
</button>
|
||
|
||
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme" type="button">
|
||
<svg class="icon-sun" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
||
</svg>
|
||
<svg class="icon-moon" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
|
||
</svg>
|
||
</button>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
<main id="main-content" class="flex-1" role="main">
|
||
|
||
|
||
<section class="hero-section">
|
||
<div class="hero-container">
|
||
<div class="hero-content">
|
||
<div class="hero-text">
|
||
<h1 class="hero-title">
|
||
|
||
<span class="hero-title-line1">Demians</span>
|
||
|
||
|
||
<span class="hero-title-line2">Blog</span>
|
||
|
||
</h1>
|
||
|
||
<p class="hero-subtitle">> Mein persönlicher Blog über Open-Source Technologien, Hostinglösungen, Linux und den ganzen Rest.</p>
|
||
|
||
|
||
<div class="hero-social">
|
||
<div class="social-links">
|
||
|
||
<a
|
||
href="https://github.com/pyte1"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
class="social-link"
|
||
aria-label="GitHub">
|
||
<svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
fill-rule="evenodd"
|
||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||
clip-rule="evenodd"></path>
|
||
</svg>
|
||
</a>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="mailto:demian%20%28at%29%20pyte%20%28dot%29%20dev" class="social-link" aria-label="Email">
|
||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||
</svg>
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="hero-image">
|
||
|
||
|
||
|
||
|
||
|
||
<img src="https://pyte.dev/assets/patrick.png" alt="Demians Blog" class="hero-logo">
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<div class="home-container">
|
||
|
||
<section class="posts-section">
|
||
<h2 class="posts-title">Recent Posts</h2>
|
||
|
||
<div class="posts-list">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article
|
||
class="post-card"
|
||
data-post-url="/posts/spaceship-distrobox/"
|
||
data-year-month="2026 January"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="post-content">
|
||
<h3 class="post-title">
|
||
<a href="/posts/spaceship-distrobox/" onclick="event.stopPropagation();">Spaceship Distrobox</a>
|
||
</h3>
|
||
|
||
|
||
<p class="post-description"><h1 id="how-i-solved-the-distrobox-confusion-in-my-terminal">How I Solved the Distrobox Confusion in My Terminal</h1>
|
||
<p>Recently, I found myself struggling with something that seemed like a simple problem: when I was …</p></p>
|
||
|
||
|
||
<div class="post-meta-inline">
|
||
<time datetime="2026-01-04T20:33:45+01:00" class="post-date">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||
</svg>
|
||
January 4, 2026
|
||
</time>
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-word-count">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||
</svg>
|
||
291 words
|
||
</span>
|
||
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-reading-time">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||
</svg>
|
||
2 min
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</article>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article
|
||
class="post-card"
|
||
data-post-url="/posts/google-groups-spam/"
|
||
data-year-month="2025 October"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="post-content">
|
||
<h3 class="post-title">
|
||
<a href="/posts/google-groups-spam/" onclick="event.stopPropagation();">Google Groups Spam</a>
|
||
</h3>
|
||
|
||
|
||
<p class="post-description"><h1 id="understanding-the-google-groups-spam-problem">Understanding the Google Groups Spam Problem</h1>
|
||
<p>Over the past year, I’ve noticed a significant increase in spam messages originating from Google …</p></p>
|
||
|
||
|
||
<div class="post-meta-inline">
|
||
<time datetime="2025-10-10T09:26:56+02:00" class="post-date">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||
</svg>
|
||
October 10, 2025
|
||
</time>
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-word-count">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||
</svg>
|
||
722 words
|
||
</span>
|
||
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-reading-time">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||
</svg>
|
||
4 min
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</article>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article
|
||
class="post-card"
|
||
data-post-url="/posts/blocking-invalid-rcpt-postfix/"
|
||
data-year-month="2025 August"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="post-content">
|
||
<h3 class="post-title">
|
||
<a href="/posts/blocking-invalid-rcpt-postfix/" onclick="event.stopPropagation();">Blocking Invalid Recipients Before They Reach Your Exchange Server</a>
|
||
</h3>
|
||
|
||
|
||
<p class="post-description"><p>Recently, I had to deal with a serious problem: <strong>backscatter</strong>.<br>
|
||
One of our mail gateways ended up listed on the <strong>backscatter.org</strong> blacklist for sending …</p></p>
|
||
|
||
|
||
<div class="post-meta-inline">
|
||
<time datetime="2025-08-01T10:03:15+02:00" class="post-date">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||
</svg>
|
||
August 1, 2025
|
||
</time>
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-word-count">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||
</svg>
|
||
762 words
|
||
</span>
|
||
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-reading-time">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||
</svg>
|
||
4 min
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</article>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article
|
||
class="post-card"
|
||
data-post-url="/posts/dovecot-index-cache-issues/"
|
||
data-year-month="2025 May"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="post-content">
|
||
<h3 class="post-title">
|
||
<a href="/posts/dovecot-index-cache-issues/" onclick="event.stopPropagation();">Dovecot Index Cache Issues</a>
|
||
</h3>
|
||
|
||
|
||
<p class="post-description"><h1 id="understanding-dovecotindexcache">Understanding <code>dovecot.index.cache</code></h1>
|
||
<p>I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed …</p></p>
|
||
|
||
|
||
<div class="post-meta-inline">
|
||
<time datetime="2025-05-18T11:34:09+02:00" class="post-date">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||
</svg>
|
||
May 18, 2025
|
||
</time>
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-word-count">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||
</svg>
|
||
592 words
|
||
</span>
|
||
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-reading-time">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||
</svg>
|
||
3 min
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</article>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<article
|
||
class="post-card"
|
||
data-post-url="/posts/my-first-post/"
|
||
data-year-month="2025 May"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="post-content">
|
||
<h3 class="post-title">
|
||
<a href="/posts/my-first-post/" onclick="event.stopPropagation();">Introduction</a>
|
||
</h3>
|
||
|
||
|
||
<p class="post-description"><h1 id="welcome-to-my-blog">Welcome to My Blog!</h1>
|
||
<p>I’m <strong>Demian</strong>, a <strong>Sysadmin</strong>, <strong>Email Infrastructure enthusiast</strong>, and a passionate <strong>Open Source contributor</strong>. This is where I’ll be sharing …</p></p>
|
||
|
||
|
||
<div class="post-meta-inline">
|
||
<time datetime="2025-05-11T20:13:49+02:00" class="post-date">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
|
||
</svg>
|
||
May 11, 2025
|
||
</time>
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-word-count">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||
</svg>
|
||
236 words
|
||
</span>
|
||
|
||
|
||
|
||
<span class="meta-separator">•</span>
|
||
<span class="post-reading-time">
|
||
<svg class="meta-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||
</svg>
|
||
2 min
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</article>
|
||
|
||
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer>
|
||
<footer class="site-footer">
|
||
<div class="footer-content">
|
||
<p class="footer-text">
|
||
©
|
||
|
||
2026
|
||
|
||
Demians Blog.
|
||
|
||
Built with Hugo and Mana ❤️
|
||
|
||
</p>
|
||
|
||
<div class="footer-social">
|
||
<div class="social-links">
|
||
|
||
<a
|
||
href="https://github.com/pyte1"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
class="social-link"
|
||
aria-label="GitHub">
|
||
<svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
fill-rule="evenodd"
|
||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||
clip-rule="evenodd"></path>
|
||
</svg>
|
||
</a>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="mailto:demian%20%28at%29%20pyte%20%28dot%29%20dev" class="social-link" aria-label="Email">
|
||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||
</svg>
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</footer>
|
||
|
||
</footer>
|
||
|
||
<div id="search-modal" class="search-modal" aria-hidden="true" role="dialog" aria-label="Search">
|
||
<div class="search-modal-backdrop" id="search-modal-backdrop"></div>
|
||
<div class="search-modal-container">
|
||
<div class="search-input-wrapper">
|
||
<svg class="search-input-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||
</svg>
|
||
<input
|
||
type="search"
|
||
id="search-input"
|
||
class="search-input"
|
||
placeholder="Search..."
|
||
autocomplete="off"
|
||
aria-label="Search input">
|
||
<button class="search-input-clear" id="search-input-clear" aria-label="Clear search">
|
||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||
</svg>
|
||
</button>
|
||
<button class="search-modal-close" id="search-modal-close" aria-label="Close search">
|
||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M6 18L18 6M6 6l12 12"></path>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
<div id="search-results" class="search-results"></div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<button id="scroll-to-top" class="scroll-to-top" aria-label="Scroll to top" type="button">
|
||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
stroke-width="2"
|
||
d="M5 10l7-7m0 0l7 7m-7-7v18"></path>
|
||
</svg>
|
||
</button>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<script src="/js/main.min.e60ab79dca7b920b4dc5cf3163ad5ce8794839b60f27778db65782f087be3e27.js" defer></script>
|
||
|
||
</body>
|
||
</html>
|