{"id":10292,"date":"2026-08-15T01:26:16","date_gmt":"2026-08-14T23:26:16","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/text-code-diff\/"},"modified":"2026-08-15T01:26:16","modified_gmt":"2026-08-14T23:26:16","slug":"text-code-diff","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/","title":{"rendered":"Text &#038; Code Diff"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Two container versions, two config files, two exports: what changed is usually three lines out of two hundred. This comparison finds them line by line, in the browser and without an upload.<\/p>\n<div style=\"display: flex; gap: 14px; flex-wrap: wrap;\">\n<div style=\"flex: 1; min-width: 260px;\">\n            <label for=\"df-links\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Before<\/label><br \/>\n            <textarea id=\"df-links\" class=\"form-control\" style=\"width: 100%; height: 200px; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; font-size: 0.82rem; box-sizing: border-box;\">gtag(&#8216;config&#8217;, &#8216;G-ABC123&#8217;, {<br \/>\n  send_page_view: true,<br \/>\n  anonymize_ip: true<br \/>\n});<\/textarea>\n        <\/div>\n<div style=\"flex: 1; min-width: 260px;\">\n            <label for=\"df-rechts\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">After<\/label><br \/>\n            <textarea id=\"df-rechts\" class=\"form-control\" style=\"width: 100%; height: 200px; padding: 12px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; font-size: 0.82rem; box-sizing: border-box;\">gtag(&#8216;config&#8217;, &#8216;G-ABC123&#8217;, {<br \/>\n  send_page_view: false,<br \/>\n  transport_type: &#8216;beacon&#8217;<br \/>\n});<\/textarea>\n        <\/div>\n<\/p><\/div>\n<div style=\"display: flex; gap: 20px; flex-wrap: wrap; margin-top: 15px; align-items: center;\">\n        <label style=\"display: flex; gap: 8px; align-items: center; cursor: pointer;\"><br \/>\n            <input type=\"checkbox\" id=\"df-leerzeichen\"><br \/>\n            <span style=\"color: var(--text-primary, #e8e8ee); font-size: 0.88rem;\">ignore whitespace<\/span><br \/>\n        <\/label><br \/>\n        <label style=\"display: flex; gap: 8px; align-items: center; cursor: pointer;\"><br \/>\n            <input type=\"checkbox\" id=\"df-gross\"><br \/>\n            <span style=\"color: var(--text-primary, #e8e8ee); font-size: 0.88rem;\">ignore case<\/span><br \/>\n        <\/label><br \/>\n        <label style=\"display: flex; gap: 8px; align-items: center; cursor: pointer;\"><br \/>\n            <input type=\"checkbox\" id=\"df-leerzeilen\"><br \/>\n            <span style=\"color: var(--text-primary, #e8e8ee); font-size: 0.88rem;\">ignore blank lines<\/span><br \/>\n        <\/label>\n    <\/div>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap; margin: 18px 0 0;\">\n        <button id=\"df-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Compare<\/button>\n    <\/div>\n<div id=\"df-ergebnis\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Two container versions, two config files, two exports: what changed is usually three lines out of two hundred. This comparison finds them line by line, in the browser and without an upload.\",\"label_links\":\"Before\",\"label_rechts\":\"After\",\"label_leerzeichen\":\"ignore whitespace\",\"label_gross\":\"ignore case\",\"label_leerzeilen\":\"ignore blank lines\",\"knopf\":\"Compare\",\"h_zusammenfassung\":\"Summary\",\"h_unterschiede\":\"Line by line\",\"h_text\":\"As plain text\",\"z_neu\":\"Added\",\"z_weg\":\"Removed\",\"z_gleich\":\"Unchanged\",\"z_anteil\":\"Share unchanged\",\"gleich_hinweis\":\"Both sides are identical under the chosen settings.\",\"abgeschnitten\":\"Only the first 3000 lines of each side were compared.\",\"hinweis_zeilenweise\":\"The comparison works on whole lines: a changed word shows up as one line removed and one added. Lines that only moved appear twice for the same reason.\"};<\/p>\n<p>    \/\/ --- reine Rechenlogik ---<\/p>\n<p>    const GRENZE = 3000;<\/p>\n<p>    function zeilen(text) {\n        return String(text === undefined || text === null ? '' : text).replace(\/\\r\\n\/g, '\\n').split('\\n');\n    }<\/p>\n<p>    function schluessel(zeile, einstellungen) {\n        let s = String(zeile);\n        if (einstellungen.leerzeichen) { s = s.replace(\/\\s+\/g, ' ').trim(); }\n        if (einstellungen.gross) { s = s.toLowerCase(); }\n        return s;\n    }<\/p>\n<p>    \/**\n     * Laengste gemeinsame Teilfolge, zeilenweise. Der Aufwand waechst mit dem\n     * Produkt beider Laengen, deshalb die Obergrenze.\n     *\/\n    function vergleichen(linksText, rechtsText, einstellungen) {\n        const ergebnis = { ok: false, fehler: '', zeilen: [], neu: 0, weg: 0, gleich: 0, abgeschnitten: false };\n        const e = einstellungen || {};<\/p>\n<p>        let a = zeilen(linksText);\n        let b = zeilen(rechtsText);<\/p>\n<p>        if (e.leerzeilen) {\n            a = a.filter(function (z) { return z.trim() !== ''; });\n            b = b.filter(function (z) { return z.trim() !== ''; });\n        }<\/p>\n<p>        if (a.length > GRENZE || b.length > GRENZE) {\n            a = a.slice(0, GRENZE);\n            b = b.slice(0, GRENZE);\n            ergebnis.abgeschnitten = true;\n        }<\/p>\n<p>        const sa = a.map(function (z) { return schluessel(z, e); });\n        const sb = b.map(function (z) { return schluessel(z, e); });<\/p>\n<p>        \/\/ Tabelle der gemeinsamen Laengen von hinten aufbauen.\n        const tabelle = [];\n        for (let i = 0; i <= sa.length; i++) {\n            tabelle.push(new Array(sb.length + 1).fill(0));\n        }\n        for (let i = sa.length - 1; i >= 0; i--) {\n            for (let j = sb.length - 1; j >= 0; j--) {\n                tabelle[i][j] = sa[i] === sb[j]\n                    ? tabelle[i + 1][j + 1] + 1\n                    : Math.max(tabelle[i + 1][j], tabelle[i][j + 1]);\n            }\n        }<\/p>\n<p>        let i = 0;\n        let j = 0;\n        while (i < sa.length &#038;&#038; j < sb.length) {\n            if (sa[i] === sb[j]) {\n                ergebnis.zeilen.push({ art: 'gleich', text: a[i], links: i + 1, rechts: j + 1 });\n                ergebnis.gleich++;\n                i++;\n                j++;\n            } else if (tabelle[i + 1][j] >= tabelle[i][j + 1]) {\n                ergebnis.zeilen.push({ art: 'weg', text: a[i], links: i + 1, rechts: null });\n                ergebnis.weg++;\n                i++;\n            } else {\n                ergebnis.zeilen.push({ art: 'neu', text: b[j], links: null, rechts: j + 1 });\n                ergebnis.neu++;\n                j++;\n            }\n        }\n        while (i < sa.length) {\n            ergebnis.zeilen.push({ art: 'weg', text: a[i], links: i + 1, rechts: null });\n            ergebnis.weg++;\n            i++;\n        }\n        while (j < sb.length) {\n            ergebnis.zeilen.push({ art: 'neu', text: b[j], links: null, rechts: j + 1 });\n            ergebnis.neu++;\n            j++;\n        }\n\n        ergebnis.gleichAnteil = ergebnis.zeilen.length\n            ? Math.round(ergebnis.gleich \/ ergebnis.zeilen.length * 1000) \/ 10\n            : 100;\n        ergebnis.ok = true;\n        return ergebnis;\n    }\n\n    function alsText(erg) {\n        return erg.zeilen.map(function (z) {\n            return (z.art === 'neu' ? '+ ' : (z.art === 'weg' ? '- ' : '  ')) + z.text;\n        }).join('\\n');\n    }\n\n    if (typeof window !== 'undefined') {\n        window.LW_TEST = window.LW_TEST || {};\n        window.LW_TEST.DF = { vergleichen: vergleichen, alsText: alsText, schluessel: schluessel };\n    }\n\n    \/\/ --- Anbindung an das Dokument ---\n\n    const btn = document.getElementById('df-btn');\n    const out = document.getElementById('df-ergebnis');\n    if (!btn || !out) { return; }\n\n    const KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px; margin-bottom: 18px;';\n    const UEBERSCHRIFT = 'color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 8px;';\n\n    function el(tag, css, inhalt) {\n        const knoten = document.createElement(tag);\n        if (css) { knoten.setAttribute('style', css); }\n        if (inhalt !== undefined &#038;&#038; inhalt !== null) { knoten.textContent = inhalt; }\n        return knoten;\n    }\n\n    function angehakt(id) {\n        const knoten = document.getElementById(id);\n        return knoten ? knoten.checked : false;\n    }\n\n    btn.addEventListener('click', function () {\n        const links = document.getElementById('df-links');\n        const rechts = document.getElementById('df-rechts');\n        if (!links || !rechts) { return; }\n\n        const erg = vergleichen(links.value, rechts.value, {\n            leerzeichen: angehakt('df-leerzeichen'),\n            gross: angehakt('df-gross'),\n            leerzeilen: angehakt('df-leerzeilen')\n        });\n\n        out.textContent = '';\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_zusammenfassung));\n        const kopf = el('div', KASTEN);\n        [[T.z_neu, erg.neu, 'var(--accent, #7ee787)'], [T.z_weg, erg.weg, '#ff6b6b'],\n         [T.z_gleich, erg.gleich, 'var(--text-primary, #e8e8ee)'],\n         [T.z_anteil, erg.gleichAnteil + ' %', 'var(--text-primary, #e8e8ee)']].forEach(function (paar) {\n            const z = el('div', 'display: flex; justify-content: space-between; gap: 14px; padding: 5px 0;');\n            z.appendChild(el('span', 'color: var(--text-secondary, #a0a0b0);', paar[0]));\n            z.appendChild(el('span', 'color: ' + paar[2] + '; font-family: monospace;', String(paar[1])));\n            kopf.appendChild(z);\n        });\n        if (erg.neu === 0 &#038;&#038; erg.weg === 0) {\n            kopf.appendChild(el('div', 'color: var(--accent, #7ee787); padding-top: 8px;', T.gleich_hinweis));\n        }\n        if (erg.abgeschnitten) {\n            kopf.appendChild(el('div', 'color: #ffb86c; padding-top: 8px; font-size: 0.85rem;', T.abgeschnitten));\n        }\n        out.appendChild(kopf);\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_unterschiede));\n        const tabelle = el('div', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 10px; margin-bottom: 18px; overflow-x: auto;');\n        erg.zeilen.forEach(function (z) {\n            const farbe = z.art === 'neu' ? 'var(--accent, #7ee787)' : (z.art === 'weg' ? '#ff6b6b' : 'var(--text-secondary, #a0a0b0)');\n            const hintergrund = z.art === 'neu' ? 'rgba(126, 231, 135, 0.08)' : (z.art === 'weg' ? 'rgba(255, 107, 107, 0.08)' : 'transparent');\n            const zeile = el('div', 'display: flex; gap: 10px; padding: 2px 6px; background: ' + hintergrund + '; font-family: monospace; font-size: 0.8rem; white-space: pre; align-items: baseline;');\n            zeile.appendChild(el('span', 'width: 40px; color: var(--border, #2a2a35); text-align: right; flex-shrink: 0;', z.links === null ? '' : String(z.links)));\n            zeile.appendChild(el('span', 'width: 40px; color: var(--border, #2a2a35); text-align: right; flex-shrink: 0;', z.rechts === null ? '' : String(z.rechts)));\n            zeile.appendChild(el('span', 'width: 12px; color: ' + farbe + '; flex-shrink: 0;', z.art === 'neu' ? '+' : (z.art === 'weg' ? '-' : ' ')));\n            zeile.appendChild(el('span', 'color: ' + farbe + ';', z.text === '' ? ' ' : z.text));\n            tabelle.appendChild(zeile);\n        });\n        out.appendChild(tabelle);\n\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_text));\n        out.appendChild(el('pre', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); padding: 16px; border-radius: 6px; overflow-x: auto; font-family: monospace; font-size: 0.8rem; line-height: 1.5; white-space: pre; margin-bottom: 10px;', alsText(erg)));\n        out.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.85rem;', T.hinweis_zeilenweise));\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Compares two versions line by line, marks what was added and removed, and can ignore whitespace, case and blank lines.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[91144],"class_list":["post-10292","page","type-page","status-publish","hentry","tag-devops"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Text &amp; Code Diff - 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\/toolbox\/text-code-diff\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Text &amp; Code Diff - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Compares two versions line by line, marks what was added and removed, and can ignore whitespace, case and blank lines.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/text-code-diff\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/text-code-diff\\\/\",\"name\":\"Text & Code Diff - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-14T23:26:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/text-code-diff\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/text-code-diff\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/text-code-diff\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Text &#038; Code Diff\"}]},{\"@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\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Text & Code Diff - 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\/toolbox\/text-code-diff\/","og_locale":"en_US","og_type":"article","og_title":"Text & Code Diff - Lukas Wojcik - Blog","og_description":"Compares two versions line by line, marks what was added and removed, and can ignore whitespace, case and blank lines.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/","name":"Text & Code Diff - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-14T23:26:16+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/text-code-diff\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"Text &#038; Code Diff"}]},{"@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"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"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=10292"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10292\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10292"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}