
Vyacheslav Naumenko
Frontend Engineer
Developing scalable, high-load interfaces in the gambling industry. Specializing in frontend architecture and design systems built on TypeScript and React, enhanced with AI workflows.
The blog covers web development: articles, news, and deep dives into what's actually happening in the industry. Frontend, tooling, browsers, web standards — zero fluff, zero marketing (will delete upon first sponsored post request).
Blog
131Interop 2027
Developer Signals and Firefox’s ranking tool let you influence browser priorities and feature selection for Interop 2027.
⚡️ The Remix Way: how the framework’s new approach changes engineering thinking
The philosophy of Remix 3: modular libraries, interfaces as contracts and native web primitives.
JavaScript’s midlife crisis
JavaScript won the browser, but its infrastructure is moving to Rust, Go and Zig: what this means for developers.
State of Devs 2026 results
Salaries, burnout, attitudes toward AI and work arrangements in the State of Devs 2026 survey.
GitHub shares its experience moving away from CSS-in-JS
How GitHub replaced runtime CSS-in-JS with utility classes and improved bundle sizes, INP and LCP.
⚡️ Offline-first and real-time sync are essentially the same problem
The shared foundation of offline support and real-time synchronization in local-first applications.
How to make Claude Design use a real design system instead of generating lookalike components
Syncing a design system with Claude Design through /design-sync: bundles, exports, types and render checks.
One SVG, nine posters: the link-parameters property
CSS Linked Parameters lets you pass parameters into a single SVG file from HTML and CSS without duplication.
🐼 Panda CSS v2 is out: the engine has been rewritten in Rust
Panda CSS v2 introduces a Rust compiler built on Oxc, faster parsing and a WebAssembly build.
📌 Sidenotes with CSS Anchor Positioning
Sidenotes without JavaScript: typed attr(), anchor(), max() and a fallback for narrow screens.
Aligning icons in lists 🎯
How to align an icon with the first line of text using the lh unit and CSS calc().
The root scroller and how not to lose it 📜
Why you should preserve the page’s root scroller and avoid losing native scrolling features.
Thinking for yourself 🥲
For a second, I was afraid I would have to think for myself.
Modern types for the web 💡
modern-web-types adds TypeScript types for web APIs implemented in at least one browser engine.
Finally, sensible iframes: Chrome 154 adds frame-sizing support
Native iframe resizing with frame-sizing, meta tags and window.requestResize() in Chrome 154.
Forget localhost:3000: meet Portless 🔌
Portless replaces local ports with stable .localhost domains and supports HTTPS and Git Worktrees.
Jev: System 1 models for instant answers ⚡️🧠
Jev from Typesafe AI: fast probabilistic models for classification, interfaces, games and search.
Local syntax highlighting with WebGPU and a micromodel 🧠⚡️
gpu-lexer uses a local WebGPU micromodel to tokenize code and highlight syntax without server-side computation.
The browser’s main thread is a limited resource
Managing Main Thread load through task splitting, yielding, event batching and moving computations into workers.
GPU Time: parsing dates with AI ⏱️🧠
gpu-time is a roughly 24.8K-parameter micromodel for locally parsing dates and relative time expressions.
React code on top of Zed’s GPU UI: meet GPUIX ⚡️
GPUIX lets you write React interfaces for Zed’s GPU-accelerated GPUI without Electron or Chromium.
React 19.3 is out: stable View Transitions, Fragment Refs and a few more useful features ⚛️⚡️
React 19.3 stabilizes View Transitions and Fragment Refs, with browser-only components, Trusted Types and context in RSC.
You no longer need initial-scale=1.0 in the viewport meta tag 📱
Why modern mobile browsers no longer need initial-scale=1.0, and the viewport meta tag you can keep instead.
Container style queries + advanced attr(): rethinking component architecture in CSS 🎨🧩
Advanced attr() and Container Style Queries pass typed HTML attributes into CSS and make components more autonomous.
pnpm 12 is out, powered by Rust 🚀
pnpm 12 moves its installation engine to Rust, with faster startup and installs, deterministic cycles and breaking changes.
Zod 4.5 is out: schema precompilation and almost a tenfold memory reduction 🚀
Zod 4.5 brings new APIs, faster safeParse, lazy method binding and JIT schema compilation through z.compile().
Making long lists fast: Content Visibility versus Virtualization 📜⚡️
Content Visibility and virtualization address different bottlenecks: choosing based on Layout, Paint, DOM size and memory.
Proper SSR for time zones: solving the problem with @epic-web/client-hints 🌍⏰
How @epic-web/client-hints passes time zones through cookies for correct server-rendered dates without flashes or hydration errors.
Understanding the Performance panel in Chrome DevTools ⏱️
An interactive Chrome DevTools Performance guide covering colors, network requests, flamecharts, metrics and Main Thread bottlenecks.
TanStack drops RSC: when the solution became more complicated than the problem
Why TanStack dropped RSC after replacing heavy dependencies, and what it changed for complexity, navigation and traffic.
What if referential stability became part of TypeScript’s type system?
The stableref concept uses branded Stable types, strict props and wrapper hooks to check stable references at compile time.
Generating OG cards without Headless Chrome: a fast Rust generator 🖼⚡️
Takumi renders JSX to PNG, WebP, SVG and JPEG without a browser, with modern styling and support for multiple runtimes.
Octane: another “fast React” without Virtual DOM or strict hook rules ⚡️
Octane offers a React-like API without Virtual DOM or hook restrictions, with ports of popular ecosystem tools.
Infinity in CSS
Practical CSS infinity techniques for rounded corners, z-index, Boolean logic, backgrounds, animations and one-sided clamp.
State of CSS 2026: the year of anchor positioning ⚓️
State of CSS 2026 results: interest in Anchor Positioning, AI adoption in styling and shifts in tooling.
The React composition ladder: avoiding prop overload and overengineering 🧗♂️
Orus’s four React composition levels: plain props, compound components, Composer with Providers and state behind a contract.
The ultimate tutorial on building forms in React 📝
A detailed React forms tutorial covering HTML, useActionState, TanStack Form with Zod, multistep forms and field arrays.
React2Shell: how the React Flight protocol became an RCE attack vector 🚨
React2Shell and CVE-2025-55182 explained: React Flight deserialization, the exploit chain and defensive measures.
A tournament bracket with CSS Subgrid. A masterclass from Ahmad Shadeed ⚽️
Ahmad Shadeed shows how to build a CSS Subgrid tournament bracket with aligned matches and connecting lines.
Nectar: a WebAssembly language for fans of extreme performance ⚡
Nectar is a Rust-based language compiling to WebAssembly, trading developer experience for minimal size and speed.
Experimenting with text-fit: native text autoscaling in CSS
The experimental CSS text-fit property: grow and shrink modes, fitting strategies and scaling limits.
Custom Invoker Commands in React: cross-component communication without context or prop drilling? ⚡️
Native Custom Invoker Commands in React: command and onCommand examples, benefits and limitations.
The State of Devs 2026 survey is live! 🧠
State of Devs 2026 explores developers’ health, salaries, careers, hobbies and community.
Do not trust React Compiler blindly: production experience and pitfalls ⚛️
React Compiler adoption lessons: React Hook Form, stale callbacks, the Memo badge and a safer migration checklist.
How ChatGPT Web serves a billion users: reverse-engineering OpenAI’s stack 🧠
ChatGPT Web’s stack and evolution: React Router 7, Vite, streaming SSR, anonymous access, feature flags and bot protection.
ECMAScript 2026 is officially approved: what is new in the JavaScript standard? 🚀
ES2026 adds precise summation, Map upsert, Base64 and hex, Error.isError, JSON.parse improvements and Iterator.concat.
CSS Anchor Positioning: goodbye to JS workarounds for tooltips and dropdowns ⚓️
Josh Comeau explains CSS Anchor Positioning: element anchors, automatic fallbacks and popover integration.
HTTP QUERY becomes a Proposed Standard: goodbye to POST for complex queries? 🌐
HTTP QUERY combines a request body with safe, idempotent GET semantics for complex queries.
TypeScript 7.0 RC is out: a stable API and the final stretch before release 🛠
TypeScript 7.0 RC stabilizes the API, with a Go compiler, TS 6 coexistence and improved type inference.
Why I've Started Understanding Recruiters: Nearly a Hundred Résumés and the Biggest Red Flags 📑🤦♂️
After reviewing nearly a hundred résumés for Uplatform: ignored instructions, heavy CVs, and anonymous files from a referrer's perspective.
Looking for a Job? We're Hiring at Uplatform! 💼🚀
Uplatform is looking for DevOps engineers, analysts, developers, and designers: how to send your résumé for an internal referral.
Experimenting with Native random() in CSS: From Theory to Real Use Cases 🎲
Practical CSS random() examples: bokeh, northern lights, cherry blossom petals, a stack of photos, and random poetry.
SVG's Biggest Pain Points in 2026 🎨
What SVG is missing: styling external assets, CSS support, responsive typography, and a reliable foreignObject.
Vite 8.1: Introducing Bundled Dev Mode ⚡️
Vite 8.1 adds experimental dev-mode bundling, Chunk Import Map, native Wasm imports, and Lightning CSS improvements.
React Router 8 Released: Cleanup, a New Baseline Stack, and EOL for v6
React Router 8 requires Node 22, Vite 7, and React 19, removes react-router-dom, and ends support for v6 and Remix v2.
What JS Knows, CSS Now Knows Too
prop-for-that exposes browser and element state as CSS variables: pointers, media colors, battery levels, scrolling, and form validation.
💸 A $200 Subscription, but $14,000 in Tokens: How Developers Bankrupt AI Labs
SemiAnalysis compared OpenAI and Anthropic subscriptions with API pricing: intensive coding tasks revealed huge losses for the labs.
A Universal Specification for Website Technical Quality 🌐
Website Specification brings together requirements for semantics, SEO, accessibility, security, performance, i18n, and AI readiness.
VoidZero Joins Cloudflare. What Does This Mean for the Ecosystem? 🥺
Why VoidZero is joining Cloudflare and what the deal means for Vite, Oxc, Vite+, the Void platform, and AI agents.
CSS Centering in 2026 🎯
Modern CSS centering techniques: Flexbox, Grid, text-box, anchor positioning, and safe alignment.
Native Gap Styling in CSS with Gap Decorations
Gap Decorations lets you draw and animate dividing lines in Grid and Flexbox without extra DOM nodes or pseudo-elements.
We Aren't Praying Hard Enough: An Emoji CSS Framework ☠️
BEMoji turns emoji and the BEM methodology into a CSS framework with design tokens, utility classes, and a CLI.
An Apple Silicon Killer from Nvidia? Meet RTX Spark
Nvidia introduces RTX Spark ARM chips for laptops and mini PCs: specs, battery life, and the outlook for Windows on ARM.
Deno Overtakes Bun in the Race to Be a Drop-in Node.js Replacement 🦕
Deno 2.8 improves Node.js compatibility, npm integration, cryptography, and dependency management tools.
Stepped Fluid Sizing in CSS with round() 📐
How round() and clamp() turn fluid sizes into precise steps that stay consistent with a strict design system.
Declarative partial page updates: goodbye to heavy streaming JavaScript? ⚡️
Declarative Partial Updates: out-of-order HTML streaming, markers, templates and new APIs for updates without extra JavaScript.
The State of CSS 2026 survey is open 🎨
The State of CSS survey helps shape browser priorities and introduces unfamiliar properties and selectors.
Liquid glass on the web: Canvas, WebGPU and no CSS blur 💧
The experimental liquid-dom library creates liquid-glass effects over HTML using Canvas and WebGPU/WebGL.
The browser’s built-in HTML Sanitizer API: goodbye, DOMPurify? 🛡
Native HTML sanitization: safe and unsafe methods, use cases, the backend’s role and browser support.
Improving browser caching with No-Vary-Search 🚀
No-Vary-Search avoids cache fragmentation from URL parameters: examples, browser support and debugging caveats.
Browsers on crutches: why Safari and Firefox contain thousands of lines of code for major sites 🩼
How Safari and Firefox apply site-specific hacks for major websites, and what Chrome’s dominance means for other engines.
Mobile-safe layouts: taming notches and cutouts 📱
Using viewport-fit, safe-area-inset and safe-area-max-inset to keep interfaces clear of cutouts and system UI.
Controlling infinite CSS animations on the fly 🕹
How animation-composition: add changes the speed and direction of infinite animations without jumps or JavaScript.
Remix 3 Beta: heading toward zero dependencies 🧩
Remix 3 moves toward small packages and server-driven state: more control, but still limited documentation.
Streaming in React: what actually happens
How React streams UI out of component-tree order using Suspense, markers and hydration scripts.
Zed 1.0: a fast editor built in Rust 🚀
Zed’s first stable release: performance, collaboration, AI, extensions and a native interface.
Image preloading: it is not all straightforward 🖼
Eight ways to control image loading: fetchpriority, preload, responsive images and common workarounds.
Native masonry is almost here
Masonry Grid Lanes uses native layout when the browser supports it, with a JavaScript fallback elsewhere.
IPv8: a new internet?
The IPv8 draft proposes extending IPv4 with an ASN prefix: address structure, deployment ideas and other changes.
CSS Containment: an underrated performance boost 🚀
How contain isolates the DOM to reduce layout, paint and style recalculations, and the limitations to watch for.
A lightweight library for building web components ⚡️
Elena builds lightweight web components with progressive enhancement, lazy hydration, and SSR support.
How MDN Web Docs moved from React to Lit
MDN’s move to web components: a two-second development startup, fewer dependencies and simpler maintenance.
The great CSS expansion 🚀
New CSS capabilities replace JavaScript libraries, shrink bundles, and improve Core Web Vitals.
Cloudflare introduces a WordPress “killer” ⚡️
Cloudflare’s EmDash is an open-source CMS on TypeScript and Astro, with serverless architecture and isolated plugins.
Saturday reading ☕️ How one engineering team got a feature into a web standard
How Squarespace took lazy loading for video and audio from an idea to the HTML standard, working with browser teams.
CSS or BS: test your CSS knowledge
The CSS or BS game challenges you to tell real CSS properties from made-up ones and test your knowledge of modern CSS.
Meet Cursor 3 🤖
Cursor 3 moves agents into a dedicated window, adds parallel execution, and improves agent-first workflows.
🧠 Browsers now have AI.css
AI.css lets the browser choose layout, typography, responsive behavior, and a user-friendly interface for you.
🚨 Axios has been compromised
Malicious Axios versions, a Trojan installed through postinstall, and what to do if your environment was compromised.
Pretext: text layout without the browser 🤯
Pretext measures and lays out text in JavaScript without the DOM, from chat bubbles to Canvas and server-side rendering.
Name your effects
Named functions in useEffect make code clearer, simplify testing, and make stack traces easier to read.
You don’t need data-testid for testing
Why frequent use of data-testid signals accessibility problems, and how to test interfaces using roles and accessible names.
Bippy: React DevTools for grown-ups 😈
Bippy provides direct access to React’s fiber tree and render events for building your own tools.
A video series on microfrontends
A video series from IT Sinyak covering microfrontends, independent hosting, and building your first application.
You don’t know HTML tables
A deeper look at HTML tables: the Table Object Model, header semantics, structure, and accessibility.
Vite 8
Vite 8 moves to Rolldown, bringing a unified Rust toolchain, built-in DevTools, and new platform capabilities.
SVG Optimization: Less Weight, Less DOM, Faster Rendering
Practical SVG optimization: cleaning with SVGO, simplifying paths, reusing symbol and use, and reducing DOM size.
CodePen 2.0
The new CodePen beta brings files and folders, Blocks, custom defaults, visual configuration, collaboration, Omnibar, and privacy controls.
Web Haptics: Haptic Feedback on the Web
Web Haptics provides device vibration patterns, intensity controls, presets, and React, Vue, and Svelte wrappers, with an iOS workaround.
🎲 Native Randomness in CSS: What's It Even For?
Experimental CSS random() and random-item() functions: ranges, random selection, synchronization, and ideas for generative interfaces.
A Practical Guide to <img>: From the Basics to LCP
A practical image guide covering dimensions, srcset and sizes, formats, lazy loading, loading priorities, and their impact on LCP and CLS.
🛡 How to Build a Bulletproof React Component
Design resilient React components that handle SSR, hydration, portals, composition, and future changes to rendering.
⚓️ Anchor Positioning: An In-Depth Guide from Doka
Doka's detailed guide to CSS Anchor Positioning covers terminology, properties, functions, and interactive graph and animation examples.
👩💻 csskit: A High-Performance CSS Toolchain in Rust
The csskit alpha combines CSS parsing, minification, formatting, transformations, and LSP support in a high-performance Rust toolchain.
👩💻 State of React 2025 Results
State of React 2025 results: React 19, the Compiler, server functions, lighter ecosystem tools, and independent React Foundation governance.
Friday Links: Modern CSS, Prism Tools, and NPMX
Useful developer resources: modern CSS snippets, client-side utilities in Prism Tools, and the fast NPMX npm registry browser.
🔥 TanStack Releases Hotkeys: Type-Safe Keyboard Shortcut Management
TanStack Hotkeys brings type-safe shortcuts, sequences, scoped hotkeys, DevTools, and React hooks in a new pre-alpha library.
TypeScript 6 Beta: A Transitional Release on the Road to the Go Version
TypeScript 6 prepares the ecosystem for TS 7's Go compiler with new language features, better type inference, and the removal of old settings.
ESLint 10: An Uninteresting Major Update
ESLint 10 removes legacy configuration and outdated APIs, a useful architectural cleanup without a noticeable speed boost.
ESLint or Rust Tools: Poll Results
A snapshot of a Telegram poll about ESLint, Biome, and Oxlint, with four answer options and 15 voters.
Grid Lanes: The Masonry Layout Saga Is Coming to an End
WebKit reimagines masonry as Grid Lanes, with stable syntax, a Safari Technology Preview implementation, and fallback strategies.
Container scroll-state queries: detect scroll state with pure CSS
CSS container scroll-state queries handle scroll arrows, sticky headers, and hints without JavaScript, though browser support remains limited
State of JavaScript TypeScript 2025 Results
State of JS 2025 results: TypeScript dominates, Vite and Vitest keep growing, and VoidZero and TanStack tools look promising.
Rolldown reaches Release Candidate
Rust-based Rolldown reaches RC and becomes Vite 8 Beta's default bundler, with Rollup compatibility, code splitting, and Oxc transforms
🔎 Text scaling in mobile browsers
Chrome Canary experiments with system text scaling on mobile operating systems through the text-scale meta tag behind a flag
Yarn 6 moves to Rust: a first look at the next major release
The Yarn 6 preview rethinks installs and version management with Rust, a faster install pipeline, Yarn Switch, and Lazy Install
React best practices
Vercel publishes rules and patterns for React applications, aimed at AI agents and useful for developers too
JavaScript's Date is officially obsolete, at least conceptually
An article on Date's problems, mutability, and time zones explains how Temporal addresses them at the architectural level
jQuery 4 is out after all
Twenty years after its first release, jQuery 4 drops IE below 11, adds Trusted Types and CSP, adopts ES modules, and fixes focus order
A complete guide to the new useEffectEvent hook
Peter Kellner explores useEffectEvent, useEffect problems, stale closures, and dependencies through practical cases and his own implementation
How an obscure HTML tag can help with debugging
The plaintext tag stops HTML parsing and can help find broken markup, unexpected injections, and strange server output
JavaScript Rising Stars 2025
The tenth JavaScript Rising Stars ranks the ecosystem by GitHub star growth amid the rise of AI and supply-chain attacks
Production-ready boilerplate for web components
Aaron Gustafson's web component starter template includes Google's best practices, Vitest, CI, and secure npm publishing
Per-request throttling in Chrome DevTools
Chrome DevTools can slow down individual network requests to test loading states, race conditions, retries, and timeouts
State of React 2025
The annual React community survey is open: take part and give developers direct feedback on the ecosystem
CSS in Chrome: the 2025 roundup
Chrome DevRel rounds up 17 new CSS features from 2025, including customizable select, scroll-state queries, and corner-shape
TanStack AI: an open toolkit for AI models
TanStack introduces a free, open-source SDK for AI chats and features with no ties to a server, framework, or provider
Oxfmt Alpha Release
Oxc's Oxfmt formatter is now in alpha: a fast Prettier alternative to pair with Oxlint
React Server Components in React Router
React Router adds experimental support for React Server Components