Page 12 - Monthly Archives: March 2025
-
Maxim Mironjuk
-
March 18, 2025
A breadcrumb bar built from nested div and span elements with separators looks correct to sighted users, but delivers no information whatsoever to a screen reader that it's a navigation aid with a clear position in the page hierarchy. This article covers how nav with aria-label, aria-current, a semantically correct list structure, and accessible pagination controls create real, usable navigation for screen reader users, with complete practical examples from Hyva.
-
Maxim Mironjuk
-
March 18, 2025
EN 301 549 is the invisible foundation underneath most accessibility discussions in Europe: the BFSG, the European Accessibility Act, and public procurement rules all point back to this standard, yet few project teams have ever opened the actual document. Anyone who only knows WCAG only knows part of it.
-
Maxim Mironjuk
-
March 18, 2025
Custom share buttons hardcoded to a handful of social media platforms are outdated. The Web Share API opens the operating system's native share dialog, and the user decides which app to use: WhatsApp, Telegram, Email, Notes, or anything else. The result is better UX with less code and no dependency on third-party SDKs.
-
Maxim Mironjuk
-
March 18, 2025
Component Testing with Cypress closes the gap between isolated unit tests and slow end to end runs. Vue components are actually mounted in the browser, with a real DOM, real events, and controllable network calls, without booting up the entire application.
-
Maxim Mironjuk
-
March 17, 2025
A publicly reachable GraphQL endpoint that accepts arbitrary mutations is an open door for data manipulation, spam, and automated attacks. GraphQL persisted mutations close this gap by only allowing execution of a server-side pre-approved list of operations, everything else gets rejected before a single resolver ever runs.
-
Maxim Mironjuk
-
March 17, 2025
Error modeling is the neglected part of API design. RFC 9457 Problem Details, domain-specific error codes and polymorphic error schemas make the difference between an API where integrators have to guess what an error means and an API where errors are self-explanatory and machine-processable.
-
Maxim Mironjuk
-
March 17, 2025
A .env file with plaintext passwords inside the deployment artifact is a security risk many Symfony teams silently accept. Vault management with HashiCorp Vault replaces static secrets with dynamic, short lived credentials that rotate automatically and are logged without gaps. This article shows how Symfony is connected to Vault in practice.
-
Maxim Mironjuk
-
March 17, 2025
A skeleton screen, a placeholder layout made of gray boxes and bars shown in place of the actual content while it loads, has become a standard pattern for perceived loading states over the past several years. The crucial point that often gets missed is that a skeleton screen shortens perceived wait time without actually improving technical Core Web Vitals values like Largest Contentful Paint, and under certain circumstances it can even worsen the Cumulative Layout Shift score. This article explains why skeleton screens work psychologically, where their technical limits lie, how to avoid CLS risk at the transition to real content, and when a plain spinner is the more pragmatic choice.
-
Maxim Mironjuk
-
March 17, 2025
Seed data is fundamentally different from plain init scripts: init scripts create the schema, seed data fills it with realistic, repeatable test data. Anyone mixing up both concepts ends up either with empty development databases or with inconsistent test states between team members.
-
Maxim Mironjuk
-
March 17, 2025
A Vue checkout flow directly determines the conversion rate of a Magento shop. Teams that cleanly separate steps, validation and abandonment tracking prevent users from bouncing right before purchase completion because of unclear error messages or lost progress.
-