{"id":8846,"date":"2026-08-23T07:30:00","date_gmt":"2026-08-23T05:30:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8846"},"modified":"2026-08-13T14:30:17","modified_gmt":"2026-08-13T12:30:17","slug":"vanilla-javascript-vs-heavy-frameworks-modern-dom","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/","title":{"rendered":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React"},"content":{"rendered":"\r\n<h2 class=\"wp-block-heading\">Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Modern frontend architecture frequently defaults to complex single-page application (SPA) frameworks like React, Angular, or Vue, even for straightforward user interfaces and modular SaaS tools. However, the overhead introduced by large runtime bundles, virtual DOM diffing algorithms, and heavy JavaScript re-hydration directly penalizes Core Web Vitals\u2014specifically Interaction to Next Paint (INP) and Largest Contentful Paint (LCP). Modern browsers provide native DOM APIs and Web Components that render heavy pre-made frameworks technically redundant for pragmatic, high-performance web engineering.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">1. The Performance Cost of Virtual DOM and JavaScript Bundle Bloat<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Frameworks rely on an abstraction layer called the Virtual DOM to batch and calculate layout updates before applying them to the real Document Object Model. While historically beneficial for mitigating slow browser rendering engines, modern rendering pipelines process direct DOM manipulations with exceptional speed. Introducing a virtual representation creates measurable disadvantages:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Memory and CPU Overhead:<\/strong> Maintaining duplicate tree representations in memory forces the JavaScript engine to perform CPU-intensive reconciliation loops on every state change.<\/li>\r\n\r\n\r\n\r\n<li><strong>Main-Thread Blocking:<\/strong> Large JavaScript bundle evaluation and client-side hydration block the browser main thread, delaying interactivity and downgrading INP scores across mobile devices.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/vanilla-javascript-vs-heavy-frameworks-why-the-modern-dom-en.png\" width=\"1120\" height=\"506\" decoding=\"async\"\n     alt=\"Diagram for the article: Memory and CPU Overhead, Main-Thread Blocking, Custom Elements &amp; Shadow DOM \u2026\">\n<figcaption>The 5 building blocks of the article at a glance: Memory and CPU Overhead, Main-Thread Blocking, Custom Elements &amp; Shadow DOM, HTML &lt;template&gt; Tags \u2026.<\/figcaption>\n<\/figure>\n\n<h2 class=\"wp-block-heading\">2. Modern Native DOM APIs and Web Components<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The ECMAScript specification and modern browser engines now natively supply the modular features that previously required third-party libraries. Building interfaces in clean Vanilla JavaScript allows leveraging robust browser standards directly:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Custom Elements &amp; Shadow DOM:<\/strong> Native Web Components allow encapsulating HTML, CSS, and interactive logic into reusable tags without external dependencies or build-step compilation.<\/li>\r\n\r\n\r\n\r\n<li><strong>HTML <code>&lt;template&gt;<\/code> Tags:<\/strong> Browser-native cloning of DOM fragments executes instantaneously without requiring JSX transpilation or client-side templating engines.<\/li>\r\n\r\n\r\n\r\n<li><strong>Event Delegation:<\/strong> Attaching unified event listeners to parent containers eliminates memory leaks and simplifies dynamic element management.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/\/ Example: Pragmatic UI component rendered cleanly via native DOM cloning\r\nclass CustomStatusBadge extends HTMLElement {\r\n  connectedCallback() {\r\n    const status = this.getAttribute('data-status') || 'idle';\r\n    this.innerHTML = `\r\n      &lt;span class=\"badge badge-${status}\"&gt;\r\n        &lt;span class=\"dot\"&gt;&lt;\/span&gt; Status: ${status.toUpperCase()}\r\n      &lt;\/span&gt;\r\n    `;\r\n  }\r\n}\r\ncustomElements.define('status-badge', CustomStatusBadge);<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">3. Maximizing Core Web Vitals Through Zero-Dependency Architecture<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pragmatic engineering prioritizes delivery speed and deterministic code execution over framework abstraction layers. Eliminating multi-kilobyte vendor libraries ensures that web pages parse, execute, and render immediately upon HTML delivery. Combining native DOM selectors (<code>querySelector<\/code>), CSS Grid layouts, and Vanilla JavaScript controllers creates highly responsive, maintainable SaaS user interfaces that achieve perfect Core Web Vitals metrics without architectural complexity.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Summary<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Modern browser engines no longer require heavy JavaScript frameworks to construct responsive, maintainable user interfaces. Relying on Vanilla JavaScript, native Web Components, and direct DOM manipulation eliminates bundle bloat, prevents main-thread blocking, and ensures superior Core Web Vitals performance across all devices.<\/p>\r\n\n\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\" target=\"_blank\" rel=\"noopener noreferrer\">MDN Web Docs<\/a><\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Pragmatic engineering analysis: achieving optimal Core Web Vitals and full code control using Vanilla JavaScript and native DOM APIs instead of heavy frameworks.<\/p>\n","protected":false},"author":1,"featured_media":11665,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[148],"tags":[91312,91094,91315,91115],"class_list":["post-8846","post","type-post","status-publish","format-standard","hentry","category-web-development","tag-javascript","tag-seo","tag-web-performance","tag-web-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#039;t Need React - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#039;t Need React - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Pragmatic engineering analysis: achieving optimal Core Web Vitals and full code control using Vanilla JavaScript and native DOM APIs instead of heavy frameworks.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-23T05:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"luky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"luky\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React\",\"datePublished\":\"2026-08-23T05:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/\"},\"wordCount\":442,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png\",\"keywords\":[\"JavaScript\",\"SEO\",\"Web Performance\",\"Web Security\"],\"articleSection\":[\"Web Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/\",\"name\":\"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png\",\"datePublished\":\"2026-08-23T05:30:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png\",\"width\":1200,\"height\":630,\"caption\":\"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/vanilla-javascript-vs-heavy-frameworks-modern-dom\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/author\\\/luky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/","og_locale":"en_US","og_type":"article","og_title":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React - Lukas Wojcik - Blog","og_description":"Pragmatic engineering analysis: achieving optimal Core Web Vitals and full code control using Vanilla JavaScript and native DOM APIs instead of heavy frameworks.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-23T05:30:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png","type":"image\/png"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React","datePublished":"2026-08-23T05:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/"},"wordCount":442,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png","keywords":["JavaScript","SEO","Web Performance","Web Security"],"articleSection":["Web Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/","name":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png","datePublished":"2026-08-23T05:30:00+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-8846-vanilla-javascript-vs-heavy-framewor-c.png","width":1200,"height":630,"caption":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn't Need React"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/vanilla-javascript-vs-heavy-frameworks-modern-dom\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vanilla JavaScript vs. Heavy Frameworks: Why the Modern DOM Doesn&#8217;t Need React"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"],"url":"https:\/\/www.lukaswojcik.com\/blog\/author\/luky\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=8846"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8846\/revisions"}],"predecessor-version":[{"id":10033,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8846\/revisions\/10033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/11665"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=8846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}