Files
Website/www/blog/wilkommen/index.html
T
2026-09-14 22:10:28 +02:00

638 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="icon" type="image/png" href="/avatar.png">
<title>Willkommen im ThereIsNo.Space</title>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<link rel="stylesheet" type='text/css' href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css"
integrity="sha512-2SwdPD6INVrV/lHTZbO2nodKhrnDdJK9/kg2XD1r9uGqPo1cUbujc+IYdlYdEErWNu69gVcYgdxlmVmzTWnetw=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<style>
@import url('https://fonts.googleapis.com/css2?family=Ubuntu+Sans+Mono:ital,wght@0,400..700;1,400..700&display=swap');
.font-jersey {
font-family: "Ubuntu Sans Mono", monospace;
font-optical-sizing: auto;
font-style: normal;
}
.md-content .katex-display {
max-width: 100%;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
padding-left: 0.25rem;
padding-right: 0.25rem;
}
.md-content .katex-display>.katex {
display: inline-block;
max-width: 100%;
}
.swup-transition-fade {
opacity: 1;
transition: 300ms ease-in-out;
}
.is-animating .swup-transition-fade {
opacity: 0;
}
.swup-transition-fade {
opacity: 1;
transition: opacity 300ms ease-in-out;
}
html.is-animating .swup-transition-fade {
opacity: 0;
}
html.is-animating {
cursor: progress;
}
html.is-leaving .swup-transition-fade {
opacity: 0;
}
</style>
<script src="https://unpkg.com/swup@4"></script>
<script src="https://unpkg.com/@swup/preload-plugin@3"></script>
<script src="https://unpkg.com/@swup/progress-plugin@3"></script>
<script>
const swup = new Swup({
containers: ['#swup'],
animationSelector: '[class*="swup-transition-"]',
cache: true,
preload: true,
animateHistoryBrowsing: true,
plugins: [
new SwupPreloadPlugin(),
new SwupProgressPlugin()
]
})
window.swup = swup
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js"
crossorigin="anonymous"></script>
<script>
const KATEX_CONFIG = {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false},
{left: "\\[", right: "\\]", display: true},
{left: "\\(", right: "\\)", display: false}
],
ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code"],
throwOnError: false
};
function renderKatex() {
if (typeof renderMathInElement !== "function") {
console.log("⏳ Waiting for KaTeX to load...");
return;
}
const contentArea = document.getElementById('swup') || document.body;
try {
renderMathInElement(contentArea, KATEX_CONFIG);
console.log("✅ KaTeX rendered successfully");
} catch (error) {
console.error("❌ KaTeX rendering error:", error);
}
}
function renderKatexWithRetry(maxRetries = 10, delay = 100) {
let attempts = 0;
const attempt = () => {
if (typeof renderMathInElement === "function") {
renderKatex();
} else if (attempts < maxRetries) {
attempts++;
setTimeout(attempt, delay);
} else {
console.warn("⚠️ KaTeX auto-render not available after", maxRetries, "attempts");
}
};
attempt();
}
function setupSwupIntegration() {
if (window.swup) {
window.swup.hooks.on('page:view', () => {
console.log("🔄 Swup transition complete, re-rendering KaTeX...");
setTimeout(() => renderKatexWithRetry(3, 50), 50);
});
console.log("✅ KaTeX-Swup integration ready");
} else {
setTimeout(setupSwupIntegration, 100);
}
}
document.addEventListener("DOMContentLoaded", function () {
console.log("🚀 Initializing KaTeX...");
renderKatexWithRetry();
setupSwupIntegration();
});
window.renderKatex = renderKatex;
</script>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
let initialized = false;
function renderMermaid() {
const contentArea = document.getElementById('swup') || document.body;
const mermaidBlocks = contentArea.querySelectorAll('.language-mermaid, .mermaid');
if (mermaidBlocks.length === 0) {
console.log("ℹ️ No mermaid blocks found on this page");
return;
}
if (!initialized) {
mermaid.initialize({startOnLoad: false, theme: 'dark'});
initialized = true;
}
mermaidBlocks.forEach(el => {
if (el.dataset.processed === 'true') {
const source = el.dataset.mermaidSource;
if (source) {
el.innerHTML = source;
el.removeAttribute('data-processed');
}
} else {
el.dataset.mermaidSource = el.textContent;
}
});
mermaid.run({nodes: mermaidBlocks})
.then(() => console.log("✅ Mermaid rendered successfully"))
.catch(err => console.error("❌ Mermaid rendering error:", err));
}
function renderMermaidWithRetry(maxRetries = 10, delay = 100) {
let attempts = 0;
const attempt = () => {
if (typeof mermaid.initialize === "function") {
renderMermaid();
} else if (attempts < maxRetries) {
attempts++;
setTimeout(attempt, delay);
} else {
console.warn("⚠️ Mermaid auto-render not available after", maxRetries, "attempts");
}
};
attempt();
}
function setupSwupIntegration() {
if (window.swup) {
window.swup.hooks.on('page:view', () => {
console.log("🔄 Swup transition complete, re-rendering mermaid...");
setTimeout(() => renderMermaidWithRetry(3, 50), 50);
});
console.log("✅ Mermaid-Swup integration ready");
} else {
setTimeout(setupSwupIntegration, 100);
}
}
document.addEventListener("DOMContentLoaded", function () {
console.log("🚀 Initializing KaTeX...");
renderMermaidWithRetry();
setupSwupIntegration();
});
</script>
</head>
<body class="min-h-screen flex flex-col bg-black font-jersey text-white text-3xl">
<header>
<div class="sticky absolute top-0 z-50">
<nav class="w-full border-b border-gray-800 bg-[#070709]/95 backdrop-blur-sm text-gray-100">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex items-center justify-between h-16">
<div class="flex items-center gap-3">
<a href='https://thereisno.space/' class="flex items-center gap-3 group" aria-label="Homepage">
<img src='/avatar.jpg' alt="ThereIsNo.Space"
class="w-10 h-10 rounded-sm border-2 border-gray-700 object-cover transition-transform duration-300 transform group-hover:scale-105"
style="animation: border-breathe 4s ease-in-out infinite;" />
<span class="text-white text-lg sm:text-xl md:text-2xl lg:text-3xl font-semibold tracking-wide">
ThereIsNo.Space
<span class="inline-block ml-2" style="animation: flicker 1.6s steps(2, end) infinite;">_</span>
</span>
</a>
</div>
<div class="flex items-center gap-4">
<div class="hidden md:flex items-center">
<nav aria-label="Primary" class="w-full">
<ul
class="flex flex-col md:flex-row md:items-center md:space-x-6 space-y-2 md:space-y-0 sm:text-lg md:text-xl lg:text-3xl"><li>
<a href="/projects/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Projekte</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a aria-current="true" href="/blog/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Blog</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a href="/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Über uns</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li>
</ul>
</nav>
</div>
<div class="md:hidden">
<button id="nav-toggle" aria-controls="mobile-menu" aria-expanded="false"
class="inline-flex items-center justify-center p-2 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-400"
aria-label="Open menu">
<svg class="h-6 w-6 text-gray-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
</div>
</div>
<div id="mobile-menu" class="md:hidden hidden pb-4">
<nav aria-label="Primary" class="w-full">
<ul
class="flex flex-col md:flex-row md:items-center md:space-x-6 space-y-2 md:space-y-0 sm:text-lg md:text-xl lg:text-3xl"><li>
<a href="/projects/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Projekte</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a aria-current="true" href="/blog/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Blog</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a href="/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Über uns</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</nav>
<style>
@keyframes flicker {
0% {
opacity: 1;
transform: translateY(0);
}
10% {
opacity: 0.2;
transform: translateY(-1px);
}
20% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 1;
}
}
@keyframes border-breathe {
0% {
box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.06);
}
50% {
box-shadow: 0 0 18px 6px rgba(99, 102, 241, 0.03);
}
100% {
box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.06);
}
}
</style>
<script>
(function () {
const btn = document.getElementById('nav-toggle');
const menu = document.getElementById('mobile-menu');
if (!btn || !menu) return;
btn.addEventListener('click', () => {
const open = menu.classList.toggle('hidden') === false;
btn.setAttribute('aria-expanded', open ? 'true' : 'false');
});
})();
</script>
</div>
</header>
<main class="flex-1 w-full">
<div id="swup" class="swup-transition-fade">
<div class="max-w-3xl lg:max-w-6xl xl:max-w-7xl mx-auto px-5 sm:px-8 lg:px-10 py-10 lg:py-16">
<div class="grid grid-cols-12 gap-8">
<aside class="hidden lg:block col-span-3">
<div class="sticky top-24">
<div class="mb-3 text-xs uppercase tracking-widest text-gray-500">Table of contents</div><nav class="toc border border-gray-800/70 bg-[#070709] rounded-sm p-4 text-base text-gray-300">
<nav id="TableOfContents"></nav>
</nav></div>
</aside>
<article class="col-span-12 lg:col-span-9">
<header class="mb-6">
<h1 class="text-2xl sm:text-3xl md:text-4xl tracking-wide text-white">
Willkommen im ThereIsNo.Space
</h1>
<div class="mt-2 flex flex-wrap items-center gap-x-3 gap-y-2 text-sm sm:text-base text-gray-400">
<span class="font-mono">Sep 14, 2026 • 00:00</span>
<span class="text-gray-700">/</span>
<span class="font-mono">1 min read</span>
</div><div class="mt-3 flex flex-wrap gap-2"><a href="/%20tags/hackerspace"
class="px-2 py-0.5 text-xs sm:text-sm rounded-sm border border-gray-700/70 text-gray-300 bg-black/30 hover:text-white hover:border-indigo-400/40 transition-colors">
#hackerspace
</a><a href="/%20tags/makerspace"
class="px-2 py-0.5 text-xs sm:text-sm rounded-sm border border-gray-700/70 text-gray-300 bg-black/30 hover:text-white hover:border-indigo-400/40 transition-colors">
#makerspace
</a></div></header>
<div class="lg:hidden mb-6">
<details class="border border-gray-800/70 bg-[#070709] rounded-sm">
<summary class="cursor-pointer select-none px-4 py-3 text-gray-200 hover:text-white transition-colors">
Table of contents
</summary>
<div class="px-4 pb-4 toc text-base text-gray-300">
<nav id="TableOfContents"></nav>
</div>
</details>
</div>
<div class="border border-gray-800/70 bg-[#070709] rounded-sm p-5 sm:p-7">
<div class="md-content text-lg sm:text-xl leading-relaxed text-gray-200">
<p>#Dies ist der erste Beitrag auf unserer neuen Seite.</p>
<p><strong>echo &ldquo;Hello, World!&rdquo; &gt; /dev/thereisno.space</strong>
Hier wird künftig über Projekte, Workshops und Events berichtet.
<strong>Stay tuned!</strong></p>
</div>
</div>
</article>
</div>
<style>
.toc {
font-size: 0.95rem;
line-height: 1.35;
}
.toc ul {
list-style: none;
margin: 0;
padding-left: 0;
}
.toc li {
position: relative;
margin: 0.35rem 0;
padding-left: 1.25rem;
overflow-wrap: anywhere;
word-break: break-word;
}
.toc a {
display: block;
padding: 0.15rem 0;
color: rgba(209, 213, 219, 0.92);
text-decoration: none;
}
.toc a:hover {
color: #fff;
text-decoration: underline;
text-decoration-color: rgba(99, 102, 241, 0.85);
text-underline-offset: 3px;
}
.toc ul ul {
margin: 0.4rem 0 0.4rem 0.35rem;
padding-left: 0.9rem;
border-left: 1px solid rgba(55, 65, 81, 0.6);
}
.toc ul ul>li {
padding-left: 1.75rem;
}
.toc ul ul>li::before {
content: "├";
position: absolute;
left: 0.35rem;
top: 0.2rem;
color: rgba(99, 102, 241, 0.75);
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
.toc ul ul>li:last-child::before {
content: "└";
}
@media (min-width: 1024px) {
.toc {
max-height: calc(100vh - 9rem);
overflow: auto;
padding-right: 0.25rem;
}
}
.md-content ul,
.md-content ol {
margin: 1rem 0;
padding-left: 1.35rem;
}
.md-content ul {
list-style: disc;
}
.md-content ul ul {
list-style: circle;
}
.md-content ul ul ul {
list-style: square;
}
.md-content ol {
list-style: decimal;
}
.md-content ol ol {
list-style: lower-roman;
}
.md-content ol ol ol {
list-style: lower-alpha;
}
.md-content li {
margin: 0.35rem 0;
}
.md-content pre,
.md-content code {
tab-size: 4;
}
</style>
</div>
</div>
</main>
<footer>
<div class="border-t border-gray-800 bg-[#070709] text-gray-400">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex flex-col md:flex-row items-center justify-between py-6 space-y-4 md:space-y-0">
<div class="text-sm sm:text-base md:text-lg">
<span class="relative inline-block">
© 2026 ThereIsNo.Space. All rights reserved. <br>
Made with <a href="https://gohugo.io" target="_blank">Hugo</a> | <a
href="https://github.com/Enerhim/enervoid-theme" target="_blank">Enervoid</a>
</span>
</div>
<div class="flex items-center space-x-6 text-sm sm:text-base md:text-lg">
</div>
</div>
</div>
</div>
</footer>
</body>
</html>