add docker compose for instant publishing

This commit is contained in:
julius committed 2026-09-14 19:30:34 +02:00
1 parent 7b368bc958
commit ae16126d99
20 files changed
+5199

No files matched your search

+508
View File
@@ -0,0 +1,508 @@
<!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></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="/"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>Projects</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="/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="/"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>Projects</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="/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">
<h1></h1>
<time datetime="0001-01-01T00:00:00&#43;00:00">1. Januar 1</time>
<h1 id="über-thereisnospace" class=" mt-8 mb-3 text-2xl sm:text-3xl text-white">
<span class="relative inline-block">
Über ThereIsNo.Space
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h1>
<p>ThereIsNo.Space ist ein sich im aufbau befindlicher Hacker und Makerspace.</p>
<h2 id="unsere-werte" class="mt-8 mb-3 text-xl sm:text-2xl text-white">
<span class="relative inline-block">
Unsere Werte
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h2>
<ul>
<li>Open Knowledge – Wissen teilen statt horten</li>
<li>Hands-on – Lernen durch Ausprobieren</li>
<li>Community – Alle sind willkommen, egal welches Skill-Level</li>
</ul>
<h2 id="kontakt" class="mt-8 mb-3 text-xl sm:text-2xl text-white">
<span class="relative inline-block">
Kontakt
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h2>
<p>E-Mail: <a href="mailto:info@thereisno.space">info@thereisno.space</a>
Matrix: #ThereIsNoSpace:wolffy.eu
Oder Triff uns auf Events!</p>
</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>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+501
View File
@@ -0,0 +1,501 @@
<!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>Blog</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="/"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>Projects</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="page" 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="/"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>Projects</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="page" 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">
<main class="max-w-6xl mx-auto px-4 sm:px-6 pt-24 pb-12 text-gray-100">
<header class="mb-8">
<h1 class="text-2xl sm:text-3xl md:text-4xl tracking-wide text-white">Blog</h1>
<p class="mt-2 text-sm sm:text-base text-gray-400">
1 items under this folder.
</p>
</header><div class="border border-gray-800/70 rounded-sm bg-[#070709] divide-y divide-gray-800/80 overflow-hidden"><a href="/blog/wilkommen/" class="group block px-4 sm:px-6 py-4 transition-colors duration-200 hover:bg-white/5">
<div class="grid grid-cols-12 gap-4 items-start">
<div class="col-span-12 md:col-span-8">
<div class="text-xs sm:text-sm text-gray-500 font-mono">
<span>Sep 14, 2026</span>
<span class="mx-2 text-gray-700">•</span>
<span>00:00</span>
</div>
<div class="mt-1 text-lg sm:text-xl text-gray-100">
<span class="relative inline-block">
Willkommen im ThereIsNo.Space
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</div>
</div>
<div class="col-span-12 md:col-span-4 flex md:justify-end flex-wrap gap-2"><span class="px-2 py-0.5 text-xs sm:text-sm rounded-sm border border-gray-700/70 text-gray-300 bg-black/30">
#hackerspace
</span><span class="px-2 py-0.5 text-xs sm:text-sm rounded-sm border border-gray-700/70 text-gray-300 bg-black/30">
#makerspace
</span></div>
</div>
</a></div>
</main>
</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>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Blog on ThereIsNo.Space</title>
<link>https://thereisno.space/blog/</link>
<description>Recent content in Blog on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0200</lastBuildDate>
<atom:link href="https://thereisno.space/blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Willkommen im ThereIsNo.Space</title>
<link>https://thereisno.space/blog/wilkommen/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/blog/wilkommen/</guid>
<description>&lt;p&gt;#Dies ist der erste Beitrag auf unserer neuen Seite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;echo &amp;ldquo;Hello, World!&amp;rdquo; &amp;gt; /dev/thereisno.space&lt;/strong&gt;&#xA;Hier wird künftig über Projekte, Workshops und Events berichtet.&#xA;&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>
+637
View File
@@ -0,0 +1,637 @@
<!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="/"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>Projects</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="/"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>Projects</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>
+472
View File
@@ -0,0 +1,472 @@
<!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>Categories</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="/"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>Projects</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="/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="/"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>Projects</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="/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">
<h1>Categories</h1>
</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>
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on ThereIsNo.Space</title>
<link>https://thereisno.space/categories/</link>
<description>Recent content in Categories on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<atom:link href="https://thereisno.space/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+523
View File
@@ -0,0 +1,523 @@
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.165.0">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="icon" type="image/png" href="/avatar.png">
<title>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="/"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>Projects</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="/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 aria-current="page" 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="/"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>Projects</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="/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 aria-current="page" 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">
<section class="relative border border-gray-200 bg-[#070709] rounded-sm p-8 md:p-12 text-gray-300">
<h1 class="text-2xl sm:text-3xl md:text-4xl font-semibold text-blue-200 mb-6 tracking-wide">
About Us
</h1>
<div class="space-y-6 sm:text-lg md:text-xl lg:text-2xl leading-relaxed [&_a]:text-blue-200
[&_a]:underline
[&_a:hover]:text-blue-100
[&_a]:transition-colors
[&_a]:duration-200">
<h1 id="über-thereisnospace" class=" mt-8 mb-3 text-2xl sm:text-3xl text-white">
<span class="relative inline-block">
Über ThereIsNo.Space
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h1>
<p>ThereIsNo.Space ist ein sich im aufbau befindlicher Hacker und Makerspace.</p>
<h2 id="unsere-werte" class="mt-8 mb-3 text-xl sm:text-2xl text-white">
<span class="relative inline-block">
Unsere Werte
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h2>
<ul>
<li>Open Knowledge – Wissen teilen statt horten</li>
<li>Hands-on – Lernen durch Ausprobieren</li>
<li>Community – Alle sind willkommen, egal welches Skill-Level</li>
</ul>
<h2 id="kontakt" class="mt-8 mb-3 text-xl sm:text-2xl text-white">
<span class="relative inline-block">
Kontakt
<span
class="absolute left-0 -bottom-1 h-px w-0 bg-indigo-400"></span>
</span>
</h2>
<p>E-Mail: <a href="mailto:info@thereisno.space">info@thereisno.space</a>
Matrix: #ThereIsNoSpace:wolffy.eu
Oder Triff uns auf Events!</p>
</div>
</section>
</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>
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ThereIsNo.Space</title>
<link>https://thereisno.space/</link>
<description>Recent content on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0200</lastBuildDate>
<atom:link href="https://thereisno.space/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Willkommen im ThereIsNo.Space</title>
<link>https://thereisno.space/blog/wilkommen/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/blog/wilkommen/</guid>
<description>&lt;p&gt;#Dies ist der erste Beitrag auf unserer neuen Seite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;echo &amp;ldquo;Hello, World!&amp;rdquo; &amp;gt; /dev/thereisno.space&lt;/strong&gt;&#xA;Hier wird künftig über Projekte, Workshops und Events berichtet.&#xA;&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;</description>
</item>
<item>
<title></title>
<link>https://thereisno.space/about/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://thereisno.space/about/</guid>
<description>&lt;h1 id=&#34;über-thereisnospace&#34; class=&#34; mt-8 mb-3 text-2xl sm:text-3xl text-white&#34;&gt;&#xA; &lt;span class=&#34;relative inline-block&#34;&gt;&#xA; Über ThereIsNo.Space&#xA; &lt;span&#xA; class=&#34;absolute left-0 -bottom-1 h-px w-0 bg-indigo-400&#34;&gt;&lt;/span&gt;&#xA; &lt;/span&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;ThereIsNo.Space ist ein sich im aufbau befindlicher Hacker und Makerspace.&lt;/p&gt;&#xA;&lt;h2 id=&#34;unsere-werte&#34; class=&#34;mt-8 mb-3 text-xl sm:text-2xl text-white&#34;&gt;&#xA; &lt;span class=&#34;relative inline-block&#34;&gt;&#xA; Unsere Werte&#xA; &lt;span&#xA; class=&#34;absolute left-0 -bottom-1 h-px w-0 bg-indigo-400&#34;&gt;&lt;/span&gt;&#xA; &lt;/span&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open Knowledge – Wissen teilen statt horten&lt;/li&gt;&#xA;&lt;li&gt;Hands-on – Lernen durch Ausprobieren&lt;/li&gt;&#xA;&lt;li&gt;Community – Alle sind willkommen, egal welches Skill-Level&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;kontakt&#34; class=&#34;mt-8 mb-3 text-xl sm:text-2xl text-white&#34;&gt;&#xA; &lt;span class=&#34;relative inline-block&#34;&gt;&#xA; Kontakt&#xA; &lt;span&#xA; class=&#34;absolute left-0 -bottom-1 h-px w-0 bg-indigo-400&#34;&gt;&lt;/span&gt;&#xA; &lt;/span&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;E-Mail: &lt;a href=&#34;mailto:info@thereisno.space&#34;&gt;info@thereisno.space&lt;/a&gt;&#xA;Matrix: #ThereIsNoSpace:wolffy.eu&#xA;Oder Triff uns auf Events!&lt;/p&gt;</description>
</item>
</channel>
</rss>
+467
View File
@@ -0,0 +1,467 @@
<!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>Posts</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="/about/"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><li>
<a aria-current="page" href="/posts/"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>Posts</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="/about/"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><li>
<a aria-current="page" href="/posts/"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>Posts</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">
<h1>Posts</h1>
<section>
<h2><a href="/posts/wilkommen/"></a></h2>
<p>title: &ldquo;Willkommen im ThereIsNo.Space&rdquo;
date: 2026-09-14
draft: false
description: &ldquo;Der erste Post unseres Hackerspace-Blogs.&rdquo;
tags: [&ldquo;hackerspace&rdquo;, &ldquo;makerspace&rdquo;]</p>
<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>
</section>
</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>
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Posts on ThereIsNo.Space</title>
<link>https://thereisno.space/posts/</link>
<description>Recent content in Posts on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<atom:link href="https://thereisno.space/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title></title>
<link>https://thereisno.space/posts/wilkommen/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://thereisno.space/posts/wilkommen/</guid>
<description>&lt;p&gt;title: &amp;ldquo;Willkommen im ThereIsNo.Space&amp;rdquo;&#xA;date: 2026-09-14&#xA;draft: false&#xA;description: &amp;ldquo;Der erste Post unseres Hackerspace-Blogs.&amp;rdquo;&#xA;tags: [&amp;ldquo;hackerspace&amp;rdquo;, &amp;ldquo;makerspace&amp;rdquo;]&lt;/p&gt;&#xA;&lt;p&gt;#Dies ist der erste Beitrag auf unserer neuen Seite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;echo &amp;ldquo;Hello, World!&amp;rdquo; &amp;gt; /dev/thereisno.space&lt;/strong&gt;&#xA;Hier wird künftig über Projekte, Workshops und Events berichtet.&#xA;&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>
+469
View File
@@ -0,0 +1,469 @@
<!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></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="/about/"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><li>
<a aria-current="true" href="/posts/"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>Posts</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="/about/"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><li>
<a aria-current="true" href="/posts/"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>Posts</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">
<h1></h1>
<time datetime="0001-01-01T00:00:00&#43;00:00">1. Januar 1</time>
<p>title: &ldquo;Willkommen im ThereIsNo.Space&rdquo;
date: 2026-09-14
draft: false
description: &ldquo;Der erste Post unseres Hackerspace-Blogs.&rdquo;
tags: [&ldquo;hackerspace&rdquo;, &ldquo;makerspace&rdquo;]</p>
<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>
</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>
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://thereisno.space/blog/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/tags/hackerspace/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/tags/makerspace/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/tags/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/blog/wilkommen/</loc>
<lastmod>2026-09-14T00:00:00+02:00</lastmod>
</url><url>
<loc>https://thereisno.space/about/</loc>
</url><url>
<loc>https://thereisno.space/categories/</loc>
</url>
</urlset>
+474
View File
@@ -0,0 +1,474 @@
<!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>Hackerspace</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="/"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>Projects</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="/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="/"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>Projects</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="/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">
<h1>Hackerspace</h1>
<h2><a href="/blog/wilkommen/">Willkommen im ThereIsNo.Space</a></h2>
</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>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Hackerspace on ThereIsNo.Space</title>
<link>https://thereisno.space/tags/hackerspace/</link>
<description>Recent content in Hackerspace on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0200</lastBuildDate>
<atom:link href="https://thereisno.space/tags/hackerspace/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Willkommen im ThereIsNo.Space</title>
<link>https://thereisno.space/blog/wilkommen/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/blog/wilkommen/</guid>
<description>&lt;p&gt;#Dies ist der erste Beitrag auf unserer neuen Seite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;echo &amp;ldquo;Hello, World!&amp;rdquo; &amp;gt; /dev/thereisno.space&lt;/strong&gt;&#xA;Hier wird künftig über Projekte, Workshops und Events berichtet.&#xA;&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>
+476
View File
@@ -0,0 +1,476 @@
<!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>Tags</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="/"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>Projects</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="/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="/"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>Projects</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="/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">
<h1>Tags</h1>
<h2><a href="/tags/hackerspace/">Hackerspace</a></h2>
<h2><a href="/tags/makerspace/">Makerspace</a></h2>
</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>
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on ThereIsNo.Space</title>
<link>https://thereisno.space/tags/</link>
<description>Recent content in Tags on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0200</lastBuildDate>
<atom:link href="https://thereisno.space/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Hackerspace</title>
<link>https://thereisno.space/tags/hackerspace/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/tags/hackerspace/</guid>
<description></description>
</item>
<item>
<title>Makerspace</title>
<link>https://thereisno.space/tags/makerspace/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/tags/makerspace/</guid>
<description></description>
</item>
</channel>
</rss>
+474
View File
@@ -0,0 +1,474 @@
<!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>Makerspace</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="/"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>Projects</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="/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="/"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>Projects</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="/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">
<h1>Makerspace</h1>
<h2><a href="/blog/wilkommen/">Willkommen im ThereIsNo.Space</a></h2>
</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>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Makerspace on ThereIsNo.Space</title>
<link>https://thereisno.space/tags/makerspace/</link>
<description>Recent content in Makerspace on ThereIsNo.Space</description>
<generator>Hugo</generator>
<language>de</language>
<lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0200</lastBuildDate>
<atom:link href="https://thereisno.space/tags/makerspace/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Willkommen im ThereIsNo.Space</title>
<link>https://thereisno.space/blog/wilkommen/</link>
<pubDate>Mon, 14 Sep 2026 00:00:00 +0200</pubDate>
<guid>https://thereisno.space/blog/wilkommen/</guid>
<description>&lt;p&gt;#Dies ist der erste Beitrag auf unserer neuen Seite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;echo &amp;ldquo;Hello, World!&amp;rdquo; &amp;gt; /dev/thereisno.space&lt;/strong&gt;&#xA;Hier wird künftig über Projekte, Workshops und Events berichtet.&#xA;&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>