Page 12 - Monthly Archives: January 2026
-
Maxim Mironjuk
-
January 18, 2026
Thin, low value content can hurt the visibility of an entire domain. This guide shows how to systematically identify thin content and consolidate it into pages worth ranking.
-
Maxim Mironjuk
-
January 18, 2026
Tooltips getting clipped at the edge of the viewport, dropdowns disappearing behind other elements, and popovers that stop tracking the scroll position: the x-anchor plugin from Alpine.js solves all of this with the Floating UI engine, automatic flip behavior and scroll awareness.
-
Maxim Mironjuk
-
January 17, 2026
The notorious iOS Safari bug with 100vh has kept developers busy for years. The modern CSS viewport units dvh, svh and lvh solve the problem permanently, with no JavaScript, no resize events and no fragile workarounds. This article explains how Dynamic, Small and Large Viewport Units work and when you actually need which one.
-
Maxim Mironjuk
-
January 17, 2026
A store can pass every automated check with a perfect score and still be effectively unusable for screen reader users, people with motor impairments, or people with cognitive disabilities, because tools like axe-core or Lighthouse only catch technical rule violations, not the actual experience of completing a task. User testing with real people with disabilities closes exactly that gap, from recruiting a diverse test group through the right test setup to prioritizing the resulting findings in day-to-day development.
-
Maxim Mironjuk
-
January 17, 2026
Static types usually end at the network boundary: the client does not know what the server returns unless it relies on manually maintained interfaces or generated client code. tRPC closes this gap by importing router types directly from the server, with no REST conventions, no GraphQL schema and no separate code generation step at all.
-
Maxim Mironjuk
-
January 17, 2026
Mixing Alpine.js and Livewire without a clear boundary produces unnecessary server roundtrips and state that vanishes on every re-render. With entangle, targeted event dispatching and a clean split between server state and client state, hybrid components in the TALL stack become predictable and fast.
-
Maxim Mironjuk
-
January 17, 2026
Many Magento and PHP APIs respond in 400 to 800 milliseconds even though the actual work could finish in a few milliseconds. This article walks through a concrete case study showing how systematic profiling, database indexes, caching, cursor based pagination, and asynchronous processing bring response times down from 500 milliseconds to under 50 milliseconds.
-
Maxim Mironjuk
-
January 17, 2026
A network timeout when calling a payment or order API says nothing about whether the write actually failed on the server. A naive retry mechanism therefore risks duplicate charges, duplicate orders, or duplicate notifications. An idempotency key solves this problem not in application logic but structurally at the database level, with a UNIQUE constraint that reliably prevents duplicate processing even when the same request arrives in parallel. This article shows the practical table design, response snapshots, and a clean cleanup strategy.
-
Maxim Mironjuk
-
January 16, 2026
TypeScript types only exist at compile time and do nothing to protect form data from messy user input, which always arrives at runtime as unknown strings. This article shows how schema validation libraries like Zod and Valibot derive both runtime checks and TypeScript types from a single source, applied hands on to checkout forms, native FormData handling, typed API layers, and clear field errors in the user interface.
-
Maxim Mironjuk
-
January 16, 2026
A good step indicator always shows where you are inside a form wizard, which steps are already done and how many are still to come. With Tailwind CSS and Alpine.js this indicator can be built consistently from a few reusable states, instead of maintaining separate markup for every step.
-