Page 115 - Mironsoft Blog
-
Maxim Mironjuk
-
December 04, 2025
Magento's native review feature is functionally solid but visually and interactively plain. Building a review UI that actually contributes to purchase decisions means treating the review form as an Alpine component, marking up the star display with correct semantics, and offering sort and filter options without complicating the underlying data model.
-
Maxim Mironjuk
-
December 04, 2025
Catalog Permissions makes it possible to lock or unlock categories and products for individual customer groups, separating pure visibility from actual purchase authorization. This article explains the mechanics behind the feature, a typical B2B scenario with an unlocked product line, and the noticeable impact on full page cache, indexing and category page performance.
-
Maxim Mironjuk
-
December 04, 2025
The raw TypeScript Compiler API is powerful but unnecessarily cumbersome for everyday code generation. ts-morph puts an object oriented, readable layer on top of it and turns ten lines of AST traversal into a single understandable method call, without losing type information or precision.
-
Maxim Mironjuk
-
December 03, 2025
Monorepo JS tooling solves a problem that becomes unavoidable as the number of packages in a project grows: shared dependencies, repeated build steps, and versioning across multiple packages. Workspaces in npm, pnpm and yarn lay the foundation, while Turborepo and Nx build on top of them as task runners and drastically cut build time through caching.
-
Maxim Mironjuk
-
December 03, 2025
An ephemeral review app is automatically created as soon as a pull request is opened, and disappears without a trace once it is merged or closed. Docker Compose builds a dedicated, isolated stack per branch for this, reachable through a dynamic subdomain, with no manual environment management at all.
-
Maxim Mironjuk
-
December 03, 2025
Tests that only ever run locally do not protect a project. Only integration into CI/CD turns test automation into a quality gate: every pull request is checked automatically, coverage reports are stored as artifacts, and failures are reported where they happen, in the code, not first at deploy time. This article shows the complete CI/CD integration of PHPUnit for both major platforms.
-
Maxim Mironjuk
-
December 03, 2025
A quantity stepper seems trivial but is full of detail questions: what happens on manual entry of an invalid value? How is the stock quantity respected as an upper bound? How does it work without a mouse? With Alpine.js a stepper can be built that solves all of this cleanly, without needing an external form library.
-
Maxim Mironjuk
-
December 03, 2025
Dirty read, non-repeatable read, and phantom read are the three concurrency anomalies the SQL standard uses as a reference when defining isolation levels. Each anomaly arises when two transactions overlap in time, and each can be reproduced with a concrete two-transaction timeline instead of only being described abstractly.
-
Maxim Mironjuk
-
December 03, 2025
A credit card input mask is more than inserting a space every four digits. Card type detection, different grouping lengths for American Express, the Luhn checksum, and a cursor that does not constantly jump back while typing turn a simple formatting task into a small but demanding Alpine.js project.
-
Maxim Mironjuk
-
December 03, 2025
Indexers are among the most important, yet also most frequently misunderstood, mechanisms in Magento 2. Anyone who doesn't understand how realtime, scheduled and MView interact often ends up debugging price, search or stock problems in the wrong place.
-