<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Linkblog</title>
        <description></description>
        <link></link>
        <lastBuildDate>Thu, 14 May 2026 14:12:44 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <item>
            <title>CSS &amp;amp; vertical rhythm for text, images, and tables</title>
            <link>https://vincent.bernat.ch/en/blog/2026-css-vertical-rhythm</link>
            <description>&lt;blockquote&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;div&gt;
    &lt;article data-pagefind-body&gt;
      &lt;header&gt;
        
        &lt;h2 data-pagefind-ignore&gt;
          Vincent Bernat
          &lt;time datetime=&quot;2026-04-22T19:48:10Z&quot;&gt;
                      April 22, 2026
                  &lt;/time&gt;
        &lt;/h2&gt;
              &lt;/header&gt;
      &lt;div&gt;

&lt;p&gt;Vertical rhythm aligns lines to a consistent spacing cadence down the page. It
creates a predictable flow for the eye to follow. Thanks to the &lt;code&gt;rlh&lt;/code&gt; CSS unit,
vertical rhythm is now easier to implement for text.&lt;sup id=&quot;fnref-pawel&quot;&gt;&lt;a href=&quot;#sidenote-pawel&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; But illustrations
and tables can disrupt the layout. The amateur typographer in me wants to follow
Bringhurst’s wisdom:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Headings, subheads, block quotations, footnotes, illustrations, captions and
other intrusions into the text create syncopations and variations against the
base rhythm of regularly leaded lines. These variations can and should add
life to the page, but the main text should also return after each variation
precisely on beat and in phase.&lt;/p&gt;
&lt;p&gt;― &lt;em&gt;Robert Bringhurst&lt;/em&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Elements_of_Typographic_Style&quot; title=&quot;The Elements of Typographic Style on Wikipedia&quot;&gt;The Elements of Typographic Style&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;text&quot;&gt;Text&lt;a href=&quot;#text&quot; title=&quot;Permanent link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Three factors govern vertical rhythm: &lt;strong&gt;font size&lt;/strong&gt;, &lt;strong&gt;line height&lt;/strong&gt; and
&lt;strong&gt;margin or padding&lt;/strong&gt;. Let’s set our baseline with an 18-pixel font and a 1.5
line height:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;112.5&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.5&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h4&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;html&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
&lt;span&gt;p&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockquote&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
&lt;span&gt;dl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dd&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ol&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href=&quot;https://www.w3.org/TR/css-values-4/&quot; title=&quot;CSS Values and Units Module Level 4, W3C Working Draft&quot;&gt;CSS Values and Units Module Level 4&lt;/a&gt; defines the &lt;code&gt;rlh&lt;/code&gt; unit, equal to the
computed line height of the root element. All browsers support it &lt;a href=&quot;https://webstatus.dev/features/rlh&quot; title=&quot;rlh unit on Web Platform Status&quot;&gt;since
2023&lt;/a&gt;.&lt;sup id=&quot;fnref-postcss&quot;&gt;&lt;a href=&quot;#sidenote-postcss&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Use it to insert vertical spaces or to fix the line height
when altering font size:&lt;sup id=&quot;fnref-calc&quot;&gt;&lt;a href=&quot;#sidenote-calc&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;h4&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;margin-top&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;margin-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;h1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2.4&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;h2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.5&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;h3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.2&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;p&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockquote&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;margin-top&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;aside&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;font-size&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.875&lt;/span&gt;&lt;span&gt;rem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;We can check the result by overlaying a grid&lt;sup id=&quot;fnref-grid&quot;&gt;&lt;a href=&quot;#sidenote-grid&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; on the content:&lt;/p&gt;
&lt;figure&gt;&lt;p&gt;&lt;span&gt;&lt;img alt=&quot;Screenshot of my website with a grid as an overlay and each line of text
fitting on the grid&quot; src=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/text@1x.17b2e8512acd85.png&quot; srcset=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/text@1x.17b2e8512acd85.png 855w,https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/text@2x.93207136439be4.png 1360w&quot; sizes=&quot;auto, (max-width: 680px) 100vw, 680px&quot; width=&quot;680&quot; height=&quot;713&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;figcaption&gt;Using CSS &lt;code&gt;rlh&lt;/code&gt; unit to set vertical space works well for text. You can display the grid using &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;G&lt;/kbd&gt;.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;If a child element uses a font with taller intrinsic metrics, it may stretch
the line’s box beyond the configured line height.&lt;sup id=&quot;fnref-line-height&quot;&gt;&lt;a href=&quot;#sidenote-line-height&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; A workaround
is to reduce the line height to 1. The glyphs overflow but don’t push the line
taller.&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kbd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;line-height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id=&quot;responsive-images&quot;&gt;Responsive images&lt;a href=&quot;#responsive-images&quot; title=&quot;Permanent link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Responsive images are difficult to align on the grid because we don’t know their
height. &lt;a href=&quot;https://www.w3.org/TR/css-rhythm-1/&quot; title=&quot;CSS Rhythmic Sizing Module Level 1&quot;&gt;CSS Rhythmic Sizing Module Level 1&lt;/a&gt; introduces the &lt;code&gt;block-step&lt;/code&gt;
property to adjust the height of an element to a multiple of a step unit. But
most browsers don’t support it yet.&lt;/p&gt;
&lt;p&gt;With JavaScript, we can add padding around the image so it does not disturb
the vertical rhythm:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.lf-media-outer&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;el&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseFloat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getComputedStyle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;documentElement&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;lineHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ceil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;el&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;px 0`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;};&lt;/span&gt;

&lt;span&gt;targets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;el&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;adjust&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;el&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;el&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientHeight&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;figure&gt;&lt;p&gt;&lt;span&gt;&lt;img alt=&quot;Screenshot of my website with a grid as an overlay and an image not breaking
the vertical rhythm. Additional padding is visible before and after the image.
The height of the image with padding is
216.&quot; src=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/images@1x.08d84fe73e020f.png&quot; srcset=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/images@1x.08d84fe73e020f.png 855w,https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/images@2x.5e994bde851c27.png 1360w&quot; sizes=&quot;auto, (max-width: 680px) 100vw, 680px&quot; width=&quot;680&quot; height=&quot;713&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;figcaption&gt;The image is snapped to the grid thanks to the additional padding computed with JavaScript. 216 is divisible by 27, our line height in this example.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;As the image is responsive, its height can change. We need to wrap a resize
observer around the &lt;code&gt;adjust()&lt;/code&gt; function:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ro&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ResizeObserver&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;entry&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;entry&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;contentBoxSize&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;blockSize&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;adjust&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;entry&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;});&lt;/span&gt;
&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targets&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;ro&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;observe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id=&quot;tables&quot;&gt;Tables&lt;a href=&quot;#tables&quot; title=&quot;Permanent link&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Table cells could set &lt;code&gt;1rlh&lt;/code&gt; as their height but they would feel constricted.
Using &lt;code&gt;2rlh&lt;/code&gt; wastes too much space. Instead, we use &lt;a href=&quot;https://markboulton.co.uk/journal/incremental-leading/&quot; title=&quot;Incremental leading&quot;&gt;incremental leading&lt;/a&gt;: we
align one in every five lines.&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;border-spacing&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;border-collapse&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;separate&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.4&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;
&lt;span&gt;    &lt;/span&gt;&lt;span&gt;padding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;em&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;
&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;To align the elements after the table, we need to add some padding. We can
either reuse the JavaScript code from images or use a few lines of CSS that
count the regular rows and compute the missing vertical padding:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;nth-child&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5n&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;last-child&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;nth-child&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5n&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;last-child&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.8&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;nth-child&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5n&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;last-child&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.4&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;nth-child&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5n&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;last-child&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;table&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;nth-child&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5n&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;last-child&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;padding-bottom&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.6&lt;/span&gt;&lt;span&gt;rlh&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;A header cell has twice the padding of a regular cell. With two regular rows,
the total padding is 2×2×0.2+2×0.4=1.6. We need to add &lt;code&gt;0.4rlh&lt;/code&gt; to reach
&lt;code&gt;2rlh&lt;/code&gt; of extra vertical padding across the table.&lt;/p&gt;
&lt;figure&gt;&lt;p&gt;&lt;span&gt;&lt;img alt=&quot;Screenshot of my website with a grid as an overlay and a table following the
vertical rhythm. Additional padding is visible after the table. The height of
the table with padding is 405.&quot; src=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/tables@1x.56e678195427d0.png&quot; srcset=&quot;https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/tables@1x.56e678195427d0.png 855w,https://d2pzklc15kok91.cloudfront.net/images/vertical-rhythm/tables@2x.19b9c475806bf5.png 1360w&quot; sizes=&quot;auto, (max-width: 680px) 100vw, 680px&quot; width=&quot;680&quot; height=&quot;590&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;figcaption&gt;One line out of five is aligned to the grid. Additional padding is added after the table to not break the vertical rhythm. 405 is divisible by 27, our line height in this example.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;hr&gt;
&lt;p&gt;None of this is necessary. But once you start looking, you can’t unsee it. Until
browsers implement &lt;a href=&quot;https://www.w3.org/TR/css-rhythm-1/&quot; title=&quot;CSS Rhythmic Sizing Module Level 1&quot;&gt;CSS Rhythmic Sizing&lt;/a&gt;, a
bit of CSS wizardry and a touch of JavaScript is enough to pull it off. The main
text now returns after each intrusion “precisely on beat and in phase.” 🎼&lt;/p&gt;

      &lt;/div&gt;
    &lt;/article&gt;
  &lt;/div&gt;</description>
            <pubDate>Tue, 12 May 2026 06:29:38 +0000</pubDate>
            <guid>https://vincent.bernat.ch/en/blog/2026-css-vertical-rhythm</guid>
        </item>
        <item>
            <title>Task Paralysis &amp;amp; AI | g5t.de</title>
            <link>https://g5t.de/articles/20260510-task-paralysis-and-ai/index.html</link>
            <description>&lt;blockquote&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;div&gt;
        
        &lt;x-article-metalines published=&quot;2026-05-10&quot; updated=&quot;2026-05-10&quot; author=&quot;Daniel Gilbert&quot;&gt;&lt;/x-article-metalines&gt;
        &lt;h4&gt;About Task Paralysis&lt;/h4&gt;
        &lt;p&gt;Straight away: I am not diagnosed yet. So I&#039;m hesitant to say &quot;I have ADHD&quot;, because the truth is: I don&#039;t know it. There are signs: My siblings have been diagnosed as kids, and I&#039;m personally struggling with tasks that others deem to be &quot;easy&quot;. I have a tremendous need for novelty, and I can hardly picture myself doing the same job for the next 30 years.&lt;/p&gt;
        &lt;p&gt;I&#039;m not kidding: At the moment, I change roles every 2-3 years. This isn&#039;t really sustainable. Due to circumstances out of my control, I wasn&#039;t able to tackle that earlier.&lt;/p&gt;
        &lt;p&gt;Also, it doesn&#039;t really help if you want to build a career: I can navigate myself around a lot of technical fields, but I have no special knowledge.&lt;/p&gt;
        &lt;p&gt;Often, I struggle with the execution of a strategy that I successfully laid out. I will simply refuse to do the first step, because everything now feels overwhelming.&lt;/p&gt;
        &lt;p&gt;So... there are signs. Yes. But that might be another article.&lt;/p&gt;
        &lt;p&gt;I&#039;m aware that there is something called &lt;a href=&quot;https://en.wikipedia.org/wiki/Analysis_paralysis&quot;&gt;Analysis Paralysis&lt;/a&gt;. But that&#039;s different, at least for me and to my understanding. Let me put it this way: When &lt;em&gt;Analysis Paralysis&lt;/em&gt; kicks in, my brain will run in circles. When &lt;em&gt;Task Paralysis&lt;/em&gt; kicks in, my brain won&#039;t run at all. That sucks.&lt;/p&gt;
        &lt;h4&gt;About AI&lt;/h4&gt;
        &lt;p&gt;I won&#039;t go as far and say that I HATE AI per se. I just shelled out almost 100 € in tokens (&lt;em&gt;Max&lt;/em&gt;-plan for Claude) to code a game. And an iOS App. Because I need the latter and want the former. But I see all the negative effects that come with AI: People are loosing their jobs, sometimes loosing themselves. Art gets stolen, and suddenly, piracy isn&#039;t piracy any longer once large companies are doing the deed. That feels unfair, to say the least, and strange at best.
        &lt;/p&gt;&lt;p&gt;&lt;small&gt;(I 👴 grew up in the 2000s, so I have &lt;em&gt;some&lt;/em&gt; knowledge about piracy from back in the days, and how copyright holders went after people.)&lt;/small&gt;&lt;/p&gt;
        &lt;p&gt;I refrain to use AI for anything artistic since a couple of months. I either buy it, or try to do it myself &quot;the old way&quot;. I can fail, I can succeed - but I did it on my own. That&#039;s important. The effect AI has on artists feels just too destructive.&lt;/p&gt;
        &lt;h4&gt;What is it good for?&lt;/h4&gt;
        &lt;p&gt;For me, personally? It helps me overcome my task paralysis. As mentioned earlier: I have a plan. A strategy. An idea. I just need someone (or something), who has fun in churning through the implementation. I have the ideas. But boy is coding exhausting. As I learned quite late in my life, it is indeed not normal to fight with your motivation to create code every time you tackle a new user story, but succeed once you started.&lt;/p&gt;
        &lt;h4&gt;The Catch&lt;/h4&gt;
        &lt;p&gt;Claude Code in this case is the &lt;em&gt;something&lt;/em&gt; that just helps me getting started. And, lo&#039; and behold, I see myself struggling to not get addicted to that.&lt;/p&gt;
        &lt;p&gt;What do I mean by that? While overcoming the task paralysis on one hand, it quickly produces really good results. Last time I tried AI was in fall of 2025. It&#039;s an understatement to say that a lot has changed. There are worlds between what is possible today and what was possible back then.&lt;/p&gt;
        &lt;p&gt;That means that the dopamine really kicks fast, because the cycle between &quot;I have an idea&quot; and &quot;This is the result!&quot; is so tremendously short. But Claude has token limits. You can only spend a limited amount of tokens per 5 hours or 7 days. But you can buy additional API tokens. And now you set yourself in a position where you throw endless money at your source of dopamine, like a junkie running to their dealer, begging for the next shot. Or a poor player waiting for the golden ticket.&lt;/p&gt;
        &lt;p&gt;And, to be brutally honest: I know because I fell for it. After getting the &lt;em&gt;Pro&lt;/em&gt;-plan, I added another 20 € for API credits. After that, I realized I should go for &lt;em&gt;Max&lt;/em&gt; for this month, and also leverage some tricks like &lt;code&gt;/modus opusplan&lt;/code&gt; to reduce the amount of tokens that are used.&lt;/p&gt;
        &lt;p&gt;But the dopamine feels so freaking good.&lt;/p&gt;   
        &lt;p&gt;&lt;small&gt;Disclaimer: No AI was used to create this article.&lt;/small&gt;&lt;/p&gt;     
    &lt;/div&gt;</description>
            <pubDate>Sun, 10 May 2026 17:06:29 +0000</pubDate>
            <guid>https://g5t.de/articles/20260510-task-paralysis-and-ai/index.html</guid>
        </item>
        <item>
            <title>Die dänische Entscheidung, konsequent für Wohlbefinden zu sorgen</title>
            <link>https://blog.vanessagiese.de/2026/04/25/tourblog-4-luebeck-kopenhagen-die-daenische-entscheidung-konsequent-fuer-wohlbefinden-zu-sorgen/?pk_kwd=tourblog-4-luebeck-kopenhagen-die-daenische-entscheidung-konsequent-fuer-wohlbefinden-zu-sorgen</link>
            <description>&lt;blockquote&gt;&amp;quot;Morgen fahren wir nicht nur 800 Kilometer nach Hause. Wir reisen 30 Jahre in der Zeit zurück.&amp;quot;&lt;hr&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;Prolog |&amp;nbsp;&lt;/strong&gt;Am Abend vor unserer Abreise sagte ich zum Reiseleiter: „Morgen fahren wir nicht nur 800 Kilometer nach Hause. Wir reisen 30 Jahre in der Zeit zurück.“&lt;/p&gt;&lt;p&gt;Damit meinte ich nicht die Digitalisierung in Dänemark. Vielmehr meine ich damit die Art, wie Dänen und insbesondere die Kopenhagener Zusammenleben gestalten.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Das Design |&lt;/strong&gt; Wenn man Dänemarks und Kopenhagens Idee von Stadtplanung verstehen will, kommt man nicht an Jan Gehl vorbei. Foto aus dem &lt;em&gt;&lt;a href=&quot;https://dac.dk/en&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Danish Architecture Center&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl.jpeg&quot;&gt;&lt;img fetchpriority=&quot;high&quot; decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;1125&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl.jpeg&quot; alt=&quot;Im Vordergrund Notizbücher Jan Gehls mit Fotos und Notizen, im Hintergrund ein Foto von ihm und ein Fernseher, auf dem ein Film läuft.&quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl-260x195.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl-545x409.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl-768x576.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_JanGehl-1320x990.jpeg 1320w&quot; sizes=&quot;(max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Als der 79-Jährige seinerzeit Architektur studierte, zeigten ihm seine Professoren Fotos mit Gebäuden. Um die Fotos zu machen, sind sie um 5 Uhr aufgestanden, damit keine Menschen auf den Bildern zu sehen waren. Gehl sagt, er habe im Studium gelernt, Skulpturen zu erschaffen, keine Gebäude für Menschen. Dann heiratete er eine Psychologin, „a big crossing point in my life“. Seither, sagt er, studiere er Architektur neu, seit 40 Jahren.&lt;/p&gt;&lt;p&gt;Das erzählt er in seiner Standardvorlesung, die zum Beispiel als &lt;a href=&quot;https://www.youtube.com/watch?v=4ODzOv5OH6s&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Annual Lecture 2018 &lt;em&gt;Mistra Urban Future&lt;/em&gt;s&lt;/a&gt; zu sehen ist, Video ab Minute 8:30. Oder im Podcast &lt;em&gt;&lt;a href=&quot;https://thedeveloper.live/podcasts/podcasts/first-life-then-spaces-then-buildings-the-other-way-around-never-works-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;The Developer.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Gehl begann, Menschen zu beobachten. Er fuhr nach Italien und führte in den Altstädten akkurat Buch darüber, was in den Straßen, Gassen und auf den Plätzen geschah. Er schrieb auf, wie sich Menschen verhalten. Er bereiste andere Länder, andere Städte. Ihm wurde klar, dass die Architektur bislang einem Irrtum unterlegen war: Sie maß, wie viele Menschen wo gehen und fahren – um dann Straßen und Häuser zu gestalten. Dabei sei nicht wichtig, wo sie sich bewegen, sondern wo sie stehenbleiben, in Kontakt kommen, miteinander sprechen. So entstand Gehls &lt;a href=&quot;https://www.gehlpeople.com/company/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Verständnis von Stadtplanung&lt;/a&gt;.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A good city is like a good party — people stay longer than really necessary because they are enjoying themselves.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Er beschäftigte sich mit menschlichen Dimensionen, mit Augenhöhen, Sichtachsen, wie weit wir gucken und laufen können, bei welchen Geschwindigkeiten wir noch was wahrnehmen können, welche Strecken wir wählen, warum wir lieber am Rand sitzen als in der Mitte, bis zu welcher Entfernung wir Mimik lesen können und vieles mehr.&lt;/p&gt;&lt;p&gt;Gehl kam zu dem Schluss, das der Mensch alles tut, um Energie zu sparen. Wenn wir uns entscheiden, wie wir eine Strecke zurücklegen, dann ist es immer eine Effizienzentscheidung. Also, sagte er sich, müssen Städte so gestaltet sein, dass sie effizient und bequem sind – nicht für ein Auto, sondern für den Menschen, für den menschlichen Körper und den menschlichen Geist.&lt;/p&gt;&lt;p&gt;Das Ergebnis ist eine Stadtplanung, die Plätze und Räume priorisiert, auf denen Menschen zusammenkommen und sich sicher fühlen, eine Planung, die am menschlichen Körper ausgerichtet ist, die Aktivität fördert und Gesundheit erhält. Er entwickelte eine demokratische Stadtplanung, die wiederum Demokratie fördert.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It emphasizes that we shall walk more, we shall meet each other more. That’s good for health, that’s good for safety, that’s good for social inclusion, that’s good for democracy. Don’t sit in your private little house and look out of little little windows. Come out in our wonderful outdoor spaces and enjoy the spaces with your wonderful fellow citizens.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Filmempfehlung: &lt;em&gt;The Human Scale&lt;/em&gt;, verfügbar &lt;em&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OlrXeh1z1LU&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;auf youtube&lt;/a&gt;&lt;/em&gt;. Leseempfehlung: &lt;em&gt;&lt;a href=&quot;https://jovis.de/de/book/9783868598223&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Städte für Menschen&lt;/a&gt;&lt;/em&gt;. Außerdem &lt;a href=&quot;https://www.deutschlandfunk.de/die-stadt-planen-3-4-jan-gehl-der-menschenfreundliche-100.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;ein Interview beim Deutschlandfunk&lt;/a&gt;.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Wege und Plätze |&amp;nbsp;&lt;/strong&gt;Der Reiseleiter und ich sind in den vergangenen Jahren mehr als tausend Kilometer mit dem Fahrrad durch Dänemark gefahren. Diese Mobilitätsform hat zwar den Nachteil, dass einem immer irgendwas weh tut und man sich fortwährend mit Keksen befüllen muss. Sie hat jedoch einen entscheidenden Vorteil: Man erkennt hervorragend Muster und Zusammenhänge, Verbindungen zwischen Menschen und Geographie, zwischen Städten und Stadtteilen, sich wiederholende Strukturen und die Prioritäten, die sich durchs Land ziehen. Diese Prioritäten finden in Kopenhagen ihren kummulierten Höhepunkt: Allerorten geht es darum, Gemeinschaft zu stärken. Der öffentliche Raum gehört dem Menschen, nicht Autos, nicht der Wertschöpfung, sondern dem Wohlbefinden der Däninnen und Dänen. Der Mensch wird willkommen geheißen: mit Bänken und Blumen, Schatten spendenden Bäumen, Spielgeräten, Wasser, Schaukeln und Rutschen – auch für Erwachsene -, mit Ruheliegen, Picknickmöglichkeiten, öffentlichen Toiletten, breiten Wegen und Beleuchtung.&lt;/p&gt;&lt;p&gt;Sollten Sie einmal in Kopenhagen sein, organisieren Sie sich ein Fahrrad und fahren Sie durch die Stadt. Sie werden erkennen, wie alles auf magische Weise verbunden ist, wie Wege sich öffnen und fügen, wie es fließt und wie verschiedene Orte und unterschiedliche Stadtteile sich zu einem verwobenen Ganzen zusammenfügen, das ohne Motor, nur mit menschlicher Körperkraft erfahrbar ist. Es existieren viele Plätze, die im Einzelnen unscheinbar wirken, die in ihrer Fülle und in ihrer Verbindung jedoch ein Netz bilden, das nicht nur für den funktionalen Teil des Erwachsenendaseins, sondern fürs Zusammenleben aller Altersgruppen sicher und praktikabel ist.&lt;/p&gt;&lt;figure&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz.jpeg&quot;&gt;&lt;img decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;1125&quot; data-id=&quot;43385&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz.jpeg&quot; alt=&quot;Im Hintergrund Mehrfamilienhäuser, davor Beete mit einem Weg dazwischen und Bänke. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz-260x195.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz-545x409.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz-768x576.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Sitzplatz-1320x990.jpeg 1320w&quot; sizes=&quot;(max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz.jpeg&quot;&gt;&lt;img decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;1125&quot; data-id=&quot;43386&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz.jpeg&quot; alt=&quot;Spielplatz mit einem abgestürzten Flugzeug (aus Holz), auf dem Kinder klettern. Dahinter Mehrfamilienhäuser. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz-260x195.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz-545x409.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz-768x576.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Spielplatz-1320x990.jpeg 1320w&quot; sizes=&quot;(max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/figure&gt;&lt;p&gt;Kopenhagen hat weniger Spielplätze als deutsche Städte mit vergleichbarer Fläche. Es braucht auch nicht so viele, weil die Stadt selbst kinderfreundlich ist, weil sie Plätze hat, die zum Spielen, Rennen und Verstecken einladen. Eingezäunte Spielplätze helfen nicht, wenn die Stadt außerhalb des Zauns feindlich ist.&lt;/p&gt;&lt;p&gt;Dass Kinder Teil der Stadt sind, zeigt sich auch am &lt;em&gt;Israels Plads&lt;/em&gt;, einem großen Platz, der umringt ist von Schulen (Foto des Reiseleiters aus dem vergangenen Juni):&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01.jpeg&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;680&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01.jpeg&quot; alt=&quot;Panoramaaufnahme eines PLatzes, viel Beton, ein paar Bäume, viele Kinder, Bänke, Stufen, eine Art Skatepark. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01-260x118.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01-545x247.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01-768x348.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_IsraelsPlads_01-1320x598.jpeg 1320w&quot; sizes=&quot;auto, (max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Der Platz ist der Pausenplatz aller Schulen und gleichzeitig ein öffentlicher Ort. Kinder mischen sich mit Menschen, die einkaufen, mit Senioren, die sich ausruhen, mit Mittagspäuslern, die &lt;em&gt;Smørrebrød&lt;/em&gt; essen. Keine Haftungsfrage, keine Angst: ein Schulhof, nicht eingezäunt? Der Platz ist übrigens auch Teil der städtischen Klimaanpassung. Er ist ein Regenrückhaltebecken, das tiefer liegt als die Umgebung: Regnet es zu viel, läuft er voll.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Gebäude für alle |&amp;nbsp;&lt;/strong&gt;Wir radelten zu den &lt;a href=&quot;https://kulturogfritidn.kk.dk/huse/noerrebrohallen&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Nørrebrohallen&lt;/a&gt;. Ein Treffpunkt, eine Bibliothek, Sporthallen – alles öffentlich, alles steht für alle zur Verfügug.&lt;/p&gt;&lt;figure&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02.jpeg&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1392&quot; height=&quot;831&quot; data-id=&quot;43391&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02.jpeg&quot; alt=&quot;Nørrebrohallen, ein Informationsdesk, dahinter eine Straßenbahn, eine Tür führt in eine Turnhalle. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02.jpeg 1392w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02-260x155.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02-545x325.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02-768x458.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_02-1320x788.jpeg 1320w&quot; sizes=&quot;auto, (max-width: 1392px) 100vw, 1392px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01.jpeg&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;1125&quot; data-id=&quot;43392&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01.jpeg&quot; alt=&quot;Eine Halle, darin Bücher, gebaute Stufen. Darin viele Menschen, darunter viele Kinder. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01-260x195.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01-545x409.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01-768x576.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Noerrebrohallen_01-1320x990.jpeg 1320w&quot; sizes=&quot;auto, (max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/figure&gt;&lt;p&gt;Es gibt mehrere ähnliche Orte in Kopenhagen. Über die Seite &lt;a href=&quot;https://bookbyen.dk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;bookbyen.dk&lt;/a&gt; („Buch die Stadt“) kann jeder sich einen Platz, einen Raum buchen. Ein Badmintonkort kostet beispielsweise 98 Kronen pro Stunde, das sind etwa 13 Euro. Als wir dort waren, war massig los: Die Leute kamen aus den Sporthallen, gingen hinein, trafen sich im Café, saßen einfach nur auf Bänken, besuchten die öffentliche Toilette, den Bücherschrank oder waren alleine oder mit Kind in der Bücherei. In der Eingangshalle standen locker 25 Kinderwagen. Es gibt einen Kochclub und andere Interessenskreise, außerdem &lt;em&gt;Snakkeklubber&lt;/em&gt; für diverse Sprachen, in denen man seine Sprachkenntnisse vertiefen und sprechen üben kann – auch in Dänisch für alle Zugewanderten.&lt;/p&gt;&lt;p&gt;Wir hielten uns dort eineinhalb Stunden auf, lasen, aßen etwas. Ich nahm ein Buch aus dem Bücherschrank mit, &lt;a href=&quot;https://app.thestorygraph.com/book_reviews/a0df9746-6ae6-44f3-8938-f1327cbf8dbb?sort=oldest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;einen Krimi&lt;/a&gt;, mein erstes Buch, das ich auf Dänisch lese. Mit etwas Anstrengung verstehe ich gut; mein Vokabelschatz erweitert sich um Wörter wie „Tatort“, „Ertrinkungstod“, „Zeugenaussage“ – mein Dänischlehrer wird irritiert sein. Das Schöne an dem Ort: Wir fühlten uns willkommen, obwohl wir nur Gäste waren. Ein Ort der unkomplizierten Freundlichkeit.&lt;/p&gt;&lt;p&gt;Die Bibliothek in den Nørrebrohallen war ein warmer, wuseliger, kreativer Ort. &lt;em&gt;Den Sorte Diamant&lt;/em&gt;, &lt;a href=&quot;https://de.wikipedia.org/wiki/Den_Sorte_Diamant&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;Der Schwarze Diamant&lt;/a&gt;, die Dänische Nationalbibliothek, ist deutlich minimalistischer und vor allem dem Studium gewidmet.&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01.jpeg&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;1125&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01.jpeg&quot; alt=&quot;Die Einganngshalle, fotografiert aus dem höchsten Stockwerk: geschwungene Seitenwände, die wie Wellen anmuten, Blick aufs Wasser, Holz. &quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01-260x195.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01-545x409.jpeg 545w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01-768x576.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_SorteDiamant_01-1320x990.jpeg 1320w&quot; sizes=&quot;auto, (max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Eine tolle Architektur.&lt;/p&gt;&lt;p&gt;Im Museum für Architektur und Design gab es übrigens eine Rutsche vom obersten Stockwerk ins Erdgeschoss – ausdrücklich auch für Erwachsene (&lt;a href=&quot;https://dac.dk/en/exhibitions/dac-slide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title&gt;mehr dazu, mit Bild&lt;/a&gt;). Ein wilder Ritt. Ich sah mein Leben an mir vorbeiziehen.&lt;/p&gt;&lt;figure&gt;&lt;a href=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche.jpeg&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1500&quot; height=&quot;2000&quot; src=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche.jpeg&quot; alt=&quot;Vanessa sitzt im Eingang einer Röhrenrutsche und sieht sich zum Fotografen um. Überschrift &amp;quot;Fast Track&amp;quot;.&quot; srcset=&quot;https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche.jpeg 1500w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche-260x347.jpeg 260w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche-450x600.jpeg 450w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche-768x1024.jpeg 768w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche-1152x1536.jpeg 1152w, https://blog.vanessagiese.de/wp-content/uploads/2026/04/20260414_Museum_Architektur_Rutsche-1320x1760.jpeg 1320w&quot; sizes=&quot;auto, (max-width: 1500px) 100vw, 1500px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p&gt;Rutschen-Architekt Carsten Höller:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Why are slides not used in architecture to complement stairs, elevators and escalators? They are fast, safe and energy-savvy – and they produce a sensation in the user that has been described as a kind of voluptuous panic upon an otherwise lucid mind, somewhere between delight and madness.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Das kann ich so bestätigen.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Epilog |&lt;/strong&gt;&amp;nbsp;„Aber in Deutschland ist doch nicht alles schlecht! – „30 Jahren hintendran – so kannst du das doch nicht sagen!“&lt;/p&gt;&lt;p&gt;In unserem Land sind Städte und Orte so gestaltet, dass sie funktionieren; dass sie effizient und vorschriftsgemäß sind. Dummerweise verhält sich der Mensch nicht normgerecht, sondern folgt seiner Intuition. In Dänemark passt sich die Stadt dem Menschen an, schafft Zugehörigkeit. In Deutschland muss sich der Mensch an die Stadt anpassen, steht der Individualismus über dem Gemeinsinn. Dieser Unterschied wirkt so fundamental, dass wir in Deutschland, selbst wenn alle Kommunen plötzlich Geld im Überfluss hätten, nur mehr von dem bekämen, was wir bereits haben: normtreu gestaltete Orte.&lt;/p&gt;&lt;p&gt;Bis wir diesen gedanklichen Sprung gemacht haben, werden Jahrzehnte vergehen.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Die Etappen |&lt;/strong&gt;&amp;nbsp;Auf der nächsten Etappe erzähle ich noch vom Radfahren in Kopenhagen:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://blog.vanessagiese.de/2026/04/16/tourblog-1-die-fahrt-der-wind-die-einoede-schnee-und-ein-baellebad/&quot;&gt;#1 – Die Fahrt, der Wind, die Einöde, Schnee und ein Bällebad&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.vanessagiese.de/2026/04/19/tourblog-2-luebeck-kopenhagen-eine-erzaehlung-ueber-museen-und-friedhoefe/&quot;&gt;#2 – Eine Erzählung über Museen und Friedhöfe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.vanessagiese.de/2026/04/20/tourblog3-luebeck-kopenhagen-bruecken-tunnel-und-faehren-ein-beitrag-fuer-den-freundeskreis-ingenieurskunst/&quot; title=&quot;Tourblog#3 Lübeck – Kopenhagen: Brücken, Tunnel und Fähren – ein Beitrag für den Freundeskreis Ingenieurskunst&quot;&gt;#3 – Brücken, Tunnel und Fähren – ein Beitrag für den Freundeskreis Ingenieurskunst &lt;/a&gt;&lt;/li&gt;&lt;li&gt;#5 – Test eines Mythos: Radfahren in Kopenhagen&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description>
            <pubDate>Sat, 25 Apr 2026 14:46:44 +0000</pubDate>
            <guid>https://blog.vanessagiese.de/2026/04/25/tourblog-4-luebeck-kopenhagen-die-daenische-entscheidung-konsequent-fuer-wohlbefinden-zu-sorgen/?pk_kwd=tourblog-4-luebeck-kopenhagen-die-daenische-entscheidung-konsequent-fuer-wohlbefinden-zu-sorgen</guid>
        </item>
        <item>
            <title>I don&#039;t want your PRs anymore</title>
            <link>https://dpc.pw/posts/i-dont-want-your-prs-anymore/</link>
            <description>&lt;blockquote&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;div&gt;
      &lt;p&gt;I really appreciate that you&#039;re enjoying the software I&#039;m maintaining
and want to help. But we need to rethink this collaboration, because
I feel like we&#039;re increasingly wasting each other&#039;s time.&lt;/p&gt;
&lt;h3 id=&quot;why-i-don-t-want-to-merge-your-pr&quot;&gt;Why I don&#039;t want to merge your PR
&lt;/h3&gt;
&lt;p&gt;Since I don&#039;t really know you, I always have to assume that you might be trying
to sneak in something malicious along with your changes, which makes
reviewing and merging them riskier than implementing them myself.&lt;/p&gt;
&lt;p&gt;On top of that, there are a lot of personal and subjective aspects to code.
You might have certain preferences about formatting,
style, structure, dependencies, and approach, and I have mine.&lt;/p&gt;
&lt;p&gt;Then we often need to synchronize with respect to review, CI runs, merge conflicts, etc.&lt;/p&gt;
&lt;p&gt;And then there&#039;s this common back-and-forth round-trip between the
contributor and maintainer, which is just delaying things.&lt;/p&gt;
&lt;p&gt;Even before LLMs, writing the code was not the main bottleneck for me. But
writing code did take time, so a solid, working, easy-to-review PR was
often worth the small extra risk and inconvenience.&lt;/p&gt;
&lt;p&gt;With LLMs becoming quite good at implementing things, that tradeoff
is almost never true anymore.&lt;/p&gt;
&lt;p&gt;While I still need to review LLM-generated code, I generally don&#039;t have to worry about
it being malicious the way an unknown contributor&#039;s code could be. I&#039;ve already
codified a lot of my coding preferences and style guidelines for my LLM.
And I can rapidly iterate at my own pace without having to synchronize with
another human who might be in a different timezone.&lt;/p&gt;
&lt;p&gt;For these reasons, it&#039;s just easier if I make the code changes
myself (with the help of an LLM).&lt;/p&gt;
&lt;h3 id=&quot;the-nature-of-software-development-has-shifted&quot;&gt;The nature of software development has shifted
&lt;/h3&gt;
&lt;p&gt;It&#039;s increasingly apparent that &quot;the source code&quot; is less &quot;source&quot;
and more &quot;code&quot; — an intermediate formalized layer between
ideas in the developer&#039;s head and instructions for the computer to
execute. It&#039;s always been this way, but now, with the code itself
being easier to generate automatically, it&#039;s just more visible.&lt;/p&gt;
&lt;p&gt;There&#039;s a wide range of reactions to coding agents out there,
from banning them to proclaiming that coding is dead and vibecoding
is the future. Personally, as things are right now, I sit somewhere in the middle.
I come up with the design, then let my agent do a lot of the actual writing, and then I review
and refine the result.&lt;/p&gt;
&lt;p&gt;I could get huge amounts of code written, but I&#039;m bottlenecked on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understanding — reading the existing code to be able to reason about it;&lt;/li&gt;
&lt;li&gt;designing — coming up with the right changes and architecture;&lt;/li&gt;
&lt;li&gt;reviewing — ensuring that the code is doing what I wanted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The code in your PR doesn&#039;t help me much with any of these.
So let&#039;s skip it — don&#039;t attempt to implement code changes
with the goal of merging them into the codebase.&lt;/p&gt;
&lt;h3 id=&quot;how-can-you-help-instead&quot;&gt;How can you help instead
&lt;/h3&gt;
&lt;p&gt;As the &quot;writing the code&quot; part is becoming less valuable, all other ways
of helping maintainers become relatively higher value.&lt;/p&gt;
&lt;h4 id=&quot;give-feedback&quot;&gt;Give feedback
&lt;/h4&gt;
&lt;p&gt;As I&#039;m busy implementing things, I often don&#039;t have much time
to actually use them, or do good research on how to improve them.&lt;/p&gt;
&lt;p&gt;Users telling me what works well and what could be improved can be very helpful.&lt;/p&gt;
&lt;h4 id=&quot;discuss-ideas&quot;&gt;Discuss ideas
&lt;/h4&gt;
&lt;p&gt;I don&#039;t know everything, and discussing things with
other people with different experiences and perspectives
can help me understand what I should be building and how.&lt;/p&gt;
&lt;h4 id=&quot;report-and-investigate-bugs&quot;&gt;Report and investigate bugs
&lt;/h4&gt;
&lt;p&gt;A good bug report is 3/4 of the bug itself being fixed.&lt;/p&gt;
&lt;p&gt;If you spotted a problem, please describe it well, and even
do the debugging to figure out how to reproduce it and
where exactly the problem is.&lt;/p&gt;
&lt;p&gt;Then discuss potential solutions.&lt;/p&gt;
&lt;h4 id=&quot;prototype-changes&quot;&gt;Prototype changes
&lt;/h4&gt;
&lt;p&gt;Send me a reference PR and/or the prompt you used to produce it.&lt;/p&gt;
&lt;p&gt;Yes, I know I just said that I don&#039;t want your PRs. So let me
explain. With LLMs, it&#039;s easier for me to get my own LLM to make the change
and then review it myself.&lt;/p&gt;
&lt;p&gt;BUT — using code for illustrative purposes still makes sense.
A quick glance at code implementing something can be helpful,
even if I don&#039;t end up merging it.&lt;/p&gt;
&lt;p&gt;And if you share the actual &quot;source&quot; (prompt) to produce the &quot;code&quot;,
I can reuse and refine it, saving time.&lt;/p&gt;
&lt;h4 id=&quot;review-code-and-point-out-problems&quot;&gt;Review code and point out problems
&lt;/h4&gt;
&lt;p&gt;As I&#039;m bottlenecked on reviews, an extra pair of eyes helps.&lt;/p&gt;
&lt;h4 id=&quot;fork-the-code-and-report-back&quot;&gt;Fork the code and report back
&lt;/h4&gt;
&lt;p&gt;Don&#039;t be afraid of forking the code and changing it however you want.&lt;/p&gt;
&lt;p&gt;Having to come up with designs supporting multiple use cases,
forming consensus, debating best outcomes, looking for compromises, etc.
is very time-consuming.&lt;/p&gt;
&lt;p&gt;LLMs enable a great deal of software customizability. You can
make the changes you want by yourself faster and easier than ever,
and then rebase them (or not) on top of upstream
at your own pace.&lt;/p&gt;
&lt;p&gt;Just fork. Add support for your own use case, do things your way,
ask neither for permission nor forgiveness.&lt;/p&gt;
&lt;p&gt;As a maintainer, this saves me time too. And in the end, maybe both of us
can learn something from your version taking its own route.&lt;/p&gt;

  &lt;/div&gt;</description>
            <pubDate>Wed, 22 Apr 2026 04:38:30 +0000</pubDate>
            <guid>https://dpc.pw/posts/i-dont-want-your-prs-anymore/</guid>
        </item>
        <item>
            <title>Hister - Your Own Search Engine</title>
            <link>https://hister.org/</link>
            <description>&lt;blockquote&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;section&gt;&lt;h2&gt;Your Own &lt;br&gt; Search Engine&lt;/h2&gt; &lt;p&gt;Full-text search across your files, visited sites and beyond.&lt;/p&gt; &lt;nav&gt;&lt;a data-slot=&quot;button&quot; href=&quot;https://demo.hister.org/&quot;&gt;Try the demo &lt;/a&gt; &lt;a data-slot=&quot;button&quot; href=&quot;https://github.com/asciimoo/hister&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;View on github &lt;/a&gt;&lt;/nav&gt; &lt;ul&gt;&lt;li&gt; &lt;span&gt;Free Software&lt;/span&gt;&lt;/li&gt;  &lt;li&gt; &lt;span&gt;Self-Hosted&lt;/span&gt;&lt;/li&gt;  &lt;li&gt; &lt;span&gt;Privacy Respecting&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt; &lt;section id=&quot;features&quot;&gt;&lt;h2&gt;&lt;span&gt;&lt;/span&gt; &lt;span&gt;Features&lt;/span&gt;&lt;/h2&gt; &lt;div&gt;&lt;div&gt;&lt;h3&gt;AI Integration&lt;/h3&gt; &lt;p&gt;Optional semantic search and MCP connectivity&lt;/p&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt; &lt;h3&gt;Privacy-focused&lt;/h3&gt; &lt;p&gt;Keep your browsing history indexed locally. No remote servers, no tracking, no data leaving your machine.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;h3&gt;Full-text Indexing&lt;/h3&gt; &lt;p&gt;Search through the actual content of web pages and your local files.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt; &lt;h3&gt;Blazing Fast&lt;/h3&gt; &lt;p&gt;Instant results as you type. Full keyboard-driven workflow for maximum efficiency.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;h3&gt;Advanced Search&lt;/h3&gt; &lt;p&gt;Powerful query language for precise results.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;h3&gt;Flexible Management&lt;/h3&gt; &lt;p&gt;Configure blacklist and priority rules to control your indexed content.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt; &lt;h3&gt;Browser Extensions&lt;/h3&gt; &lt;p&gt;Available for &lt;a href=&quot;https://chromewebstore.google.com/detail/hister/cciilamhchpmbdnniabclekddabkifhb&quot;&gt;Chrome&lt;/a&gt; and &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/hister/&quot;&gt;Firefox&lt;/a&gt; to automatically index websites you visit.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;h3&gt;Offline Preview&lt;/h3&gt; &lt;p&gt;Readable offline previews of any result. Access your saved pages without internet.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;h3&gt;Browser Import&lt;/h3&gt; &lt;p&gt;Import existing Firefox or Chrome history with a single command.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt; &lt;div&gt;&lt;article&gt;&lt;h2&gt;Why Hister?&lt;/h2&gt; &lt;blockquote&gt;&lt;p&gt;Keep your data private and local while enjoying powerful search capabilities.&lt;/p&gt;&lt;/blockquote&gt;&lt;/article&gt; &lt;/div&gt; &lt;section&gt;&lt;figure&gt;&lt;figcaption&gt; &lt;h2&gt;Web UI&lt;/h2&gt;&lt;/figcaption&gt; &lt;p&gt;&lt;img src=&quot;/_app/immutable/assets/landing_screenshot.DzdqQ-c2.png&quot; alt=&quot;Hister Web UI Landing Page&quot;&gt;&lt;/p&gt;&lt;/figure&gt; &lt;figure&gt;&lt;p&gt;&lt;img src=&quot;/_app/immutable/assets/screenshot.BVE1ZmRq.png&quot; alt=&quot;Hister Web UI&quot;&gt;&lt;/p&gt;&lt;/figure&gt; &lt;figure&gt;&lt;figcaption&gt; &lt;h2&gt;Terminal UI&lt;/h2&gt;&lt;/figcaption&gt; &lt;p&gt;&lt;img src=&quot;/_app/immutable/assets/demo.C1tLgqbY.gif&quot; alt=&quot;Hister Terminal UI&quot;&gt;&lt;/p&gt;&lt;/figure&gt;&lt;/section&gt; &lt;section&gt;&lt;h2&gt;Preserve your data&lt;/h2&gt; &lt;p&gt;Free, open-source and completely private.&lt;/p&gt; &lt;nav&gt;&lt;a data-slot=&quot;button&quot; href=&quot;/docs/quickstart&quot;&gt;Get started &lt;/a&gt; &lt;a data-slot=&quot;button&quot; href=&quot;/docs&quot;&gt;Documentation&lt;/a&gt;&lt;/nav&gt;&lt;/section&gt;&lt;/div&gt;</description>
            <pubDate>Mon, 20 Apr 2026 12:47:21 +0000</pubDate>
            <guid>https://hister.org/</guid>
        </item>
    </channel>
</rss>
