<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>LfK! Documentation – Blog</title>
    <link>https://docs.lauf-fuer-kaya.de/en/blog/</link>
    <description>Recent content in Blog on LfK! Documentation</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Fri, 20 Feb 2026 00:00:00 +0000</lastBuildDate>
    
	  <atom:link href="https://docs.lauf-fuer-kaya.de/en/blog/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Backend performance improvements</title>
      <link>https://docs.lauf-fuer-kaya.de/en/blog/2026-02-20_performance/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://docs.lauf-fuer-kaya.de/en/blog/2026-02-20_performance/</guid>
      <description>
        
        
        &lt;p&gt;We have made some performance improvements to the backend that should make the platform faster and more responsive, especially during the event day when there are many scans and donations happening at the same time.
These changes were motivated by the fact that during the last events we sometimes experienced performance issues during the event day, especially when there were many scans happening at the same time.&lt;/p&gt;
&lt;p&gt;The main performance improvements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Switched out argon2 for hmac via sha256 for hashing/verifying the API keys of the scanner stations.&lt;/li&gt;
&lt;li&gt;Introduced a new caching layer powered by NATS JetStream for caching
&lt;ul&gt;
&lt;li&gt;Runner card to runner mappings&lt;/li&gt;
&lt;li&gt;Runner latest scan tracking (for cheating validation)&lt;/li&gt;
&lt;li&gt;Runner current distance tracking&lt;/li&gt;
&lt;li&gt;Scan station authentication results&lt;/li&gt;
&lt;li&gt;Scan station to track mappings&lt;/li&gt;
&lt;li&gt;Stats results&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Updated to new versions of TypeScript for improved compilation performance and better code quality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also made some improvements to the developer experience by switching the runtime to bun, this enables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster startup times&lt;/li&gt;
&lt;li&gt;Faster test execution&lt;/li&gt;
&lt;li&gt;Fewer dependencies thanks to bun&amp;rsquo;s built-in functionality and modern TypeScript features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall, we are very happy with the performance improvements and we are confident that they will make the platform faster and more responsive during the event day.&lt;/p&gt;
&lt;p&gt;These optimizations were introduced in the backend releases 1.6.0, 1.7.0, 1.7.1, 1.7.2, 1.8.0 and 1.8.1.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>News before LfK! 2025</title>
      <link>https://docs.lauf-fuer-kaya.de/en/blog/2025-05-19_newfeatures/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://docs.lauf-fuer-kaya.de/en/blog/2025-05-19_newfeatures/</guid>
      <description>
        
        
        &lt;p&gt;In less than a week, LfK! 2025 will take place, and we have implemented several new features and improvements on the platform.
This post provides an overview of the most important changes.&lt;/p&gt;
&lt;h2&gt;Frontend&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;frontend&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#frontend&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Recently, we added the &lt;a href=&#34;../2025-04-25_newfeatures#quick-runner--card-assignment&#34; &gt;Quick Card Assignment&lt;/a&gt; feature to the admin frontend, which makes it possible to assign cards quickly and easily.
After the positive experience with this new feature, we have added a few more tools to make the work of admins and helpers easier.&lt;/p&gt;
&lt;h3&gt;Card Replacement&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;card-replacement&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#card-replacement&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Especially on the morning of the event, cards often get lost or damaged.
To make the work of helpers easier, we have implemented a new feature that allows for quick card replacement.&lt;/p&gt;
&lt;p&gt;The runner can be searched by ID or name, and then the card can be replaced by scanning the new card using a barcode scanner or smartphone camera.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-05-19_replace_card.png&#34; alt=&#34;Replace Card&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h3&gt;Mobile Scan Client&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;mobile-scan-client&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#mobile-scan-client&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Traditionally, runner cards are scanned with handheld barcode scanners on the event day to record lap times.
This is still the best method to capture lap times, as handheld scanners have a high scan rate and work well even in poor lighting conditions.
However, it&amp;rsquo;s not always possible to use handheld scanners, e.g., when helpers don&amp;rsquo;t have handheld scanners or the scanners don&amp;rsquo;t work.&lt;/p&gt;
&lt;p&gt;Therefore, we have developed a new mobile scan client that allows for recording lap times with a smartphone.
The mobile scan client uses the smartphone&amp;rsquo;s camera to scan barcodes and record lap times.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-05-19_mobile_scanclient.png&#34; alt=&#34;Mobile Scan Client&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h3&gt;Quick Sponsorship Creation&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;quick-sponsorship-creation&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#quick-sponsorship-creation&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Traditionally, a few days before the event, participants&amp;rsquo; sponsorship contracts are collected and manually entered through the frontend.
Until now, this required working in two different views:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the sponsors overview to search for and/or create sponsors.&lt;/li&gt;
&lt;li&gt;In the sponsorship overview to create and edit sponsorships.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the new quick entry form, sponsors and sponsorship contracts can be created in a single view. To do this, only the following steps need to be completed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Search for a runner (by name or ID)&lt;/li&gt;
&lt;li&gt;Search for or create a new sponsor&lt;/li&gt;
&lt;li&gt;Enter the amount per kilometer&lt;/li&gt;
&lt;li&gt;Create the sponsorship&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-05-19_sponsoring_quick_add.png&#34; alt=&#34;New Quick Sponsorship Creation&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;h2&gt;Feedback&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;feedback&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#feedback&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This year at LfK! 2025, we wanted to post QR codes that participants could use to give us feedback. We tried various tools for this but weren&amp;rsquo;t really satisfied with any of them.&lt;/p&gt;
&lt;p&gt;What does a good programmer do in such a case? He builds his own tool! And that&amp;rsquo;s exactly what we did.
The new tool accepts feedback from participants, allowing them to give a star rating and a comment (+ optionally their own email address).
&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-05-19_feedback_form.png&#34; alt=&#34;Feedback Form&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;In a dedicated admin area, the submitted ratings and comments can be viewed and managed.
In addition to some statistics, there is also a rudimentary sentiment analysis that categorizes the submitted comments as positive, neutral, or negative.
&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-05-19_feedback_admin.png&#34; alt=&#34;Feedback Admin&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Anonymous Donations</title>
      <link>https://docs.lauf-fuer-kaya.de/en/blog/2025-04-28_anonymous-donations/</link>
      <pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://docs.lauf-fuer-kaya.de/en/blog/2025-04-28_anonymous-donations/</guid>
      <description>
        
        
        &lt;p&gt;During the last events we sometimes received requests from runners to be able to donate a fixed anonymously.
This means that the donation is not linked to a specific runner or donor but will still be shown in the donation statistics.
Most of the time this was achived by just handing over cash to the event organizer and the cash not getting counted in the donation statistics.&lt;/p&gt;
&lt;p&gt;This is now a thing of the past thanks to &lt;a href=&#34;https://git.odit.services/lfk/backend/releases/tag/1.4.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;backend@1.4.0&lt;/a&gt;, &lt;a href=&#34;https://www.npmjs.com/package/@odit/lfk-client-js/v/1.2.5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;lib@1.2.5&lt;/a&gt; and &lt;a href=&#34;https://git.odit.services/lfk/frontend/releases/tag/1.12.1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;frontend@1.12.1&lt;/a&gt;!
We have added a new feature to the platform that allows you to create anonymous donations.&lt;/p&gt;
&lt;p&gt;This feature is available in the admin panel and allows you to create anonymous donations in the &amp;ldquo;Donations&amp;rdquo; section.
Just add a new donation, select the Type &amp;ldquo;Anonymous Donation&amp;rdquo; and enter the donated amount.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-04-28_anonymous-donations_add.png&#34; alt=&#34;Add donation&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;
&lt;p&gt;The donation will then be shown in the donation statistics but will not be linked to a specific runner or donor.
It will also be shown in the donation overview in the admin panel and can be deleted like any other donation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.lauf-fuer-kaya.de/images/blog/2025-04-28_anonymous-donations_overview.png&#34; alt=&#34;Anonymous donation in the overview&#34; loading=&#34;lazy&#34; /&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>New Features and Improvements</title>
      <link>https://docs.lauf-fuer-kaya.de/en/blog/2025-04-25_newfeatures/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://docs.lauf-fuer-kaya.de/en/blog/2025-04-25_newfeatures/</guid>
      <description>
        
        
        &lt;p&gt;Over the last few weeks we have been working on several new features and improvements to the platform.
This post provides an overview of the most important changes.&lt;/p&gt;
&lt;h2&gt;Kiosk&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;kiosk&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#kiosk&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;LfK! 2023 - Kiosk 0.6&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;lfk-2023---kiosk-06&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#lfk-2023---kiosk-06&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Two years ago, we introduced the Kiosk feature to allow runners to sign up in person on the day of the event.
It was a pretty basic form that allowed runners to enter their first name and last name.
After hitting enter the runner&amp;rsquo;s ID was shown on the screen alongside a scannable barcode - but this was only used for the kisok attendees that assigned cards to the newly registered runners.
The kiosk fixed exactly one problem: Not needing to ask runners to spell their names out loud and having to type them in manually (and re-type them after the inevitable typo).&lt;/p&gt;
&lt;h3&gt;The new kiosk (1.2)&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;the-new-kiosk-12&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#the-new-kiosk-12&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The main pain point of the old kiosk was that it was still a hastle assign a card to a runner that registered via the kiosk.
You still needed a 1:1 assignment of kiosk pcs to helpers that assigned cards to the newly registered runners, limiting the throughput of the kiosk.&lt;/p&gt;
&lt;p&gt;The new kiosk is designed to be completely self-service and allow for higher throughput.
To achieve these goals we have introduced the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Signup with email&lt;/strong&gt;: Runners can optionally provide their email address when signing up via the kiosk. This allows them to use the runner self-service portal to view their registration details and lap times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-service QR-Code generation&lt;/strong&gt;: Instead of some none-descript barcode the kiosk now generates a QR-Code after signup. This QR-Code can be scanned by the runner to open the self-service portal and view their registration details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirmation printing&lt;/strong&gt;: If your kiosk hardware is connected to a receipt printer the kiosk automatically prints a confirmation slip with the runner&amp;rsquo;s registration details and QR-Code. The QR-Code can be scanned by the runner to open the self-service portal and view their registration details and lap times. It can also be used by the helpers to assign a card to the runner (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This video demonstrates the new kiosk features: TODO: Video&lt;/p&gt;
&lt;h2&gt;Frontend&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;frontend&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#frontend&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Fast runner ↔️ card assignment&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;fast-runner--card-assignment&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#fast-runner--card-assignment&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We implemented a new view in the admin panel that allows helpers and admins to quickly assign cards to runners that registered via the kiosk.
This view mainly consists of a web-based QR-Code/barcode scanner that can recognize the QR-Codes generated by the kiosk, confirmation slips and the self-service portal.
As soon as a valid code is scanned the scanner switches to card assignment mode and the helper just has to present a card&amp;rsquo;s barcode to the scanner.&lt;/p&gt;
&lt;p&gt;This short video demonstrates the new card assignment feature: TODO: Video&lt;/p&gt;
&lt;h2&gt;Documents&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;documents&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#documents&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Performance improvements&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;performance-improvements&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#performance-improvements&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The document server has been rewritten from scratch in go to improve performance and reliability.
This is just a technical aspect of the platform and does not change the user experience.&lt;/p&gt;
&lt;h3&gt;QR-Codes on the certificates&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;qr-codes-on-the-certificates&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#qr-codes-on-the-certificates&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The runner certificates now include two QR-Codes on the bottom of the second page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Self-service portal&lt;/strong&gt;: The first QR-Code links to the self-service portal where runners can view their registration details and lap times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payment&lt;/strong&gt;: The second QR-Code is an EPC payment code that can be scanned via any banking app and automatically fills in the payment recipient, purpose and amount for the donations assoicated with the runner.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;General&lt;span class=&#34;hx-absolute -hx-mt-20&#34; id=&#34;general&#34;&gt;&lt;/span&gt;
    &lt;a href=&#34;#general&#34; class=&#34;subheading-anchor&#34; aria-label=&#34;Permalink for this section&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sign up tracking&lt;/strong&gt;: The backend now tracks the signup source of each runner. This was mainly implemented to allow us to track the usage of the kiosk and self-service portal.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
  </channel>
</rss>
