site generator: commands/*.md with front matter -> k8s/site/
site / generated-is-current (push) Failing after 36s

- build/build.mjs: one-file-per-command content (filename = command,
  underscores = spaces; help/suggestion/params/prefix/text/hidden in
  front matter; ${args} ${date} ${time} ${ls} ${help} resolved at runtime)
- generates index.html (banner + chips), commands.json (the single data
  source), hello.txt for curl, style.css via tailwind v4
- src/site.js is now dispatch-only over commands.json; typewriter kept
- src/telnet.py: stdlib telnet shell sharing commands.json
- k8s: python telnet sidecar in the pod + LoadBalancer service 23->2323
- .gitea/workflows/site.yml fails CI when k8s/site/ is not the built output
This commit is contained in:
momme
2026-10-14 01:14:28 +02:00
parent 5852efafd7
commit 8d33460580
47 changed files with 2773 additions and 424 deletions
+28 -53
View File
@@ -13,81 +13,56 @@
<link rel="canonical" href="https://momme.world/">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="/style.css">
<script>document.documentElement.classList.add("js")</script>
</head>
<body>
<main>
<body class="min-h-dvh bg-bg text-fg font-mono antialiased flex flex-col items-center justify-center p-4 sm:p-8 selection:bg-accent/30">
<div class="term" id="term">
<div class="titlebar">
<span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
<span class="title">momme@world: ~</span>
<main class="w-full max-w-3xl">
<div class="rounded-lg border border-line bg-panel shadow-[0_0_40px_rgba(0,0,0,.5)] overflow-hidden">
<div class="flex items-center gap-2 border-b border-line bg-bar px-3 py-2">
<span class="size-3 rounded-full bg-[#ff5f56]"></span>
<span class="size-3 rounded-full bg-[#ffbd2e]"></span>
<span class="size-3 rounded-full bg-[#27c93f]"></span>
<span class="ml-2 text-xs text-dim select-none">momme@world: ~</span>
</div>
<div class="screen" id="screen" tabindex="-1">
<pre class="hello">
_ _
<div id="screen" tabindex="-1" class="h-[62dvh] overflow-y-auto px-4 py-4 text-[13.5px] sm:text-[15px] leading-[1.35] cursor-text">
<pre class="text-dim overflow-x-auto not-prose"> _ _
| | | |
_ __ ___ ___ _ __ ___ _ __ ___ ___ __ _____ _ __| | __| |
| '_ ` _ \ / _ \| '_ ` _ \| '_ ` _ \ / _ \ \ \ /\ / / _ \| '__| |/ _` |
| | | | | | (_) | | | | | | | | | | | __/ _ \ V V / (_) | | | | (_| |
|_| |_| |_|\___/|_| |_| |_|_| |_| |_|\___| (_) \_/\_/ \___/|_| |_|\__,_|
0110110101101111011011010110110101100101001011100111011101101111011100100110110001100100
</pre>
0110110101101111011011010110110101100101001011100111011101101111011100100110110001100100</pre>
<div id="out"></div>
<div id="out" class="whitespace-pre-wrap break-words"></div>
<form id="prompt" autocomplete="off">
<span class="ps1" aria-hidden="true">momme@world:~$</span>
<form id="prompt" autocomplete="off" class="flex items-baseline gap-2 mt-1">
<span aria-hidden="true" class="text-accent shrink-0">momme@world:~$</span>
<input id="cmd" aria-label="Run a command" placeholder="type a command — try `help`"
class="flex-1 min-w-0 bg-transparent outline-none border-0 p-0 text-fg placeholder:text-dim/60 caret-transparent"
autocapitalize="off" autocorrect="off" spellcheck="false">
<span class="caret" aria-hidden="true"></span>
<span aria-hidden="true" class="cursor -ml-[0.6em]"></span>
</form>
</div>
</div>
<nav class="chips" aria-label="Commands">
<button data-run="whoami">whoami</button>
<button data-run="projects">projects</button>
<button data-run="stack">stack</button>
<button data-run="social">social</button>
<button data-run="contact">contact</button>
<nav class="mt-4 flex flex-wrap justify-center gap-2" aria-label="Commands">
<button data-run="contact" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">contact</button>
<button data-run="hello" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">hello</button>
<button data-run="project" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">project</button>
<button data-run="social" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">social</button>
<button data-run="stack" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">stack</button>
<button data-run="whoami" class="rounded border border-line bg-panel px-3 py-1 text-xs text-dim hover:text-accent hover:border-accent transition-colors">whoami</button>
</nav>
<p class="curl">
Terminal people: <code>curl momme.world</code>
&nbsp;·&nbsp; source: <a href="https://git.momme.cloud/momme-world/momme-world">git.momme.cloud/momme-world/momme-world</a>
<p class="mt-4 text-center text-xs text-dim">
Terminal people: <code class="text-fg">curl momme.world</code>
&nbsp;·&nbsp; tailnet: <code class="text-fg">telnet momme.world 23</code>
&nbsp;·&nbsp; source: <a class="text-accent hover:underline" href="https://git.momme.cloud/momme/momme-world">git.momme.cloud/momme/momme-world</a>
</p>
<!-- Readable and copy-pasteable with JavaScript turned off. The terminal
above is the same information, delivered as a conversation. -->
<noscript>
<section class="facts">
<h2>whoami</h2>
<p>I'm <strong>Momme Jürgensen</strong>. I work on infrastructure and developer
platforms — the kind of work where the best interface is a short command.
Currently at <a href="https://codeanker.de">codeanker</a>.</p>
<h2>stack</h2>
<ul>
<li><strong>Kubernetes</strong> — self-hosted cluster, GitOps, the whole garden.</li>
<li><strong>NixOS</strong> — reproducible configs for servers and laptops.</li>
<li><strong>Observability</strong> — Prometheus, Loki, dashboards I actually read.</li>
<li><strong>FPV drones</strong> — built, flown, crashed, rebuilt.</li>
</ul>
<h2>contact</h2>
<ul>
<li>Mail: <a href="mailto:momme@juergensen.me">momme@juergensen.me</a></li>
<li>Matrix: <a href="https://matrix.to/#/@momme:chaos.jetzt">@momme:chaos.jetzt</a></li>
<li>Mastodon: <a href="https://cybre.town/@momme">@momme@cybre.town</a></li>
<li>GitHub: <a href="https://github.com/supermomme">supermomme</a></li>
<li>Instagram: <a href="https://instagram.com/supermommej">@supermommej</a></li>
</ul>
</section>
</noscript>
</main>
<script src="/site.js"></script>
</body>