Anyone who forks a separate theme for every brand pays twice with every Hyvä update. A well thought out multi-store theme strategy instead uses Magento's fallback hierarchy of theme, website, and store view to run one shared Hyvä theme for multiple stores in a way that stays consistent, maintainable, and update-safe.
Anyone looking to customize the Hyvä checkout in Magento 2 runs into an architecture with no Knockout.js and no UI Components at all: checkout steps are rendered server-side as phtml templates and made reactive through Alpine.js. This article uses real code to show how custom checkout steps, additional form fields, and clean validation get integrated into the Hyvä checkout without touching the theme core and without touching a single Knockout template.
When a cart badge in the header, a sticky add-to-cart bar, and the minicart all need to stay in sync, thinking purely in terms of x-data quickly turns into an awkward mess. Alpine.store() provides a central, reactive store that is available theme-wide, without having to pass state across dozens of component boundaries by hand.
A chat widget or an embedded map almost always wants to contact its own domains, run its own inline scripts, and set its own cookies, exactly what a strict Content Security Policy blocks by default. Registering third party scripts correctly in csp_whitelist.xml and wrapping them in Alpine gets you both: working widgets and an intact CSP.
A sale banner that appears right at midnight, and a campaign page that automatically vanishes again on Monday morning, sound simple until the Full Page Cache and edge caching have to cooperate. Content staging campaigns with Page Builder solve that cleanly in a Hyvä theme once preview mode and cache invalidation are planned in from the start.
A cookie banner that enables Google Tag Manager through an inline script immediately violates the Content-Security-Policy in a Hyvä theme and gets silently blocked by the browser. This article shows how to build a cookie consent module in the Hyvä theme that satisfies both GDPR requirements and CSP restrictions at once, without nonce violations and without loading third-party scripts before consent is given.
Copying Luma's newsletter widget straight into a Hyvä theme collides with the strict Content Security Policy and produces a form that silently fails in the browser. A clean newsletter integration instead needs registerInlineScript(), a lean Alpine.js component with fetch(), a properly communicated double opt-in flow, and a server-validated GDPR consent checkbox, placed cleanly via layout XML in the footer, checkout success page and CMS block.
Claude Code can sketch a new Hyva template in seconds, but only with the right project conventions as context does it produce genuinely usable code. This article shows how to scaffold a phtml template with a matching view model, generate Alpine.js components that stay CSP compliant, and verify AI-suggested Tailwind classes against the actual design system before they reach production.
Wishlist functionality in the Hyvä Theme replaces Magento's Luma widgets with plain phtml and Alpine.js: an Alpine.store holds the product IDs of the saved list on the client, while fetch() calls against the Magento_Wishlist controller with form_key keep the server side in sync. This article shows how the heart icon reacts instantly to clicks, how optimistic updates with rollback work, and how guests are guided cleanly to login without a single page ever fully reloading.
Anyone integrating a third-party module into a Hyva theme sooner or later runs into the module-config.json file. It decides, per module, whether native Hyva templates apply or whether the frontend output falls back to a fallback theme like Magento/blank. This article explains the structure, runtime logic, merge behavior, and custom entries of module-config.json step by step.