[{"content":"\u003cp\u003eFor over a decade, \u003cstrong\u003eWordPress\u003c/strong\u003e was my default answer to \u003cem\u003e\u0026ldquo;I need a website.\u0026rdquo;\u003c/em\u003e Whether it was a small business page, a portfolio, a landing page, or even a fully featured shop — WordPress and PHP were where I started my journey into web development. Over the years, I built \u003cstrong\u003emore than a dozen sites\u003c/strong\u003e on it as part of my side business.\u003c/p\u003e\n\u003cp\u003eBut the longer I worked with it, the more its cracks started to show. Eventually, I made the switch to \u003cstrong\u003e\u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e\u003c/strong\u003e — and I haven\u0026rsquo;t looked back since.\u003c/p\u003e\n\u003cp\u003eHere is why.\u003c/p\u003e\n\u003ch2 id=\"my-wordpress-story\"\u003eMy WordPress Story\u003c/h2\u003e\n\u003cp\u003eI started my web journey the way many of us did: a PHP file here, a WordPress install there. It felt empowering. You could spin up a site in minutes, install a theme, add a few plugins, and you were online.\u003c/p\u003e\n\u003cp\u003eFor small clients, this was perfect — at first. But as soon as the requirements grew beyond \u0026ldquo;a few pages and a contact form,\u0026rdquo; the cracks appeared.\u003c/p\u003e\n\u003ch2 id=\"the-problems-with-wordpress\"\u003eThe Problems with WordPress\u003c/h2\u003e\n\u003cp\u003eAfter years of building sites on WordPress, the same pain points kept coming back:\u003c/p\u003e\n\u003ch3 id=\"1-the-plugin-mess\"\u003e1. The Plugin Mess\u003c/h3\u003e\n\u003cp\u003eWordPress is essentially \u003cstrong\u003ea core platform held together by plugins\u003c/strong\u003e. Need SEO? Plugin. Need caching? Plugin. Need a form? Plugin. Need a slightly different button style? You guessed it — plugin.\u003c/p\u003e\n\u003cp\u003eThe result:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAn \u003cstrong\u003eendless amount of plugins\u003c/strong\u003e for even the most basic features\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIncompatibilities\u003c/strong\u003e between plugins, themes, and WordPress core\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance issues\u003c/strong\u003e that grow proportionally with every plugin you install\u003c/li\u003e\n\u003cli\u003eConstant updates — and the fear that one of them will break the site\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2-php-as-a-foundation\"\u003e2. PHP as a Foundation\u003c/h3\u003e\n\u003cp\u003ePHP got me started, and I\u0026rsquo;m grateful for it. But coming from modern languages and tooling, working with PHP increasingly felt like stepping back in time. It is a \u003cstrong\u003eprimitive scripting language\u003c/strong\u003e for what we expect from modern web development — and the ecosystem around it on WordPress reflects that.\u003c/p\u003e\n\u003ch3 id=\"3-page-builders-that-hate-developers\"\u003e3. Page Builders That Hate Developers\u003c/h3\u003e\n\u003cp\u003eThen came the era of \u003cstrong\u003eGutenberg\u003c/strong\u003e, \u003cstrong\u003eElementor\u003c/strong\u003e, \u003cstrong\u003eWPBakery\u003c/strong\u003e and friends. Great for non-technical users, painful for developers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHTML output that is \u003cstrong\u003ebloated and hard to control\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eStyling overrides on top of overrides on top of \u003ccode\u003e!important\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNo clean separation between \u003cstrong\u003econtent\u003c/strong\u003e and \u003cstrong\u003epresentation\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eVersion control? Forget it — your content lives in a MySQL database\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you actually enjoy writing HTML, CSS, and clean templates, WordPress page builders feel like working against the tool, not with it.\u003c/p\u003e\n\u003ch3 id=\"4-the-server-overhead\"\u003e4. The Server Overhead\u003c/h3\u003e\n\u003cp\u003eEvery request hits PHP. Every PHP request hits the database. Every page needs caching plugins to feel fast. You need a hosting plan that can handle it, and you need to keep PHP, MySQL, and WordPress itself patched constantly.\u003c/p\u003e\n\u003cp\u003eFor a \u003cstrong\u003eblog\u003c/strong\u003e, that is a lot of moving parts for what is essentially \u0026ldquo;show me some text and images.\u0026rdquo;\u003c/p\u003e\n\u003ch2 id=\"enter-hugo\"\u003eEnter Hugo\u003c/h2\u003e\n\u003cp\u003eWhen I started this blog, I decided to try something completely different: a \u003cstrong\u003estatic site generator\u003c/strong\u003e. After looking at the usual suspects (Jekyll, Eleventy, Astro, Next.js), I went with \u003cstrong\u003eHugo\u003c/strong\u003e — and I am very happy I did.\u003c/p\u003e\n\u003ch3 id=\"why-hugo-just-clicks\"\u003eWhy Hugo Just Clicks\u003c/h3\u003e\n\u003cp\u003eHere is what convinced me:\u003c/p\u003e\n\u003ch4 id=\"-effortless-project-setup\"\u003e✅ Effortless Project Setup\u003c/h4\u003e\n\u003cp\u003eInstalling Hugo is one command. Scaffolding a new site is another. Adding a theme is a \u003ccode\u003egit submodule\u003c/code\u003e. You can have a working blog in minutes — locally, in your editor, with hot reload.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e3\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e4\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebrew install hugo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo new site my-blog\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e my-blog\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo server\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThat\u0026rsquo;s it. No database. No PHP. No \u003ccode\u003ewp-config.php\u003c/code\u003e.\u003c/p\u003e\n\u003ch4 id=\"-static-output\"\u003e✅ Static Output\u003c/h4\u003e\n\u003cp\u003eHugo produces \u003cstrong\u003eplain HTML, CSS, and JavaScript\u003c/strong\u003e. That means:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNo runtime on the server\u003c/strong\u003e — no PHP, no Node, no database\u003c/li\u003e\n\u003cli\u003eDeploy to \u003cstrong\u003eGitHub Pages, Cloudflare Pages, Netlify, S3\u003c/strong\u003e — basically anywhere\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eInsanely fast\u003c/strong\u003e page loads, because there is nothing to compute at request time\u003c/li\u003e\n\u003cli\u003eA much \u003cstrong\u003esmaller attack surface\u003c/strong\u003e — there is no admin panel to hack\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"-markdown-all-the-way\"\u003e✅ Markdown All the Way\u003c/h4\u003e\n\u003cp\u003eThis is the killer feature for me as a developer: \u003cstrong\u003econtent is just Markdown files\u003c/strong\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWrite posts in your favorite editor (hello, VS Code 👋)\u003c/li\u003e\n\u003cli\u003eVersion everything in \u003cstrong\u003eGit\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eDiff, branch, and pull-request your content like code\u003c/li\u003e\n\u003cli\u003eCopy/paste posts across projects in seconds\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNo more \u0026ldquo;logging into the admin panel to fix a typo.\u0026rdquo; Just edit, commit, push.\u003c/p\u003e\n\u003ch4 id=\"-a-real-developer-experience\"\u003e✅ A Real Developer Experience\u003c/h4\u003e\n\u003cp\u003eHugo gives you a serious templating engine, layouts, partials, shortcodes, taxonomies, and a clean content model. You can:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eStart from an \u003cstrong\u003eexisting theme\u003c/strong\u003e like \u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModify it\u003c/strong\u003e to fit your style, fonts, and layout\u003c/li\u003e\n\u003cli\u003eBuild \u003cstrong\u003ecustom shortcodes\u003c/strong\u003e for things like talks, projects, or galleries\u003c/li\u003e\n\u003cli\u003eExtend it with \u003cstrong\u003ecustom JS\u003c/strong\u003e and CSS without fighting a framework\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe amount of freedom — without giving up speed — is what makes it so enjoyable.\u003c/p\u003e\n\u003ch2 id=\"what-i-lose-and-dont-miss\"\u003eWhat I Lose (and Don\u0026rsquo;t Miss)\u003c/h2\u003e\n\u003cp\u003eTo be fair, switching to Hugo does mean giving up a few things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e❌ A graphical admin UI for non-technical editors\u003c/li\u003e\n\u003cli\u003e❌ Out-of-the-box ecommerce (but for a blog: irrelevant)\u003c/li\u003e\n\u003cli\u003e❌ Dynamic features like comments or forms — you need third-party services\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor a \u003cstrong\u003epersonal/technical blog\u003c/strong\u003e, none of these matter. For client projects with non-technical editors, WordPress (or a headless CMS) may still be the right call. But for me, on this blog, the tradeoff is overwhelmingly worth it.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e📖 \u003cstrong\u003eNote:\u003c/strong\u003e You can see the whole source code of this blog in this repo: \u003ca href=\"https://github.com/mariokernich/blog\"\u003egithub.com/mariokernich/blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"conclusion\"\u003eConclusion\u003c/h2\u003e\n\u003cp\u003eAfter \u003cstrong\u003e11 years of WordPress\u003c/strong\u003e, switching to Hugo felt less like a migration and more like a \u003cstrong\u003eliberation\u003c/strong\u003e. No more plugin hell, no more PHP, no more database. Just Markdown, Git, and a fast static site that I fully understand and control.\u003c/p\u003e\n\u003cp\u003eIf you are a developer running a blog or a content-heavy site on WordPress, I genuinely recommend giving Hugo a try. Even just for one weekend project. You might never go back either. 🚀\u003c/p\u003e\n","date":"2026-06-13T00:00:00Z","image":"https://kernich.de/posts/switching-from-wordpress-to-hugo/cover.svg","permalink":"https://kernich.de/posts/switching-from-wordpress-to-hugo/","reading_time":5,"summary":"\u003cp\u003eFor over a decade, \u003cstrong\u003eWordPress\u003c/strong\u003e was my default answer to \u003cem\u003e\u0026ldquo;I need a website.\u0026rdquo;\u003c/em\u003e Whether it was a small business page, a portfolio, a landing page, or even a fully featured shop — WordPress and PHP were where I started my journey into web development. Over the years, I built \u003cstrong\u003emore than a dozen sites\u003c/strong\u003e on it as part of my side business.\u003c/p\u003e\n\u003cp\u003eBut the longer I worked with it, the more its cracks started to show. Eventually, I made the switch to \u003cstrong\u003e\u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e\u003c/strong\u003e — and I haven\u0026rsquo;t looked back since.\u003c/p\u003e","tags":["Hugo","WordPress","Static Site","Markdown","Open Source"],"title":"Switching After 11 Years From WordPress to Hugo","word_count":950},{"content":"\u003cp\u003eWhat do a camera and a washing machine have in common? Actually, nothing. In the UI5 world, however, you often have to get creative. Additionally, the selection of standard icons is limited and the look \u0026amp; feel varies depending on the version.\u003c/p\u003e\n\u003cp\u003eFor this reason, I\u0026rsquo;ve found myself in the situation of \u0026ldquo;repurposing\u0026rdquo; a camera as a washing machine. The lens worked well as a drum and the flash as a control panel. The only problem was that after an update, more contours were added, which clearly identified the camera as a camera.\u003c/p\u003e\n\u003cp\u003eSince this is obviously not a new problem, UI5 now allows you to use the IconPool framework and register custom icons. But somehow it\u0026rsquo;s always tedious to find the icon files and maintain the metadata properly.\u003c/p\u003e\n\u003ch2 id=\"ui5-library-project\"\u003eUI5 Library Project\u003c/h2\u003e\n\u003cp\u003eFor this reason, I came up with a suitable solution that I\u0026rsquo;d like to share with you through my new project: I took the most well-known and largest icon library, \u003ca href=\"https://fontawesome.com/\"\u003eFont Awesome\u003c/a\u003e, and packaged it into a UI5 library.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/ui5-community/ui5-fontawesome-lib\"\u003e\u003cstrong\u003e→ GitHub Repository: ui5-fontawesome-lib\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBy using the library, all free Font Awesome icons become available. The library can also be extended with paid icons through a Pro license in just a few simple steps. This makes it possible to expand the 704 standard icons by an additional 61,764 icons.\u003c/p\u003e\n\u003cp\u003eTo use the library for development, you simply need to install an NPM module and add a ui5-middleware configuration. More details can be found in the repository.\u003c/p\u003e\n\u003ch2 id=\"showcase-application\"\u003eShowcase Application\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"UI5 Icon Explorer showcase\" loading=\"lazy\" src=\"/posts/font-awesome-icons-in-ui5/showcase.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eTo make icon selection even easier, I also created a small clone of the well-known Icon Explorer that includes all icons. Feel free to check it out: \u003ca href=\"https://ui5-community.github.io/ui5-icon-explorer/\"\u003eui5-community.github.io/ui5-icon-explorer\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/ui5-community/ui5-icon-explorer\"\u003e\u003cstrong\u003e→ GitHub Repository: ui5-icon-explorer\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n","date":"2025-09-09T00:00:00Z","image":"https://kernich.de/posts/font-awesome-icons-in-ui5/showcase.jpg","permalink":"https://kernich.de/posts/font-awesome-icons-in-ui5/","reading_time":2,"summary":"\u003cp\u003eWhat do a camera and a washing machine have in common? Actually, nothing. In the UI5 world, however, you often have to get creative. Additionally, the selection of standard icons is limited and the look \u0026amp; feel varies depending on the version.\u003c/p\u003e\n\u003cp\u003eFor this reason, I\u0026rsquo;ve found myself in the situation of \u0026ldquo;repurposing\u0026rdquo; a camera as a washing machine. The lens worked well as a drum and the flash as a control panel. The only problem was that after an update, more contours were added, which clearly identified the camera as a camera.\u003c/p\u003e","tags":["UI5","SAPUI5","font-awesome","icons","open-source"],"title":"Font Awesome Icons in UI5","word_count":281}]