<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <atom:link href="https://gummibeer.dev/journal.rss" rel="self" type="application/rss+xml" />
        <title><![CDATA[Journal | Tom Herrmann]]></title>
        <link><![CDATA[https://gummibeer.dev/journal.rss]]></link>
        <description><![CDATA[Feed of all posts and streams.]]></description>
        <language>en</language>
        <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>

                    <item>
                <title><![CDATA[Logarithmic auto-scaling for Laravel Horizon]]></title>
                <link>https://gummibeer.dev/blog/2026/logarithmic-auto-scaling-laravel-horizon</link>
                <description><![CDATA[Why I added a logarithmic queue-size strategy to Laravel Horizon after large scheduled spikes kept starving smaller realtime queues.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Using AI to review our D&D sessions]]></title>
                <link>https://gummibeer.dev/blog/2026/ai-session-review-machine</link>
                <description><![CDATA[How I use session transcripts, multiple AI reviewers and Notion to turn our D&D sessions into concrete roleplay feedback and next-session coaching.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
                                    <category>ttrpg</category>
                            </item>
                    <item>
                <title><![CDATA[Custom Email Validation in Laravel]]></title>
                <link>https://gummibeer.dev/blog/2026/laravel-custom-email-validation</link>
                <description><![CDATA[How I extended Laravel's email rule to accept custom validator classes — the story behind the PR, and how to use it in real projects.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Geography in Laravel: retrieving geographical data]]></title>
                <link>https://gummibeer.dev/blog/2024/geography-in-laravel-part1</link>
                <description><![CDATA[How to retrieve an geographical data from OpenStreetMap and transform them into usable PHP objects.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Working at Hospitable]]></title>
                <link>https://gummibeer.dev/blog/2024/working-at-hospitable</link>
                <description><![CDATA[Answering some questions I got how it is to work at Hospitable and about our hiring process.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate>
                                    <category>professional</category>
                            </item>
                    <item>
                <title><![CDATA[Lessons from Open Source Software]]></title>
                <link>https://gummibeer.dev/blog/2024/lessons-from-open-source-software</link>
                <description><![CDATA[This post is a response/reaction to "From Contributor to Maintainer: Lessons from Open Source Software" by Patrick Organ.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate>
                                    <category>professional</category>
                            </item>
                    <item>
                <title><![CDATA[Dynamic Route Model Binding in Laravel Eloquent]]></title>
                <link>https://gummibeer.dev/blog/2023/dynamic-route-model-binding</link>
                <description><![CDATA[Explore elegant solutions for resolving model binding, whether through named scopes for simplicity or custom query builders for precision.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 30 Aug 2023 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Immutable Carbon in Laravel]]></title>
                <link>https://gummibeer.dev/blog/2023/carbon-techniques-in-laravel</link>
                <description><![CDATA[A few Laravel-specific additions to my previous Carbon post: avoiding mutation, switching Laravel to CarbonImmutable globally, and immutable Eloquent casts.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Using Discord roles for Laravel permissions]]></title>
                <link>https://gummibeer.dev/blog/2023/seamless-role-management-with-discord</link>
                <description><![CDATA[How I made Discord the source of truth for our Laravel permissions instead of maintaining the same team roles twice.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Mon, 14 Aug 2023 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Preserving Date Integrity with Immutable Carbon]]></title>
                <link>https://gummibeer.dev/blog/2023/preserving-date-integrity</link>
                <description><![CDATA[Carbon is mutable by default, which means a harmless-looking date calculation can silently change the original value. This is why I prefer CarbonImmutable for dates I pass around application code.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[End of an era]]></title>
                <link>https://gummibeer.dev/blog/2022/end-of-an-era</link>
                <description><![CDATA[The last years were super disturbing and this is the end of a long episode of my life.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 13 Jan 2022 00:00:00 +0000</pubDate>
                                    <category>personal</category>
                            </item>
                    <item>
                <title><![CDATA[Setting up Laravel project for Shopify App Development]]></title>
                <link>https://youtu.be/lfbcIXXsmtA</link>
                <description><![CDATA[Setting up Laravel project for Shopify App Development]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 26 Aug 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Pest in Practice | Episode 4]]></title>
                <link>https://youtu.be/yvcYWo4Bi6U</link>
                <description><![CDATA[Pest in Practice | Episode 4]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 04 Aug 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Pest in Practice | Episode 2]]></title>
                <link>https://youtu.be/T5Mbr1WPa1w</link>
                <description><![CDATA[Pest in Practice | Episode 2]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 21 Jul 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Lets build a CRM/ERP system in Laravel - Episode 1]]></title>
                <link>https://youtu.be/N-3febTppLs</link>
                <description><![CDATA[Lets build a CRM/ERP system in Laravel - Episode 1]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Tue, 13 Jul 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Pest in Practice | Episode 1]]></title>
                <link>https://youtu.be/UW9c6Q782l8</link>
                <description><![CDATA[Pest in Practice | Episode 1]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Laravel Worldwide Meetup #9: Exploring Tailwind's Headless UI / opendor.me behind the scenes]]></title>
                <link>https://youtu.be/bcnR4NYOw2o</link>
                <description><![CDATA[Laravel Worldwide Meetup #9: Exploring Tailwind's Headless UI / opendor.me behind the scenes]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Tue, 25 May 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Let's play with Laravel LiveWire]]></title>
                <link>https://youtu.be/cQT37gxGr6g</link>
                <description><![CDATA[Let's play with Laravel LiveWire]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 20 May 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Laravel DACH Meetup: Mai 2021]]></title>
                <link>https://youtu.be/aYWDHv6nFuQ</link>
                <description><![CDATA[Laravel DACH Meetup: Mai 2021]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Laravel Queue Job refactoring to Batch]]></title>
                <link>https://youtu.be/M39PmuMgj44</link>
                <description><![CDATA[Laravel Queue Job refactoring to Batch]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Sun, 18 Apr 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[opendor.me release announcement]]></title>
                <link>https://youtu.be/Di3QSWU0jpE</link>
                <description><![CDATA[opendor.me release announcement]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Building a Laravel Blade package #3]]></title>
                <link>https://youtu.be/Z4pa2m9XnSw</link>
                <description><![CDATA[Building a Laravel Blade package #3]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Building a Laravel Blade package #2 - Larabelles]]></title>
                <link>https://youtu.be/eZBIv5wVa3k</link>
                <description><![CDATA[Building a Laravel Blade package #2 - Larabelles]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Building a Laravel Blade package #1 -  Larabelles]]></title>
                <link>https://youtu.be/LZqFusvlmew</link>
                <description><![CDATA[Building a Laravel Blade package #1 -  Larabelles]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate>
                                    <category>stream</category>
                            </item>
                    <item>
                <title><![CDATA[Yoda 🌹🕯️]]></title>
                <link>https://gummibeer.dev/blog/2021/yoda</link>
                <description><![CDATA[Warning: This post is sad and contains potentially disturbing content.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 28 Jan 2021 00:00:00 +0000</pubDate>
                                    <category>personal</category>
                            </item>
                    <item>
                <title><![CDATA[Font optimization with Glyphhanger]]></title>
                <link>https://gummibeer.dev/blog/2021/font-optimization-with-glyphhanger</link>
                <description><![CDATA[A guide on how to optimize webfonts with Glyphhanger by subsetting.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 20 Jan 2021 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Static search with Fuse.js]]></title>
                <link>https://gummibeer.dev/blog/2021/static-search-with-fusejs</link>
                <description><![CDATA[A guide for a JAMstack compatible static search with Fuse.js]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[A recap of 2020]]></title>
                <link>https://gummibeer.dev/blog/2021/a-recap-of-2020</link>
                <description><![CDATA[My recap of the possibly worst year - 2020.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Tue, 05 Jan 2021 00:00:00 +0000</pubDate>
                                    <category>personal</category>
                            </item>
                    <item>
                <title><![CDATA[PHP-Doc in Blade-Views]]></title>
                <link>https://gummibeer.dev/blog/2020/phpdoc-in-blade-views</link>
                <description><![CDATA[How to use PHP-doc tags for better autocompletion in Blade views.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Sat, 19 Dec 2020 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Blade-Component: Webmentions]]></title>
                <link>https://gummibeer.dev/blog/2020/blade-component-webmentions</link>
                <description><![CDATA[A simple Blade component to get all your webmentions.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Telegram Newsletter Command]]></title>
                <link>https://gummibeer.dev/blog/2020/telegram-newsletter-command</link>
                <description><![CDATA[A basic Laravel console command to promote a blog post via Telegram.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Sun, 13 Dec 2020 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Human readable Intervals]]></title>
                <link>https://gummibeer.dev/blog/2020/human-readable-intervals</link>
                <description><![CDATA[I will show you an easy way to write human readable intervals in your Laravel config and everywhere else.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
                                    <category>engineering</category>
                            </item>
                    <item>
                <title><![CDATA[Hello World]]></title>
                <link>https://gummibeer.dev/blog/2020/hello-world</link>
                <description><![CDATA[That's the first post on my new blog.]]></description>
                <author><![CDATA[Tom Herrmann <dev@gummibeer.de>]]></author>
                <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
                                    <category>personal</category>
                            </item>
            </channel>
</rss>
