Page 273 - Mironsoft Blog
-
Maxim Mironjuk
-
April 24, 2025
Duplicate content in Magento stores splits ranking signals across multiple URLs, wastes crawl budget, and keeps the right page from showing up in search. Multiple store views, URL parameters, parallel HTTP and HTTPS, and products assigned to several categories create typical duplicates that can be fixed with canonical tags, clean 301 redirects, and the right Magento configuration.
-
Maxim Mironjuk
-
April 23, 2025
A custom GraphQL mutation in Magento 2 is more than a new endpoint: it ties schema declaration, resolver logic, validation, transaction safety and cache invalidation together into one consistent whole. Anyone who separates these building blocks cleanly ends up with a mutation that feels like a native Magento feature and runs reliably in production storefronts.
-
Maxim Mironjuk
-
April 23, 2025
Role-based access control with ROLE_ADMIN and ROLE_USER rarely suffices in practice. When a user may only edit their own resources, only team members should have access, or permissions depend on the state of the object, the Symfony Security Voter is the right answer.
-
Maxim Mironjuk
-
April 23, 2025
When the write side of a system lives in an event store, the read side does not have to use the same data model. GraphQL and event sourcing fit together surprisingly well, because GraphQL queries deliver exactly what CQRS read models need, flexible, projection-based queries without ever touching the event stream itself.
-
Maxim Mironjuk
-
April 23, 2025
Ever since the iPhone X with its notch and the iPhone 14 Pro with its Dynamic Island, web developers have had to make sure content does not disappear behind hardware elements. CSS env() together with the safe-area-inset-* variables is the standardized solution, working the same way across browsers, PWAs and native WebViews.
-
Maxim Mironjuk
-
April 23, 2025
Talking about temporary tables in MySQL often means two entirely different things: tables explicitly created with CREATE TEMPORARY TABLE and bound to a session, and internal optimizer constructs that MySQL itself creates for GROUP BY, ORDER BY, or DISTINCT without anyone asking for them. Then there is the MEMORY storage engine for explicitly created, permanently in-memory lookup tables. Anyone who keeps these three concepts cleanly separated also understands why some queries turn unexpectedly slow and how to fix that in a targeted way.
-
Maxim Mironjuk
-
April 23, 2025
Testing Pinia stores in isolation takes more than instantiating a store and calling an action. Between createPinia and createTestingPinia, real versus mocked actions, and cross-store dependencies lie decisions that determine the meaningfulness and maintainability of an entire test suite.
-
Maxim Mironjuk
-
April 23, 2025
A maintainable dark-light token system does not emerge from a single layer of custom properties, but from three cleanly separated tiers: primitive tokens, semantic tokens and component tokens. Together with the light-dark() function, this architecture can be implemented without a growing media query per component.
-
Maxim Mironjuk
-
April 23, 2025
An unencrypted backup is a second copy of the most sensitive data in a company, often protected even less than the original. Backup encryption is therefore not a nice-to-have, but a basic requirement as soon as a backup leaves your own server. This article shows how GPG, OpenSSL, restic, and Borg are used on Linux for encrypted backups, and what to watch for in key management.
-
Maxim Mironjuk
-
April 23, 2025
In Hyva theme projects, a bug rarely lives cleanly on one side: is a Tailwind class generated wrong, or does the watcher simply never see it? PhpStorm can bundle an Xdebug session and a Node process into a single Compound configuration so both sides pause in sync.
-