Frontend

Practical articles about the client side of web applications: CSS, JavaScript, Vue.js, interface architecture, responsive behavior, browser behavior, and problems encountered in real projects. The focus is on issues I actually had to diagnose and solve during development rather than isolated examples.

why-notification-counters-go-stale-after-returning-to-browser-tab.png
Vue.js

Why Notification Counters Go Stale After Returning to a Browser Tab

In an SPA, an unread notification counter may stay correct while the tab is active and become stale after sleep, a background tab, or browser cache restoration. WebSockets are useful for live updates, but returning to the tab should reconcile state with the server.

47
reset-pagination-on-filter-change-without-triggering-two-requests-cover.png
Vue.js

Reset Pagination on Filter Change Without Triggering Two Requests

When a filter changes, the current page of the previous result set is no longer meaningful. But resetting pageIndex inside a watcher can easily trigger two identical requests. I show how to coordinate both reactions without duplicate loading.

99
vue-rich-text-editor-drag-drop-editable-content-cover.png
Vue.js

Vue Rich Text Editor Drag and Drop: When Block UI Text Became Editable Content

After reordering Content Blocks in a Vue editor, block UI labels could unexpectedly appear inside Rich Text content: locale, position, anchor help, editor labels, and other interface text. This article explores why drag and drop around contenteditable needs stable Vue keys, strict DOM boundaries, correct editor lifecycle handling, and an explicit content synchronization contract.

139
css-stacking-contexts-vue-admin-z-index-cover.png
CSS

CSS Stacking Contexts in a Vue Admin: Why a Huge z-index Was Not Enough

In the ICanUp editor, Media Explorer opened above Content Blocks, yet parts of the underlying editor could still render over the modal layer. This article explains why a huge z-index is not always enough, how CSS stacking contexts work, and why overlays need a clear layer contract instead of arbitrary numbers.

158