<?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>Astro auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/astro/</link>
    <description>Neueste Beiträge in Astro 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>Fri, 14 Nov 2025 00:00:00 +0100</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/astro/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Simple Admonitions in Astro</title>
      <link>https://cbrueggenolte.de/simple-admonitions-in-astro/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0100</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/simple-admonitions-in-astro/</guid>
      <description>&lt;p&gt;Add &lt;strong&gt;clean, professional, and accessible&lt;/strong&gt; admonition blocks to your Astro site&#xA;— perfect for documentation, tutorials, or blog posts.&lt;/p&gt;&#xA;&lt;p&gt;This guide gives you:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;6 types&lt;/strong&gt;: &lt;code&gt;tip&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;danger&lt;/code&gt;, &lt;code&gt;note&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;caution&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Custom titles&lt;/strong&gt; via &lt;code&gt;[Your Title]&lt;/code&gt; syntax&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Soft stone-themed colors&lt;/strong&gt; (pale, desaturated, readable)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zero JavaScript&lt;/strong&gt;, fully static&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No icons&lt;/strong&gt;, minimal &amp;amp; elegant&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;step-1-install-required-package&#34;&gt;Step 1: Install Required Package&lt;/h2&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;npm install remark-directive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;step-2-create-the-remark-plugin&#34;&gt;Step 2: Create the Remark Plugin&lt;/h2&gt;&#xA;&lt;p&gt;Create &lt;code&gt;remark-admonition.js&lt;/code&gt; in your project root:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Add <strong>clean, professional, and accessible</strong> admonition blocks to your Astro site
— perfect for documentation, tutorials, or blog posts.</p>
<p>This guide gives you:</p>
<ul>
<li><strong>6 types</strong>: <code>tip</code>, <code>warning</code>, <code>danger</code>, <code>note</code>, <code>info</code>, <code>caution</code></li>
<li><strong>Custom titles</strong> via <code>[Your Title]</code> syntax</li>
<li><strong>Soft stone-themed colors</strong> (pale, desaturated, readable)</li>
<li><strong>Zero JavaScript</strong>, fully static</li>
<li><strong>No icons</strong>, minimal &amp; elegant</li>
</ul>
<hr>
<h2 id="step-1-install-required-package">Step 1: Install Required Package</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">npm install remark-directive</span></span></code></pre></div><hr>
<h2 id="step-2-create-the-remark-plugin">Step 2: Create the Remark Plugin</h2>
<p>Create <code>remark-admonition.js</code> in your project root:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">visit</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;unist-util-visit&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="cm">/** Admonition Plugin – compatible with Astro + ESM + remark-directive */</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="kd">function</span> <span class="nx">remarkAdmonitionCompatible</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">return</span> <span class="p">(</span><span class="nx">tree</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="nx">visit</span><span class="p">(</span><span class="nx">tree</span><span class="p">,</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="k">if</span> <span class="p">(</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        <span class="nx">node</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;containerDirective&#39;</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">        <span class="p">[</span><span class="s1">&#39;tip&#39;</span><span class="p">,</span> <span class="s1">&#39;warning&#39;</span><span class="p">,</span> <span class="s1">&#39;danger&#39;</span><span class="p">,</span> <span class="s1">&#39;note&#39;</span><span class="p">,</span> <span class="s1">&#39;info&#39;</span><span class="p">,</span> <span class="s1">&#39;caution&#39;</span><span class="p">].</span><span class="nx">includes</span><span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="kr">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">data</span> <span class="o">||</span> <span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">data</span> <span class="o">=</span> <span class="p">{});</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="kr">const</span> <span class="nx">type</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">name</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="kr">const</span> <span class="nx">titleText</span> <span class="o">=</span> <span class="nx">type</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="mi">0</span><span class="p">).</span><span class="nx">toUpperCase</span><span class="p">()</span> <span class="o">+</span> <span class="nx">type</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="c1">// Main element: &lt;div class=&#34;admonition admonition-tip&#34;&gt;
</span></span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="nx">data</span><span class="p">.</span><span class="nx">hName</span> <span class="o">=</span> <span class="s1">&#39;div&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="nx">data</span><span class="p">.</span><span class="nx">hProperties</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">          <span class="nx">className</span><span class="o">:</span> <span class="p">[</span><span class="sb">`admonition`</span><span class="p">,</span> <span class="sb">`admonition-</span><span class="si">${</span><span class="nx">type</span><span class="si">}</span><span class="sb">`</span><span class="p">],</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">        <span class="c1">// Check if the first child is a paragraph (often contains the title)
</span></span></span><span class="line"><span class="ln">22</span><span class="cl">        <span class="kr">const</span> <span class="nx">firstChild</span> <span class="o">=</span> <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">        <span class="kd">let</span> <span class="nx">titleContent</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">
</span></span><span class="line"><span class="ln">25</span><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">firstChild</span><span class="o">?</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;paragraph&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">          <span class="kr">const</span> <span class="nx">textContent</span> <span class="o">=</span> <span class="nx">firstChild</span><span class="p">.</span><span class="nx">children</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">            <span class="p">.</span><span class="nx">filter</span><span class="p">((</span><span class="nx">child</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">child</span><span class="p">.</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">&#39;text&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">            <span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">child</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">child</span><span class="p">.</span><span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">            <span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">            <span class="p">.</span><span class="nx">trim</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">
</span></span><span class="line"><span class="ln">32</span><span class="cl">          <span class="k">if</span> <span class="p">(</span><span class="nx">textContent</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">textContent</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">            <span class="nx">titleContent</span> <span class="o">=</span> <span class="nx">firstChild</span><span class="p">.</span><span class="nx">children</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">            <span class="c1">// Remove the first paragraph, as it is now the title
</span></span></span><span class="line"><span class="ln">35</span><span class="cl">            <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">.</span><span class="nx">shift</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">
</span></span><span class="line"><span class="ln">39</span><span class="cl">        <span class="c1">// If no title from content → default title
</span></span></span><span class="line"><span class="ln">40</span><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">titleContent</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">          <span class="nx">titleContent</span> <span class="o">=</span> <span class="p">[{</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">titleText</span> <span class="p">}];</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl">
</span></span><span class="line"><span class="ln">44</span><span class="cl">        <span class="c1">// Create title element: &lt;p class=&#34;admonition-title&#34;&gt;TIP&lt;/p&gt;
</span></span></span><span class="line"><span class="ln">45</span><span class="cl">        <span class="kr">const</span> <span class="nx">titleNode</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">          <span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;paragraph&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">          <span class="nx">data</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl">            <span class="nx">hName</span><span class="o">:</span> <span class="s1">&#39;p&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">            <span class="nx">hProperties</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl">              <span class="nx">className</span><span class="o">:</span> <span class="s1">&#39;admonition-title&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl">          <span class="p">},</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">          <span class="nx">children</span><span class="o">:</span> <span class="nx">titleContent</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">54</span><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl">
</span></span><span class="line"><span class="ln">56</span><span class="cl">        <span class="c1">// Insert title at the front
</span></span></span><span class="line"><span class="ln">57</span><span class="cl">        <span class="nx">node</span><span class="p">.</span><span class="nx">children</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">titleNode</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="ln">60</span><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><hr>
<h2 id="step-3-update-astroconfigmjs">Step 3: Update <code>astro.config.mjs</code></h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1">// astro.config.mjs
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">defineConfig</span> <span class="p">}</span> <span class="nx">from</span> <span class="s1">&#39;astro/config&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="kr">import</span> <span class="nx">remarkDirective</span> <span class="nx">from</span> <span class="s1">&#39;remark-directive&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="kr">import</span> <span class="nx">remarkAdmonitionCompatible</span> <span class="nx">from</span> <span class="s1">&#39;./remark-admonition.js&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="nx">defineConfig</span><span class="p">({</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="nx">markdown</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="nx">remarkPlugins</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">      <span class="nx">remarkDirective</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="nx">remarkAdmonitionCompatible</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="p">});</span></span></span></code></pre></div><hr>
<h2 id="step-4-add-global-styles">Step 4: Add Global Styles</h2>
<p>Either add the styles to your <code>global.css</code> file
or create <code>src/styles/admonitions.css</code> and import it into your layout.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c">/* src/styles/admonitions.css */</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mf">1.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mf">0.75</span><span class="kt">rem</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">border-left</span><span class="p">:</span> <span class="mi">4</span><span class="kt">px</span> <span class="kc">solid</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mf">0.375</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-50</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="k">font-size</span><span class="p">:</span> <span class="mf">0.9375</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="k">line-height</span><span class="p">:</span> <span class="mf">1.6</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="o">&gt;</span> <span class="p">:</span><span class="nd">first-child</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">  <span class="k">margin-top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="o">&gt;</span> <span class="p">:</span><span class="nd">last-child</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="k">margin-bottom</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-700</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">
</span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span><span class="p">:</span><span class="nd">first-of-type</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">  <span class="k">margin-top</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">
</span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="p">.</span><span class="nc">admonition</span> <span class="nt">p</span><span class="p">:</span><span class="nd">last-of-type</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">  <span class="k">margin-bottom</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="c">/* Title */</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="p">.</span><span class="nc">admonition-title</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mf">0.5</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="k">font-weight</span><span class="p">:</span> <span class="mi">600</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">  <span class="k">font-size</span><span class="p">:</span> <span class="mf">0.8125</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">  <span class="k">text-transform</span><span class="p">:</span> <span class="kc">uppercase</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl">  <span class="k">letter-spacing</span><span class="p">:</span> <span class="mf">0.05</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="n">stone</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">
</span></span><span class="line"><span class="ln">43</span><span class="cl"><span class="c">/* Tip – Green */</span>
</span></span><span class="line"><span class="ln">44</span><span class="cl"><span class="p">.</span><span class="nc">admonition-tip</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">45</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">green</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">
</span></span><span class="line"><span class="ln">50</span><span class="cl"><span class="c">/* Warning – Yellow */</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl"><span class="p">.</span><span class="nc">admonition-warning</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">54</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">yellow</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">56</span><span class="cl">
</span></span><span class="line"><span class="ln">57</span><span class="cl"><span class="c">/* Danger – Red */</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl"><span class="p">.</span><span class="nc">admonition-danger</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">60</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">red</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">62</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">63</span><span class="cl">
</span></span><span class="line"><span class="ln">64</span><span class="cl"><span class="c">/* Note – Blue */</span>
</span></span><span class="line"><span class="ln">65</span><span class="cl"><span class="p">.</span><span class="nc">admonition-note</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">66</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">67</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">68</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">blue</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">69</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">70</span><span class="cl">
</span></span><span class="line"><span class="ln">71</span><span class="cl"><span class="c">/* Info – Cyan */</span>
</span></span><span class="line"><span class="ln">72</span><span class="cl"><span class="p">.</span><span class="nc">admonition-info</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">73</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">74</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">75</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">cyan</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">76</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">77</span><span class="cl">
</span></span><span class="line"><span class="ln">78</span><span class="cl"><span class="c">/* Caution – Orange */</span>
</span></span><span class="line"><span class="ln">79</span><span class="cl"><span class="p">.</span><span class="nc">admonition-caution</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">80</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-100</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">81</span><span class="cl">  <span class="k">border-color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-300</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">82</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="kc">color</span><span class="o">-</span><span class="kc">orange</span><span class="mi">-800</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">83</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><blockquote>
<p><strong>Import in your layout:</strong></p>
</blockquote>





<pre tabindex="0"><code class="language-astro" data-lang="astro">---
// src/layouts/BlogPost.astro
import &#39;../styles/admonitions.css&#39;;
---</code></pre><hr>
<h2 id="step-5-define-color-variables-optional-but-recommended">Step 5: Define Color Variables (Optional but Recommended)</h2>
<p>If you are not using Tailwind.css as I am, add these color variables to your global CSS or <code>:root</code>:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">:</span><span class="nd">root</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="c">/* Stone */</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="nv">--color-stone-50</span><span class="p">:</span> <span class="mh">#fafaf9</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="nv">--color-stone-700</span><span class="p">:</span> <span class="mh">#44403c</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="nv">--color-stone-800</span><span class="p">:</span> <span class="mh">#292524</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="c">/* Green */</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="nv">--color-green-100</span><span class="p">:</span> <span class="mh">#f0fdf4</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="nv">--color-green-300</span><span class="p">:</span> <span class="mh">#86efac</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="nv">--color-green-800</span><span class="p">:</span> <span class="mh">#166534</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="c">/* Yellow */</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">  <span class="nv">--color-yellow-100</span><span class="p">:</span> <span class="mh">#fefce8</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">  <span class="nv">--color-yellow-300</span><span class="p">:</span> <span class="mh">#fde047</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="nv">--color-yellow-800</span><span class="p">:</span> <span class="mh">#9a3412</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="c">/* Red */</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="nv">--color-red-100</span><span class="p">:</span> <span class="mh">#fef2f2</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">  <span class="nv">--color-red-300</span><span class="p">:</span> <span class="mh">#fca5a5</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">  <span class="nv">--color-red-800</span><span class="p">:</span> <span class="mh">#991b1b</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="c">/* Blue */</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">  <span class="nv">--color-blue-100</span><span class="p">:</span> <span class="mh">#eff6ff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">  <span class="nv">--color-blue-300</span><span class="p">:</span> <span class="mh">#93c5fd</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">  <span class="nv">--color-blue-800</span><span class="p">:</span> <span class="mh">#1e40af</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">
</span></span><span class="line"><span class="ln">27</span><span class="cl">  <span class="c">/* Cyan */</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">  <span class="nv">--color-cyan-100</span><span class="p">:</span> <span class="mh">#ecfeff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">  <span class="nv">--color-cyan-300</span><span class="p">:</span> <span class="mh">#67e8f9</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">  <span class="nv">--color-cyan-800</span><span class="p">:</span> <span class="mh">#0e7490</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">
</span></span><span class="line"><span class="ln">32</span><span class="cl">  <span class="c">/* Orange */</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">  <span class="nv">--color-orange-100</span><span class="p">:</span> <span class="mh">#fff7ed</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">  <span class="nv">--color-orange-300</span><span class="p">:</span> <span class="mh">#fdba74</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">  <span class="nv">--color-orange-800</span><span class="p">:</span> <span class="mh">#9c4221</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><hr>
<h2 id="example-usage-in-markdown">Example Usage in Markdown</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="ln"> 1</span><span class="cl">:::tip[Pro Tip]
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">Use <span class="sb">`Cmd + K`</span> to open the command palette.
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">:::
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">:::warning
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">Never commit your <span class="sb">`.env`</span> file.
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">:::
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">:::danger
</span></span><span class="line"><span class="ln">10</span><span class="cl">This action <span class="gs">**cannot be undone**</span>.
</span></span><span class="line"><span class="ln">11</span><span class="cl">:::
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl">:::note
</span></span><span class="line"><span class="ln">14</span><span class="cl">Astro compiles to static HTML by default.
</span></span><span class="line"><span class="ln">15</span><span class="cl">:::
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl">:::info[Did You Know?]
</span></span><span class="line"><span class="ln">18</span><span class="cl">You can use <span class="sb">`.astro`</span> files inside Markdown with MDX.
</span></span><span class="line"><span class="ln">19</span><span class="cl">:::
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">:::caution
</span></span><span class="line"><span class="ln">22</span><span class="cl">This feature is experimental — test thoroughly.
</span></span><span class="line"><span class="ln">23</span><span class="cl">:::</span></span></code></pre></div><hr>
<h3 id="result">Result</h3>
<p>:::tip[Pro Tip]
Use <code>Cmd + K</code> to open the command palette.
:::</p>
<p>:::warning
Never commit your <code>.env</code> file.
:::</p>
<p>:::danger
This action <strong>cannot be undone</strong>.
:::</p>
<p>:::note
Astro compiles to static HTML by default.
:::</p>
<p>:::info[Did You Know?]
You can use <code>.astro</code> files inside Markdown with MDX.
:::</p>
<p>:::caution
This feature is experimental — test thoroughly.
:::</p>
<hr>
<h2 id="done">Done</h2>
<p>You now have:</p>
<ul>
<li><strong>6 flexible admonition types</strong></li>
<li><strong>Custom titles</strong> with <code>[Title]</code> syntax</li>
<li><strong>Clean, stone-themed design</strong></li>
<li><strong>Full Astro + ESM compatibility</strong></li>
<li><strong>Zero runtime overhead</strong></li>
</ul>
<blockquote>
<p><strong>Pro tip</strong>: Want <code>success</code> or <code>example</code> later? Just add the name to the array in the plugin and a CSS rule — done.</p>
</blockquote>
<p>Clean. Simple. Powerful.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Ein Twitter-Klon mit Astro, Drizzle und BetterAuth</title>
      <link>https://cbrueggenolte.de/ein-twitter-klon-mit-astro-drizzle-und-betterauth/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/ein-twitter-klon-mit-astro-drizzle-und-betterauth/</guid>
      <description>&lt;p&gt;Heute habe ich das vorletzte Kapitel vom &lt;a href=&#34;https://bootcamp.dev&#34;&gt;Bootcamp&lt;/a&gt; abgeschlossen&#xA;und noch ein bisschen gelernt.&#xA;Ich hänge gefühlt etwa eine Woche hinterher,&#xA;ein Kapitel und ein Projekt stehen noch aus.&#xA;Jetzt kommt das lange Wochenende, und ich hoffe,&#xA;dass ich damit etwas aufholen kann.&lt;/p&gt;&#xA;&lt;p&gt;Als Projekt möchte ich gerne etwas mit &lt;a href=&#34;https://astro.build&#34;&gt;Astro&lt;/a&gt;, Server-Side Rendering (SSR), &lt;a href=&#34;https://orm.drizzle.team&#34;&gt;Drizzle&lt;/a&gt; als ORM und &lt;a href=&#34;https://betterauth.com&#34;&gt;BetterAuth&lt;/a&gt; umsetzen.&#xA;Da gefühlt alle immer nur irgendwelche Task-Management-Apps bauen,&#xA;will ich mal was anderes probieren.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Heute habe ich das vorletzte Kapitel vom <a href="https://bootcamp.dev">Bootcamp</a> abgeschlossen
und noch ein bisschen gelernt.
Ich hänge gefühlt etwa eine Woche hinterher,
ein Kapitel und ein Projekt stehen noch aus.
Jetzt kommt das lange Wochenende, und ich hoffe,
dass ich damit etwas aufholen kann.</p>
<p>Als Projekt möchte ich gerne etwas mit <a href="https://astro.build">Astro</a>, Server-Side Rendering (SSR), <a href="https://orm.drizzle.team">Drizzle</a> als ORM und <a href="https://betterauth.com">BetterAuth</a> umsetzen.
Da gefühlt alle immer nur irgendwelche Task-Management-Apps bauen,
will ich mal was anderes probieren.</p>
<p>Meine Idee: ein kleiner &ldquo;Twitter&rdquo;-Klon.
Nichts weltbewegend Neues, klar – aber ich glaube,
das kann trotzdem spannend werden.
Außerdem kann ich mich wegen des Zeitdrucks gut am <a href="https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world">Mega-Flask-Tutorial</a> orientieren.
Das spart Zeit bei Planung und Design.</p>
<p><a href="/ein-twitter-klon-mit-astro-drizzle-und-betterauth/screenshot-blinko-login-screen_hu_9f6fb160a1cf87b.webp"><img class="content-image" src="/ein-twitter-klon-mit-astro-drizzle-und-betterauth/screenshot-blinko-login-screen_hu_38ee63a5bbf995bf.webp" alt="Screenshot Blinko Login Screen" title="Screenshot Blinko Login Screen" loading="lazy" width="1440" height="775" /></a></p>
<p>Eigentlich wollte ich mich heute schon an das Projekt setzen,</p>
<p>aber ich wollte unbedingt noch <a href="https://blinko.space">Blinko</a> ausprobieren. Das klang einfach zu spannend, um es links liegen zu lassen:</p>
<blockquote>
<p><em>Blinko is the next generation of open-source AI-powered card notes designed to help you quickly capture and organize inspiration so that ideas never run out.</em></p>
</blockquote>
<p>Also habe ich mir auf dem NAS in Portainer fix einen neuen Stack eingerichtet
und nach ein bisschen Rumprobieren hat dann auch endlich die Verbindung zu Ollama geklappt.
Jetzt werde ich mich in den nächsten Tagen einfach ein bisschen damit beschäftigen und schauen,
ob sich damit was Nützliches anstellen lässt. Mal sehen, was dabei rauskommt.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Mein Blog erfindet sich neu</title>
      <link>https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_d7e153d8035b2730.webp&#34;&gt;&lt;img class=&#34;content-image&#34; src=&#34;https://cbrueggenolte.de/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_c1f2e45eeefbb3db.webp&#34; alt=&#34;A new blog software comes to life- Astro Logo&#34; loading=&#34;lazy&#34; width=&#34;1440&#34; height=&#34;754&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ich habe einige Zeit damit verbracht, meine Blog-Software komplett zu überarbeiten.&#xA;Anstelle von Python-Flask und Hugo verwende ich jetzt &lt;a href=&#34;https://astro.build&#34;&gt;Astro&lt;/a&gt;-&#xA;und ich könnte nicht zufriedener mit diesem Wechsel sein.&lt;/p&gt;&#xA;&lt;h2 id=&#34;warum-die-änderung&#34;&gt;Warum die Änderung?&lt;/h2&gt;&#xA;&lt;p&gt;Mein altes Python-Flask-Setup hat lange zuverlässig funktioniert, bis es irgendwann an seine Grenzen stieß.&#xA;Ich will mich für meinen zukünftigen Job mehr mit moderner Webentwicklung beschäftigen&#xA;und nehme deshalb gerade am &lt;a href=&#34;https://bootcamp.dev/&#34;&gt;Full-Stack Web Development Bootcamp&lt;/a&gt; teil.&#xA;Es schien der perfekte Moment zu sein, etwas Neues auszuprobieren&#xA;und vielleicht auch die unzähligen Stunden zu rechtfertigen,&#xA;die ich bisher in JavaScript-Tutorials investiert habe.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a href="/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_d7e153d8035b2730.webp"><img class="content-image" src="/mein-blog-erfindet-sich-neu/2025-03-31-cover_hu_c1f2e45eeefbb3db.webp" alt="A new blog software comes to life- Astro Logo" loading="lazy" width="1440" height="754" /></a></p>
<p>Ich habe einige Zeit damit verbracht, meine Blog-Software komplett zu überarbeiten.
Anstelle von Python-Flask und Hugo verwende ich jetzt <a href="https://astro.build">Astro</a>-
und ich könnte nicht zufriedener mit diesem Wechsel sein.</p>
<h2 id="warum-die-änderung">Warum die Änderung?</h2>
<p>Mein altes Python-Flask-Setup hat lange zuverlässig funktioniert, bis es irgendwann an seine Grenzen stieß.
Ich will mich für meinen zukünftigen Job mehr mit moderner Webentwicklung beschäftigen
und nehme deshalb gerade am <a href="https://bootcamp.dev/">Full-Stack Web Development Bootcamp</a> teil.
Es schien der perfekte Moment zu sein, etwas Neues auszuprobieren
und vielleicht auch die unzähligen Stunden zu rechtfertigen,
die ich bisher in JavaScript-Tutorials investiert habe.</p>
<h2 id="neu-anfangen-mit-astro">Neu anfangen mit Astro</h2>
<p>Also habe ich beschlossen, nochmal bei Null anzufangen,
auch weil es mir einfach Spaß macht,
Dinge einzustampfen und immer mal wieder etwas Neues auszuprobieren.
Ich startete mit der Minimalvorlage von Astro
und fügte dann Baustein für Baustein hinzu,
fast so, als würde ich etwas aus LEGO zusammenbauen.
Die Einrichtung war überraschend einfach.
Innerhalb weniger Minuten lief eine kleine Website.
Ich entdecke immer noch neue Möglichkeiten mit Astro
und bin jetzt schon begeistert, was damit alles machbar ist.</p>
<h2 id="warum-astro">Warum Astro?</h2>
<p>Was mich an Astro begeistert, ist die starke Performance
und die Art, wie alles modular aufgebaut ist.
Dank der sogenannten „partiellen Hydrierung“ lädt der Blog jetzt schneller als je zuvor.
Markdown-Unterstützung ist direkt mit an Bord, super praktisch fürs Schreiben,
und die vielen Community-Integrations haben mir echt viel Zeit gespart
(auch wenn ich diese Zeit sofort wieder damit verbracht habe, ewig über Farbschemata zu grübeln).</p>
<h2 id="lernkurve">Lernkurve</h2>
<p>Bis vor Kurzem endeten meine JavaScript-Kenntnisse bei <code>alert('Hello World')</code>.
Der Umstieg auf dieses neue System war also&hellip; sagen wir mal: ziemlich spannend.
Gerade das Thema asynchrone Programmierung hat mich am Anfang ganz schön ins Schwitzen gebracht.
Aber jeden Tag verstehe ich ein bisschen mehr und ja,
mein Suchverlauf besteht inzwischen zu 90 % aus Einträgen wie „JavaScript Promises einfach erklärt für Fünfjährige“.</p>
<h2 id="migration-im-gange">Migration im Gange</h2>
<p>Ich bin gerade dabei, meine alten Blogbeiträge
nach und nach ins neue System zu übertragen.
Einen festen Zeitplan habe ich nicht (ehrlich gesagt: das wird dauern, so lange es eben dauert),
aber ich nehme mir vor, den Großteil bis Sommer 2025 fertig zu haben,
oder eben, sobald die Motivation wieder vorbeischaut.</p>
<h2 id="kurz-gesagt">Kurz gesagt</h2>
<p>Der Wechsel zu Astro bedeutet für mich mehr als nur ein technisches Update.
Es fühlt sich auch wie ein kleiner Schritt nach vorne auf meinem beruflichen Weg an.
Vom selbstgebauten Python-Tool (ja, das lief viel zu lange) über Hugo
bis hin zu einem modernen JavaScript-Framework.
Das passt perfekt zu dem, wo ich als Fullstack-Entwickler hinmöchte.</p>
<p>Und ja, ich gebe zu: Ich neige dazu, Dinge komplizierter zu machen, als sie sein müssten.</p>
<p>Auch wenn das Ganze seine Zeit braucht,
macht der Umstieg die Pflege und Weiterentwicklung des Blogs einfach viel angenehmer.
Ich werde regelmäßig neue Inhalte hinzufügen und die Seite Stück für Stück verbessern.
Schaue also gerne wieder vorbei und wenn du Feedback hast, immer her damit!
(Konstruktive Kritik nehme ich mit offenen Armen an, harsches Urteil wird still registriert.)</p>
<p>Dieser Blog wächst mit meinen Erfahrungen mit,
dokumentiert neue Ideen und technische Entwicklungen.
In der schnelllebigen Welt der Webentwicklung
ist ein kompletter Neustart manchmal einfach die beste Lösung
oder zumindest die beste Ausrede für nächtelanges Coden.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
