<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Minimalism auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/minimalism/</link>
    <description>Neueste Beiträge in Minimalism auf cbrueggenolte.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <managingEditor>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</managingEditor>
    <webMaster>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</webMaster>
    <copyright>2018-2026 cbrueggenolte</copyright>
    <lastBuildDate>Sat, 06 Sep 2025 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/minimalism/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mein Microblog – Von der Idee zur stabilen App</title>
      <link>https://cbrueggenolte.de/mein-microblog-von-der-idee-zur-stabilen-app/</link>
      <pubDate>Sat, 06 Sep 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/mein-microblog-von-der-idee-zur-stabilen-app/</guid>
      <description>&lt;p&gt;Die letzten Wochen habe ich mich intensiv mit meinem eigenen Microblog beschäftigt. Was als kleines Experiment begann,&#xA;wuchs schnell zu einem vollwertigen Projekt heran.&#xA;Die Idee war klar: eine minimalistische Plattform für kurze Beiträge in Markdown,&#xA;ohne schweres CMS, ohne unnötigen Ballast.&#xA;Ich wollte etwas Eigenes schaffen – unabhängig von großen Anbietern, leichtgewichtig und trotzdem funktional.&lt;/p&gt;&#xA;&lt;h2 id=&#34;der-weg-zur-richtigen-technologie&#34;&gt;Der Weg zur richtigen Technologie&lt;/h2&gt;&#xA;&lt;p&gt;Ich war sofort von &lt;a href=&#34;https://bun.sh/&#34;&gt;Bun&lt;/a&gt; begeistert – schnell, modern,&#xA;mit einer eleganten All-in-One-Philosophie.&#xA;Doch auf meinem Uberspace-Host scheiterte jede Bun-Version&#xA;an einer zu alten glibc.&#xA;Schade, aber Plan B war schnell gefunden: &lt;a href=&#34;https://deno.land/&#34;&gt;Deno&lt;/a&gt;.&#xA;Deno versprach Sicherheit und moderne Features.&#xA;Allerdings war die Kompatibilität mit manchen Bibliotheken hakelig,&#xA;und ich stieß bei der Integration auf zu viele kleine Hürden.&#xA;Nach diesen Experimenten landete ich bei klassischem Node.js (mit pnpm).&#xA;Es ist robust, weit verbreitet und ließ sich auf meinem Host&#xA;ohne Probleme einrichten.&#xA;Mit TypeScript und ESM war ich trotzdem nah&#xA;an einer modernen Entwicklungsumgebung.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Die letzten Wochen habe ich mich intensiv mit meinem eigenen Microblog beschäftigt. Was als kleines Experiment begann,
wuchs schnell zu einem vollwertigen Projekt heran.
Die Idee war klar: eine minimalistische Plattform für kurze Beiträge in Markdown,
ohne schweres CMS, ohne unnötigen Ballast.
Ich wollte etwas Eigenes schaffen – unabhängig von großen Anbietern, leichtgewichtig und trotzdem funktional.</p>
<h2 id="der-weg-zur-richtigen-technologie">Der Weg zur richtigen Technologie</h2>
<p>Ich war sofort von <a href="https://bun.sh/">Bun</a> begeistert – schnell, modern,
mit einer eleganten All-in-One-Philosophie.
Doch auf meinem Uberspace-Host scheiterte jede Bun-Version
an einer zu alten glibc.
Schade, aber Plan B war schnell gefunden: <a href="https://deno.land/">Deno</a>.
Deno versprach Sicherheit und moderne Features.
Allerdings war die Kompatibilität mit manchen Bibliotheken hakelig,
und ich stieß bei der Integration auf zu viele kleine Hürden.
Nach diesen Experimenten landete ich bei klassischem Node.js (mit pnpm).
Es ist robust, weit verbreitet und ließ sich auf meinem Host
ohne Probleme einrichten.
Mit TypeScript und ESM war ich trotzdem nah
an einer modernen Entwicklungsumgebung.</p>
<p>Für das Web-Framework fiel die Wahl auf <a href="https://hono.dev/">Hono</a>.
Es ist klein, schnell und hat eine klare, intuitive API – perfekt für ein
Projekt, das keinen Overhead verträgt.
Als Template-Engine wählte ich <a href="https://eta.js.org/">Eta</a>, weil sie
minimalistisch ist, eine einfache Syntax bietet und mir volle Kontrolle über
die Templates gibt.
Für die Datenhaltung experimentierte ich zunächst mit Markdown-Dateien im
Dateisystem.
Das war simpel, aber unpraktisch, sobald es um dynamische Inhalte oder
Metadaten ging.
Also wechselte ich zu <a href="https://github.com/typicode/lowdb">LowDB</a>, einem
JSON-Datei-Store, der sich schnell einbinden ließ und für ein
Single-Instance-Projekt wie dieses ideal ist.</p>
<p>Das Design hielt ich mit <a href="https://tailwindcss.com/">Tailwind CSS</a> bewusst schlicht.
Tailwind ermöglicht es,
schnell ansprechende Layouts zu bauen,
ohne sich in CSS-Details zu verlieren.
Für die Umwandlung von Markdown in sauberes HTML
kam <a href="https://markdown-it.github.io/">Markdown-It</a> zum Einsatz,
das zuverlässig und flexibel ist.</p>
<h2 id="technik-stack">Technik Stack</h2>
<ul>
<li><strong>Runtime</strong>: Node.js (ESM + TypeScript) – robust und kompatibel</li>
<li><strong>Framework</strong>: Hono – schlank, schnell, mit klarer API</li>
<li><strong>Templates</strong>: Eta – minimalistisch und leicht kontrollierbar</li>
<li><strong>Datenhaltung</strong>: LowDB – JSON-Datei-Store, ideal für kleine Projekte</li>
<li><strong>Styling</strong>: Tailwind CSS (CLI v4) – für ein sauberes, modernes Design</li>
<li><strong>Markdown</strong>: Markdown-It – für zuverlässige Markdown-zu-HTML-Konvertierung</li>
<li><strong>Sicherheit</strong>: CSRF-Schutz, Rate Limiting, sichere Cookies</li>
<li><strong>Build/Deploy</strong>: <code>tsc</code>, Tailwind CLI, rsync-Deploy mit Backup</li>
<li><strong>Performance</strong>: Statische Assets mit Cache-Headers, minimale JS-Bundles</li>
</ul>
<h2 id="herausforderungen-und-lösungen">Herausforderungen und Lösungen</h2>
<p>Die größte Herausforderung war,
die Balance zwischen Einfachheit und Funktionalität zu finden.
Zum Beispiel war die Entscheidung für LowDB nicht trivial:
Ich hatte zunächst überlegt,
eine richtige Datenbank wie PostgreSQL einzusetzen.
Aber für ein kleines Projekt mit überschaubarem Datenvolumen
wäre das Overkill gewesen.
SQLite schied leider auch aus, weil Uberspace keine Unterstützung
aufgrund von fehlenden Bibliotheken bot.
LowDB bot die perfekte Mischung aus Flexibilität und Einfachheit,
auch wenn ich für größere Projekte vielleicht noch mal umdenken würde.</p>
<h2 id="sicherheit-und-betrieb">Sicherheit und Betrieb</h2>
<p>Sicherheit war mir von Anfang an wichtig.
Sessions werden im Speicher gehalten,
was bei einem Server-Neustart zu einem Logout führt –
für mein kleines Projekt akzeptabel.
Cookies sind sicher konfiguriert
(<code>HttpOnly</code>, <code>SameSite</code>, <code>Secure</code> in Produktion),
und ein CSRF-Schutz sichert Login- und Admin-Formulare ab.
Um Brute-Force-Attacken vorzubeugen,
habe ich ein einfaches IP-basiertes Rate Limiting implementiert.
Es ist nicht perfekt,
sollte für meine Zwecke aber ausreichen.</p>
<p>Der Build-Prozess ist bewusst schlank:
TypeScript wird mit <code>tsc</code> kompiliert,
Tailwind CSS über die CLI gebaut.
Die Artefakte werden mit <code>rsync</code> auf den Server übertragen,
mit einem automatischen Backup vor jedem Deploy.
Um CSS-Cache-Probleme zu vermeiden,
nutze ich Cache-Busting durch Versions-Hashes in den Dateinamen.
Das sorgt dafür,
dass Nutzer immer die aktuelle Version der Stylesheets laden,
ohne dass ich manuell eingreifen muss.</p>
<h2 id="ausblick-was-kommt-noch">Ausblick: Was kommt noch?</h2>
<p>Das Projekt ist jetzt stabil, aber es gibt noch Ideen für die Zukunft.
Erst heute habe ich die RSS-Feed Funktion implementiert.
Eine Kommentarfunktion wäre auch spannend,
aber ich müsste entscheiden, wie ich das ohne großen Verwaltungsaufwand umsetze.
Von daher gibt es erst einmal keine Kommentare.
Wenn mir jemand etwas schreiben möchte,
gibt es genügend Möglichkeiten, dies zu tun.
Außerdem spiele ich mit dem Gedanken,
Beiträge nach Veröffentlichung automatisiert auch ins Fediverse zu pushen.</p>
<h2 id="fazit">Fazit</h2>
<p>Aus einer kleinen Idee ist in kurzer Zeit ein stabiler,
sicherer Microblog geworden – bewusst schlank gebaut,
aber erweiterbar.
Hono, Eta und LowDB haben sich als hervorragende Kombi
für ein leichtgewichtiges Projekt erwiesen.
Die Entscheidung für Node.js und TypeScript
hat sich als pragmatisch und zukunftssicher herausgestellt.
Am meisten freut mich, dass ich jetzt eine Plattform habe,
die genau das tut, was ich wollte: kurze, fokussierte Inhalte teilen,
ohne Overhead und unabhängig von großen Anbietern.
Es war ein Lernprozess, aber jeder Schritt –
von den gescheiterten Bun-Experimenten
bis zur finalen Deploy-Strategie – hat sich gelohnt.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
