Page 3 - Monthly Archives: October 2025
-
Maxim Mironjuk
-
October 29, 2025
Using fetch or XHR on page unload is a race condition against the browser. When a tab is closed or the page is unloaded, the browser aborts any open requests. navigator.sendBeacon guarantees delivery of data without delaying navigation, which makes it the right solution for analytics, session data and exit tracking.
-
Maxim Mironjuk
-
October 29, 2025
When a client needs to create or update hundreds of entities, hundreds of individual HTTP requests are inefficient, both in network overhead and server load. A well-designed bulk endpoint drastically reduces this overhead, but brings its own design challenge: how do you communicate when some items in a batch succeed and others fail?
-
Maxim Mironjuk
-
October 29, 2025
A FULL OUTER JOIN returns all rows from both tables involved, regardless of whether a matching counterpart exists on the other side, filling missing values with null. Not every database supports this operation natively though: MySQL had no dedicated FULL JOIN syntax until fairly recently, and older versions of other systems sometimes lack the feature entirely as well. This article covers how to reliably recreate a FULL OUTER JOIN using a combination of LEFT JOIN, RIGHT JOIN, and UNION, which alternative using LEFT JOIN and NOT EXISTS is preferable in certain cases, and where typical correctness and performance pitfalls lurk in the emulation.
-
Maxim Mironjuk
-
October 28, 2025
The Magento CatalogSearch architecture looks like a black box from the outside: you update an attribute, wait for the reindex, and hope search returns the right result. Understanding how the indexer, fulltext scope tables and the Elasticsearch adapter work together lets you debug, extend and fix performance issues at the right place instead of chasing symptoms.
-
Maxim Mironjuk
-
October 28, 2025
API Platform ships GraphQL support practically out of the box, but it comes bundled with a full resource, filter, and serialization stack that not every project needs. If you just want to put a lean GraphQL interface over an existing Symfony project, the base library webonyx/graphql-php often gets you there faster and with far less overhead, because schema and resolvers are defined directly and explicitly.
-
Maxim Mironjuk
-
October 28, 2025
The default Layered Navigation filters are fine for simple catalogs, but quickly hit their limits with range sliders, multi-level AND/OR logic, or category specific facets. Truly customizing Layered Navigation in Magento 2 requires understanding FilterList, FilterableAttributeList and the OpenSearch aggregation layer before writing any custom code.
-
Maxim Mironjuk
-
October 28, 2025
Dynamic import via import() is more than a convenient alternative to static imports: the function returns a promise, loads code only at runtime, and enables patterns such as route based code splitting, conditional loading through feature detection, and robust retry strategies when a chunk gets lost over the network.
-
Maxim Mironjuk
-
October 28, 2025
Pair programming with Claude Code only works when developers stay actively in the loop instead of blindly delegating tasks. This article shows how to question suggestions deliberately, keep steering the direction of the work yourself, and recognize when an AI partner is better suited than a human colleague, and when it is not.
-
Maxim Mironjuk
-
October 28, 2025
Custom utility classes are part of everyday life in every Tailwind project. With the new @utility directive in Tailwind CSS v4, custom utilities become first-class utilities: full variant support, correct cascade placement, and not a single line of JavaScript required anymore.
-
Maxim Mironjuk
-
October 28, 2025
Anyone maintaining three separate compose files for dev, test and CI ends up writing configuration three times and regularly forgets to sync changes across them. Docker Compose Profiles solve this problem at the root: services are only started when the matching profile is active, one file for every environment.
-