<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vaadin on Sven Ruppert</title><link>https://sven-ruppert.info/categories/vaadin/</link><description>Recent content in Vaadin on Sven Ruppert</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>sven.ruppert@gmail.com (Sven Ruppert)</managingEditor><webMaster>sven.ruppert@gmail.com (Sven Ruppert)</webMaster><copyright>© 2026 Sven Ruppert</copyright><lastBuildDate>Wed, 18 Mar 2026 07:05:00 +0000</lastBuildDate><atom:link href="https://sven-ruppert.info/categories/vaadin/index.xml" rel="self" type="application/rss+xml"/><item><title>A Vaadin Starter Project with a Clear Focus</title><link>https://sven-ruppert.info/posts/a-vaadin-starter-project-with-a-clear-focus/</link><pubDate>Wed, 18 Mar 2026 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/a-vaadin-starter-project-with-a-clear-focus/</guid><description>&lt;p&gt;Many example projects overload the starting point by covering too many topics at once. Routing, data access, security, forms, theme customisations, and other integrations will then be presented in a single demo. This makes it more difficult for readers to recognise the project&amp;rsquo;s actual structure.&lt;/p&gt;</description></item><item><title>Practical i18n in Vaadin: Resource Bundles, Locale Handling and UI Language Switching</title><link>https://sven-ruppert.info/posts/practical-i18n-in-vaadin-resource-bundles-locale-handling-and-ui-language-switching/</link><pubDate>Wed, 11 Mar 2026 07:09:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/practical-i18n-in-vaadin-resource-bundles-locale-handling-and-ui-language-switching/</guid><description>&lt;p&gt;Modern web applications are rarely used only by users with the same language. Even internal tools often reach international teams or are used in different countries. A multilingual user interface is therefore not a luxury feature, but an important part of the user experience.&lt;/p&gt;</description></item><item><title>Separation of Concerns in Vaadin: Eliminating Inline Styles</title><link>https://sven-ruppert.info/posts/separation-of-concerns-in-vaadin-eliminating-inline-styles/</link><pubDate>Wed, 04 Mar 2026 13:05:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/separation-of-concerns-in-vaadin-eliminating-inline-styles/</guid><description>&lt;p&gt;Vaadin Flow enables the development of complete web applications exclusively in Java. Components, layouts, navigation, and even complex UI structures can be modelled on the server side without working directly with HTML or JavaScript. This approach is one of the main reasons why Vaadin is especially popular in Java-centric projects.&lt;/p&gt;</description></item><item><title>An unexpectedly hassle-free upgrade</title><link>https://sven-ruppert.info/posts/an-unexpectedly-hassle-free-upgrade/</link><pubDate>Mon, 16 Feb 2026 11:22:56 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/an-unexpectedly-hassle-free-upgrade/</guid><description>&lt;p&gt;The starting point for this article was not a strategic architecture workshop or a long-term planned migration path, but a comparatively unspectacular step: updating the version numbers in the existing project. As part of further developing my URL shortener project, a regular dependency update was due anyway. Vaadin 25 (was already available at that time, so it made sense to proceed.&lt;/p&gt;</description></item><item><title>The Importance of UI in Import Processes</title><link>https://sven-ruppert.info/posts/the-importance-of-ui-in-import-processes/</link><pubDate>Mon, 09 Feb 2026 15:15:33 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-importance-of-ui-in-import-processes/</guid><description>&lt;h2 class="relative group"&gt;Why an import needs a UI at all
 &lt;div id="why-an-import-needs-a-ui-at-all" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-an-import-needs-a-ui-at-all" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Import functions are often treated as purely technical details in applications. Data is read in, processed and then made available – ideally without further interaction. In practice, however, an import is rarely an invisible process. It marks a transition between existing system states, between old and new data, between trust and control. This is exactly where the need for a user interface arises.&lt;/p&gt;</description></item><item><title>JSON export in Vaadin Flow</title><link>https://sven-ruppert.info/posts/20224/</link><pubDate>Thu, 05 Feb 2026 16:50:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/20224/</guid><description>&lt;p&gt;Export functions are often seen as a purely technical side task: one button, one download, done. In a Vaadin-based application, however, it quickly becomes apparent that exporting is much more than writing data to a file. It is a direct extension of the UI state, an infrastructural contract between frontend and backend, and a decisive factor for maintainability and predictability.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Extracting Components - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-2/</link><pubDate>Mon, 22 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part, the focus was deliberately on the user interface&amp;rsquo;s structural realignment. The previously grown, increasingly monolithic OverviewView was analysed and specifically streamlined by outsourcing key functional areas to independent UI components. With the introduction of the BulkActionsBar and the SearchBar, clearly defined building blocks were created, each assuming a specific responsibility and freeing the view from operational details.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Extracting Components - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-1/</link><pubDate>Sun, 21 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-1/</guid><description>&lt;p&gt;Today marks a crucial step in the evolution of the URL shortener&amp;rsquo;s user interface. After the focus in the past few days was mainly on functional enhancements – from filter and search functions to bulk operations – this day is dedicated to a structural fine-tuning: the refactoring of central UI components. This refactoring not only serves to clean up the code but also creates a clear, modular basis for future extensions as well as a significantly improved developer experience.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - De-/Activate Mappings - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-2/</link><pubDate>Sat, 20 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far?
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part of this article, the new active/inactive model for shortlinks was introduced and anchored at the architectural level. Based on the technical rationale, it was shown that a pure expiration date is insufficient for modern use cases and that an explicit activity status is required.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - De-/Activate Mappings - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-1/</link><pubDate>Fri, 19 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-1/</guid><description>&lt;h2 class="relative group"&gt;Why an active/inactive model for shortlinks?
 &lt;div id="why-an-activeinactive-model-for-shortlinks" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-an-activeinactive-model-for-shortlinks" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;For many users – especially those who work in the field of software development – shortlinks are much more than simple URL shorteners. They act as flexible routing mechanisms for campaigns, feature controls, test scenarios, and internal tools. The requirements for transparency, controllability and clean lifecycle management are correspondingly high.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Basic Login Solution - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-2/</link><pubDate>Thu, 18 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far?
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part of &amp;ldquo;Basic Login Solution&amp;rdquo;, the foundation for a deliberately simple yet structurally clean admin login was laid. The starting point was the realisation that even a technically lean URL shortener requires a clear separation between public-facing functions and administrative operations. The goal was not complete user management, but rather a minimal access barrier that integrates seamlessly with the existing Java and Vaadin architectures.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Basic Login Solution - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-1/</link><pubDate>Wed, 17 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-1/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The administration interface of a URL shortener is a sensitive area where short links can be changed, removed, or assigned expiration dates. Although the system is often operated on an internal server or in a private environment, protecting this management interface remains a fundamental security concern. Accidental access by unauthorised users can not only lead to incorrect forwarding or data loss, but also undermine trust in the overall system.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Mass Grid Operations - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-2/</link><pubDate>Tue, 16 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far&amp;hellip;
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the previous part, the URL shortener overview was significantly expanded. The starting point was the realisation that the last UI was heavily optimised for single operations and thus quickly reached its limits as soon as larger volumes of shortlinks needed to be managed. To resolve this bottleneck, the grid was consistently switched to multiple selection, creating the technical basis for actual mass operations.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Mass Grid Operations - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-1/</link><pubDate>Mon, 15 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-1/</guid><description>&lt;p&gt;The next stage of the Advent calendar focuses on further development, which becomes immediately noticeable once more shortlinks are used. The previous interaction patterns in the Overview view were geared toward individual operations and yielded only limited efficiency gains when processing many objects simultaneously. Today, this paradigm is being deliberately broken up and replaced by an interplay of new UI concepts that, for the first time, enable true multi-operation, context-sensitive work, and a much more stringent user interface.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - From UI Interactions to a Deterministic Refresh Architecture</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-ui-interactions-to-a-deterministic-refresh-architecture/</link><pubDate>Sun, 14 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-ui-interactions-to-a-deterministic-refresh-architecture/</guid><description>&lt;p&gt;After the first part explained the conceptual basics and the new interactions among global search, search scopes, and advanced filters, the second part focuses on the technical mechanisms that enable these interactions. It is only the revised refresh architecture – above all the interaction of &lt;code&gt;safeRefresh()&lt;/code&gt; and &lt;code&gt;RefreshGuard&lt;/code&gt; – that ensures that the OverviewView remains calm, deterministic and predictable despite numerous potential triggers.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - From Simple Search to Expert Mode: Advanced Filters and Synchronised Scopes for Power Users</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-simple-search-to-expert-mode-advanced-filters-and-synchronised-scopes-for-power-users/</link><pubDate>Sat, 13 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-simple-search-to-expert-mode-advanced-filters-and-synchronised-scopes-for-power-users/</guid><description>&lt;p&gt;Since its inception, the URL shortener&amp;rsquo;s continuous development has focused on two core goals: a robust technical foundation without external frameworks and a modern, productive user interface that is both intuitive and efficient for power users. As part of the current development stage, an essential UI module has been revised – the OverviewView, i.e. the view in which users search, filter and manage all saved shortenings.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Introduction of multiple aliases - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-2/</link><pubDate>Fri, 12 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-2/</guid><description>&lt;p&gt;Today&amp;rsquo;s update introduces another practical development step for the URL shortener. After the last few days were dedicated to UI refinement and the better structuring of detailed dialogues and form logic, the focus is now on an aspect that plays a significant role in the everyday life of many users: the flexible management of multiple aliases per target URL.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Introduction of multiple aliases - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-1/</link><pubDate>Thu, 11 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-1/</guid><description>&lt;h2 class="relative group"&gt;Introduction: More convenience for users
 &lt;div id="introduction-more-convenience-for-users" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction-more-convenience-for-users" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;With today&amp;rsquo;s development milestone for the URL Shortener project, a crucial improvement has been achieved, significantly enhancing the user experience. Up to this point, working with short URLs was functional, but in many ways it was still linear: each destination URL was assigned exactly one alias. This meant users had to create a new short URL for each context or campaign, even when the destination was identical. While this approach was simple, it wasn&amp;rsquo;t sufficiently flexible to meet real-world application requirements.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - From Grid to Detail: Understanding the User Experience in the Short-URL Manager</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-grid-to-detail-understanding-the-user-experience-in-the-short-url-manager/</link><pubDate>Wed, 10 Dec 2025 10:32:12 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-grid-to-detail-understanding-the-user-experience-in-the-short-url-manager/</guid><description>&lt;h2 class="relative group"&gt;The current UI from the user&amp;rsquo;s point of view
 &lt;div id="the-current-ui-from-the-users-point-of-view" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-current-ui-from-the-users-point-of-view" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;On the first call, the user lands in the overview. The site is built on a Vaadin grid, whose header contains a search bar, paging controls, and a small settings button with a gear icon. The most essential flow begins with the table displaying immediately understandable columns: the shortcode as a clearly typographically separated monospace value with copy action, the original URL as a clickable link, a creation time in local format, and an expiration badge that visually communicates semantic states such as &amp;ldquo;Expired&amp;rdquo;, &amp;ldquo;Today&amp;rdquo; or &amp;ldquo;in n days&amp;rdquo; via theme colours. The whole thing is designed for quick viewing and efficient one-handed operation: a click on a data record opens the detailed dialogue if required; a right-click or the context menu offers direct quick actions; and the gear button can be used to show or hide visible columns live.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - ColumnVisibilityDialog - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-2/</link><pubDate>Tue, 09 Dec 2025 09:55:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-2/</guid><description>&lt;h2 class="relative group"&gt;Server-Side Extension: PreferencesHandler and REST Interfaces
 &lt;div id="server-side-extension-preferenceshandler-and-rest-interfaces" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#server-side-extension-preferenceshandler-and-rest-interfaces" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The server-side extension for dynamic column visibility follows the same design logic as the UI: simplicity, clear accountability, and a precise data flow. While the OverviewView and the ColumnVisibilityDialog form the interface for the interaction, several specialized REST handlers handle the processing and persistence of the user settings. Their job is to process incoming JSON requests, validate them, translate them into domain operations, and return or store the current state.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - ColumnVisibilityDialog - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-1/</link><pubDate>Mon, 08 Dec 2025 22:42:05 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-1/</guid><description>&lt;h2 class="relative group"&gt;From observer to designer: User control at a glance
 &lt;div id="from-observer-to-designer-user-control-at-a-glance" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#from-observer-to-designer-user-control-at-a-glance" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;With the fourth day of the Advent calendar, the perspective on the application changes fundamentally. While in the previous expansion stages users reacted primarily to prepared structures, an element of active design is now being added. The &amp;ldquo;Overview&amp;rdquo; has so far been a central mirror of the system state: It showed all saved short links, allowed them to be filtered and provided an in-depth insight into individual objects with the detailed dialog. But the structure and visibility of the columns were immutable up to this point. The user always saw the selection that the developer had defined as meaningful. With the introduction of dynamic column visibility, this state is removed.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Detail Dialog - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-2/</link><pubDate>Sun, 07 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-2/</guid><description>&lt;h2 class="relative group"&gt;Client contract from a UI perspective
 &lt;div id="client-contract-from-a-ui-perspective" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#client-contract-from-a-ui-perspective" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In this project, the user interface not only serves as a graphical layer on top of the backend, but is also &lt;strong&gt;part of the overall contract&lt;/strong&gt; between the user, the client, and the server. This part focuses on the data flow from the UI&amp;rsquo;s perspective: how inputs are translated into structured requests, how the client forwards them, and what feedback the user interface processes.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Detail Dialog - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-1/</link><pubDate>Sat, 06 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-1/</guid><description>&lt;h2 class="relative group"&gt;Classification and objectives from a UI perspective
 &lt;div id="classification-and-objectives-from-a-ui-perspective" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#classification-and-objectives-from-a-ui-perspective" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Today&amp;rsquo;s Advent Calendar Day focuses specifically on the interaction level prepared in the previous parts. While the basic structure of the user interface and the layout were defined at the beginning, and the interactive table view with sorting, filtering and dynamic actions was subsequently established, it is now a matter of making the transition from overview to detailed observation consistent. The user should no longer only see a tabular collection of data points, but should receive a view tailored to the respective object that enables contextual actions.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Persistence – Part 02</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-02/</link><pubDate>Fri, 05 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-02/</guid><description>&lt;p&gt;Today, we will finally integrate the StoreIndicator into the UI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#vaadin-integration-live-status-of-the-store" target="_blank" rel="noreferrer"&gt;Vaadin integration: live status of the store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#implementation-of-the-storeindicator" target="_blank" rel="noreferrer"&gt;Implementation of the StoreIndicator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#refactoring-inside-the-mappingcreator-as-a-central-logic" target="_blank" rel="noreferrer"&gt;Refactoring inside – The MappingCreator as a central logic.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#eclipsestore-the-persistent-foundation" target="_blank" rel="noreferrer"&gt;EclipseStore – The Persistent Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#additional-improvements-in-the-core" target="_blank" rel="noreferrer"&gt;Additional improvements in the core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#before-after-impact-on-the-developer-experience" target="_blank" rel="noreferrer"&gt;Before &amp;amp; After – Impact on the developer experience&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The source code for this version can be found on GitHub at&lt;/strong&gt;&lt;a href="https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-02" target="_blank" rel="noreferrer"&gt;https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-02&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Persistence – Part 01</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-01/</link><pubDate>Thu, 04 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-01/</guid><description>&lt;p&gt;**Visible change: When the UI shows the memory state&lt;/p&gt;
&lt;p&gt;With the end of the last day of the Advent calendar, our URL shortener was fully functional: the admin interface could filter, sort, and display data page by page – performant, cleanly typed, and fully implemented in Core Java. But behind this surface lurked an invisible problem: &lt;strong&gt;All data existed only in memory.&lt;/strong&gt; As soon as the server was restarted, the entire database was lost.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Filter &amp;amp; Search – Part 02</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-02/</link><pubDate>Wed, 03 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-02/</guid><description>&lt;p&gt;In the previous part, we looked at the implementation on the server side. This part is now about the illustration on the user page.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The source code for the initial state can be found on GitHub under &lt;a href="https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-00" target="_blank" rel="noreferrer"&gt;https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-00&lt;/a&gt; .&lt;/p&gt;</description></item><item><title>Introduction to the URL‑Shortener Advent Calendar 2025</title><link>https://sven-ruppert.info/posts/introduction-to-the-url%e2%80%91shortener-advent-calendar-2025/</link><pubDate>Mon, 01 Dec 2025 10:22:35 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/introduction-to-the-url%e2%80%91shortener-advent-calendar-2025/</guid><description>&lt;p&gt;December 2025 is all about a project that has grown steadily in recent months: &lt;strong&gt;the Java-based URL Shortener, an open-source project implemented entirely with Core Java, Jetty, and Vaadin Flow&lt;/strong&gt;. The Advent calendar accompanies users every day with a new feature, a technical deep dive, or an architectural improvement – from the basic data structure and REST handlers to UI components and security aspects.&lt;/p&gt;</description></item><item><title>How and why to use the classic Observer pattern in Vaadin Flow</title><link>https://sven-ruppert.info/posts/how-and-why-to-use-the-classic-observer-pattern-in-vaadin-flow/</link><pubDate>Mon, 01 Sep 2025 11:32:18 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/how-and-why-to-use-the-classic-observer-pattern-in-vaadin-flow/</guid><description>&lt;h2 class="relative group"&gt;1. Introduction and motivation
 &lt;div id="1-introduction-and-motivation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-introduction-and-motivation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The observer pattern is one of the basic design patterns of software development and is traditionally used to decouple state changes and process them. Its origins lie in the development of graphical user interfaces, where a shift in the data model required synchronising several views immediately, without a direct link between these views. This pattern quickly established itself as the standard solution to promote loosely coupled architectures.&lt;/p&gt;</description></item><item><title>What makes Vaadin components special?</title><link>https://sven-ruppert.info/posts/what-makes-vaadin-components-special/</link><pubDate>Tue, 19 Aug 2025 13:09:52 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-makes-vaadin-components-special/</guid><description>&lt;p&gt;From my experience, Vaadin has always stood out from other Java frameworks. Of course, it enables the creation of modern web UIs, but the real difference lies in its &lt;strong&gt;component architecture&lt;/strong&gt;. This is not conceived as a short-term aid, but is consistently designed for maintainability and flexibility. It creates the possibility of running applications stably for many years while still being able to extend them step by step.&lt;/p&gt;</description></item><item><title>Part III - WebUI with Vaadin Flow for the URL Shortener</title><link>https://sven-ruppert.info/posts/part-iii-webui-with-vaadin-flow-for-the-url-shortener/</link><pubDate>Fri, 15 Aug 2025 10:46:10 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/part-iii-webui-with-vaadin-flow-for-the-url-shortener/</guid><description>&lt;h3 class="relative group"&gt;1. Introduction and objectives
 &lt;div id="1-introduction-and-objectives" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-introduction-and-objectives" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The first two parts of this series established the theoretical and practical foundations of a URL shortener in pure Java. We discussed the semantic classification of short URLs, the architecture of a robust mapping system, and the implementation of a REST-based service based on the JDK HTTP server. These efforts resulted in a functional, modularly extensible backend that creates, manages, and efficiently resolves short links. However, a crucial component was missing-a visual interface for direct user interaction with the system. This interface is essential for tasks such as manual link creation, viewing existing mappings, and analysing individual redirects.&lt;/p&gt;</description></item><item><title>Connecting REST Services with Vaadin Flow in Core Java</title><link>https://sven-ruppert.info/posts/connecting-rest-services-with-vaadin-flow-in-core-java/</link><pubDate>Tue, 24 Jun 2025 09:39:25 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/connecting-rest-services-with-vaadin-flow-in-core-java/</guid><description>&lt;h2 class="relative group"&gt;1. Introduction
 &lt;div id="1-introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Why REST integration in Vaadin applications should not be an afterthought
 &lt;div id="why-rest-integration-in-vaadin-applications-should-not-be-an-afterthought" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-rest-integration-in-vaadin-applications-should-not-be-an-afterthought" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In modern web applications, communication with external services is no longer a special function, but an integral part of a service-oriented architecture. Even if Vaadin Flow, as a UI framework, relies on server-side Java logic to achieve a high degree of coherence between view and data models, the need to communicate with systems outside the application quickly arises. These can be simple public APIs—for example, for displaying weather data or currency conversions—as well as internal company services, such as license verification, user management, or connecting to a central ERP system.&lt;/p&gt;</description></item><item><title>Creating a simple file upload/download application with Vaadin Flow</title><link>https://sven-ruppert.info/posts/creating-a-simple-file-upload-download-application-with-vaadin-flow/</link><pubDate>Tue, 20 May 2025 17:34:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/creating-a-simple-file-upload-download-application-with-vaadin-flow/</guid><description>&lt;p&gt;Vaadin Flow is a robust framework for building modern web applications in Java, where all UI logic is implemented on the server side. In this blog post, we&amp;rsquo;ll make a simple file management application step by step that allows users to upload files, save them to the server, and download them again when needed. This is a great way to demonstrate how to build protection against CWE-22, CWE-377, and CWE-778 step by step.&lt;/p&gt;</description></item><item><title>What is CWE-1007: Insufficient visual discrimination of homoglyphs for you as a user?</title><link>https://sven-ruppert.info/posts/what-is-cwe-1007-insufficient-visual-discrimination-of-homoglyphs-for-you-as-a-user/</link><pubDate>Mon, 04 Nov 2024 12:34:27 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-cwe-1007-insufficient-visual-discrimination-of-homoglyphs-for-you-as-a-user/</guid><description>&lt;p&gt;The world of cybersecurity is full of threats, many of which are surprisingly subtle and challenging to detect. One such threat is the problem of so-called homoglyphs. CWE-1007, also known as &amp;ldquo;Insufficient Visual Distinction of Homoglyphs Presented to User&amp;rdquo;, is a vulnerability often used by attackers to deceive and compromise your systems or data. In this blog article, you will get a deep insight into CWE-1007, understand its mechanisms, and how to protect yourself from such attacks. We will discuss examples, technical challenges, and best practices that can help you as a developer understand and mitigate this threat.&lt;/p&gt;</description></item><item><title>CWE-778: Lack of control over error reporting in Java</title><link>https://sven-ruppert.info/posts/cwe-778-lack-of-control-over-error-reporting-in-java/</link><pubDate>Fri, 18 Oct 2024 14:07:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-778-lack-of-control-over-error-reporting-in-java/</guid><description>&lt;h2 class="relative group"&gt;Learn how inadequate control over error reporting leads to security vulnerabilities and how to prevent them in Java applications.
 &lt;div id="learn-how-inadequate-control-over-error-reporting-leads-to-security-vulnerabilities-and-how-to-prevent-them-in-java-applications" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#learn-how-inadequate-control-over-error-reporting-leads-to-security-vulnerabilities-and-how-to-prevent-them-in-java-applications" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Safely handling error reports is a central aspect of software development, especially in safety-critical applications. CWE-778 describes a vulnerability caused by inadequate control over error reports. This post will analyse the risks associated with CWE-778 and show how developers can implement safe error-handling practices to avoid such vulnerabilities in Java programs.&lt;/p&gt;</description></item><item><title>What are component-based web application frameworks for Java Developers?</title><link>https://sven-ruppert.info/posts/what-are-component-based-web-application-frameworks-for-java-developers/</link><pubDate>Wed, 25 Sep 2024 17:04:18 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-are-component-based-web-application-frameworks-for-java-developers/</guid><description>&lt;h1 class="relative group"&gt;Tapestry, Wicket, and Vaadin
 &lt;div id="tapestry-wicket-and-vaadin" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tapestry-wicket-and-vaadin" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;A component-oriented Java web application framework is a development framework that enables the construction of web applications in a modular way, using reusable, encapsulated components that manage their state, behaviour, and presentation. This approach allows developers to build complex user interfaces by assembling pre-built or custom components, like building blocks, each handling specific functionalities within the application.&lt;/p&gt;</description></item><item><title>Building More Complex Apps with Flow</title><link>https://sven-ruppert.info/posts/building-more-complex-apps-with-flow/</link><pubDate>Thu, 22 Aug 2024 12:20:26 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/building-more-complex-apps-with-flow/</guid><description>&lt;p&gt;In this part of the series about Vaadin Flow, I will show how I can create the basic framework for the graphic design of a work application. The focus here is on the design of the work area and the organisation of the individual logical application groups. In other words, we create the application layout that can be used for an industrial project.&lt;/p&gt;</description></item><item><title>Vaadin Flow - How to start</title><link>https://sven-ruppert.info/posts/vaadin-flow-how-to-start/</link><pubDate>Wed, 19 Jun 2024 15:34:50 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/vaadin-flow-how-to-start/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/2024/06/image.png"
 width="1024"
 height="332"&gt;&lt;/figure&gt;
&lt;p&gt;We will now create a new Vaadin Flow application step by step and create a basic framework for our own projects with this component-based open-source web framework. So, right from the start, the question arises: How can you start with as little effort as possible without avoiding the usual expenses that sometimes come with creating projects?&lt;/p&gt;</description></item></channel></rss>