Hyvä: Guides and Practical Know-how | mironsoft Blog
Hyvä
-
Apr 27, 2026
A custom loyalty points tab in the customer account dashboard shows exactly how to extend Magento_Customer cleanly: a layout XML addition for the sidebar navigation, a controller with proper customer authentication, a ViewModel for the data and Alpine.js for filtering and detail views without a page reload, all without copying a single core template.
-
Apr 25, 2026
Hyvä Theme's lean, semantic HTML foundation gives it noticeably better accessibility out of the box than classic Luma themes, but that doesn't close every gap automatically. Teams that ship Alpine.js toggles without focus management or icon buttons without accessible names still produce real WCAG violations. This article covers the strengths, the most common mistakes, and a practical checklist for your first Hyvä accessibility audit.
-
Apr 23, 2026
Alpine.js makes Hyvä frontends fast and reactive, but that same reactivity becomes a trap for E2E tests when it is secured with fixed wait times instead of genuine state assertions. This article shows how Cypress and Playwright reliably test Alpine driven mini cart and wishlist interactions without relying on brittle selectors or fixed timeouts, and how Hyvä's client side behavior differs from classic, server rendered Magento.
-
Apr 22, 2026
A customer whose click on Add to Cart silently fails because of a broken Alpine expression leaves no trace whatsoever in the Magento exception log, since the error happens entirely inside the browser. This article shows how to bring JavaScript error tracking with Sentry into a Hyvä theme in a CSP-compliant way, which error sources arise specifically from failed Alpine initialization, and how this layer is cleanly separated from pure server-side logging.
-
Apr 10, 2026
A quantity discount that is understandable at a glance, and a sale countdown that cannot be defeated by a wrongly set client clock, sound like small details. In practice, exactly those details decide whether customers trust a price display or dismiss it as a trick.
-
Apr 10, 2026
Anyone who solves every interaction with a quickly hand-rolled x-data object in the template builds an unmaintainable tangle of business logic and markup over the course of months. Custom Alpine components built with Alpine.data(), a clean naming convention, safe PHP data passing and Alpine.store() for shared state make Hyvä frontends testable, reusable and CSP-compliant instead, even when a second or third module needs the same interaction.
-
Apr 1, 2026
A Playwright test that only checks CSS classes or fixed timeouts often misses the real problem in a Hyvä theme, because a large part of a component's state does not live in the visible DOM but in the reactive Alpine state behind x-data. This article shows how to query Alpine state directly through the public Alpine API, how a test can wait reliably for initialization instead of relying on fixed delays, and which pitfalls in CSP-restrictive Hyvä setups typically cause flaky tests.
-
Mar 30, 2026
Block cache and full page cache are two independent cache layers, and confusing them produces either data leaks between customers or a cache that gets fully rebuilt over the smallest change. This Hyva block cache strategy shows how cache_lifetime, getIdentities() and targeted invalidation cleanly work together on Magento 2.4.8 with PHP 8.4, without breaking the full page cache.
-
Mar 28, 2026
A clean Magento 2 module is not just registration.php and module.xml. Production ready code also needs configuration, ACL, an admin menu item, layout XML, a ViewModel and clear dependency injection.
-
Mar 20, 2026
Anyone who copies every icon as a full inline SVG into each phtml template in a Hyvä theme bloats the DOM unnecessarily and makes later changes to the icon set harder. SVG icon sprites solve this problem by defining every icon shape only once and reusing it across as many places in the theme as needed through a simple reference. This article shows how to build, optimize, generate and accessibly wire up SVG icon sprites in a Hyvä theme, including a concrete Node build script, an SVGO configuration and a reusable icon partial.