<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Reimar Servas</title>
  <subtitle>Reimar Servas, senior design consultant</subtitle>
  <link rel="self" type="application/atom+xml" href="https://reimar-servas.de/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://reimar-servas.de"/>
  <id>https://reimar-servas.de/</id>
  <updated>2026-05-29T14:13:51+00:00</updated>
  <author>
    <name>Reimar Servas</name>
  </author>
  <entry>
    <title><![CDATA[A new website]]></title>
    <link rel="alternate" type="text/html" href="https://reimar-servas.de/writing/2026-05-13/a-new-website"/>
    <id>https://reimar-servas.de/writing/2026-05-13/a-new-website</id>
    <published>2026-05-13T00:00:00+00:00</published>
    <updated>2026-05-13T00:00:00+00:00</updated>
    <author>
      <name>Reimar Servas</name>
    </author>
    <summary type="html"><![CDATA[I finally launched my new website and I want to show you some of its details.]]></summary>
    <content type="html"><![CDATA[<p>It took me way too long, but now I’m happy to announce to my imaginary audience that I’ve finally launched my new website. Let me walk you through the details I’m disproportionately proud of. <hr> <h2>Animated Underlines</h2> <p>You may have encountered animated underlines on menus before. But have you ever seen them follow the cursor? I haven’t, so I had to build it myself. <p>If you’re using a desktop browser, you can try the effect yourself on the main menu. For everyone else, here is a video: <div><video src="https://reimar-servas.de/assets/videos/post-animated-underlines.mp4"></video></div> <h2>Draggable Cards</h2> <p>These cards remember their position (try reloading the page) and tilt to the left or right when you drag them. If you drop a card outside its bounding area, it will smoothly transition back. <p><em>This content is not available in the feed.</em> <h2>Pinhole Transition</h2> <p>This component can hold two or more slides to cycle through with a keyhole-transition. Click on the colored area below to watch the effect. <p><em>This content is not available in the feed.</em> <h2>Showing Random Slides</h2> <p>This component also cycles through a set of slides but lands on a random one, similar to rolling a dice. I added an easing effect that slows down the action towards the end. <p><em>This content is not available in the feed.</em> <h2>Auto-Scrolling Slides</h2> <p>This custom scroller has an option to automatically scroll back and forth. Like back in the 90ies when we had the glorious <code>&lt;marquee&gt;</code> tag. You can also scroll it using mouse or touch gestures or by clicking on the arrows (which appear on hover if you are using a desktop browser). <p>When you cannot scroll further in a given direction, the corresponding arrow will change into a circle. Clicking or tapping it will cause the scroll position indicator to shake. <p><em>This content is not available in the feed.</em> <h2>Custom Scroll Areas</h2> <p>For elements that deal with overflowing content — eg. a menu on a small screen — I created the component <code>&lt;ScrollClip&gt;</code>. It can show buttons on the overflowing edges. Together with shadows, they act as signifiers (<em>you can scroll in this direction</em>) but you can also click them to scroll a certain distance. <p><em>This content is not available in the feed.</em> <h2>All these examples work with keyboard navigation</h2> <p>Try navigating this page with your keyboard: press the <em>tab</em> key to jump between interactive elements and the <em>enter</em> key to trigger them. This requires a small amount of extra work — but I think it’s absolutely worth it. <h2>The tech behind this website</h2> <p>In case you are curious, this website runs on <a href="https://jigsaw.tighten.com"> Jigsaw </a>, a refreshingly minimal and robust static site generator. It’s written in PHP and built on top of <a href="https://laravel.com/docs/13.x/blade"> Laravel’s Blade templating engine </a> (which I am a big fan of). <p>It allows me to use custom component-tags with parameters for both purely markup partials, and fully interactive elements: <p><em>This content is not available in the feed.</em> <p>For websites like this I prefer native <a href="https://adactio.com/journal/20618"> Web Components </a> to <i>progressively enhance</i> the experience. Everything works fine with JavaScript disabled. <p>To enhance my own developer experience, I hacked together a semi-elegant solution for single-file Blade components, where <a href="https://vite.dev"> Vite </a> processes the CSS and JS while the Blade template engine processes the markup: <p><em>This content is not available in the feed.</em> <p>I have used <a href="https://www.11ty.dev/docs/languages/webc/"> 11ty + WebC </a>, <a href="https://astro.build"> Astro </a> and other tools before which offer similar solutions but I prefer the simplicity and robustness of Jigsaw. No need for explicit imports (Blade associates component-tags with corresponding files automatically), no need for constant updates and fixing breaking changes, no syntactic overhead — it’s just very much how I like it. <h2>Some other stuff I used</h2> <ul><li><a href="https://tailwindcss.com"><span>Tailwind</span></a> for Design Tokes and Utility Classes <li><a href="https://lucide.dev"><span>Lucide</span></a> and <a href="https://tabler.io/icons"><span>Tabler</span></a> icon sets <li><a href="https://lineto.com/typefaces/akkurat"><span>Lineto Akkurat</span></a> for gorgeous looking text </ul> <hr> <p>That’s it. I hope you’ll have fun exploring my website.]]></content>
  </entry>
</feed>
