
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Kamil Owczarek | Senior Full-Stack Engineer</title>
      <link>https://whoisarjen.com/pl/blog</link>
      <description>Senior Full-Stack Engineer specjalizujący się w wydajnym e-commerce, skalowalnej architekturze i optymalizacji wydajności. TypeScript, React, Next.js, Vue, Nuxt, PostgreSQL, Redis.</description>
      <language>pl</language>
      <managingEditor>kamilow97@gmail.com (Kamil Owczarek)</managingEditor>
      <webMaster>kamilow97@gmail.com (Kamil Owczarek)</webMaster>
      <lastBuildDate>Mon, 06 Apr 2026 13:00:00 GMT</lastBuildDate>
      <atom:link href="https://whoisarjen.com/pl/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://whoisarjen.com/pl/blog/lazy-loading-toast-library-bundle-optimization</guid>
    <title>Jak zdjęliśmy 22 KB z entry bundle&#39;a, lazy-loadując bibliotekę do toastów</title>
    <link>https://whoisarjen.com/pl/blog/lazy-loading-toast-library-bundle-optimization</link>
    <description>vue3-toastify lądował w entry chunku każdej strony — także tych, które nigdy nie pokazują toasta. Composable z dynamicznym importem przeniósł go do osobnego chunka ładowanego przy pierwszym użyciu, zdejmując 22 KB z entry.js i 9 KB z entry.css.</description>
    <pubDate>Mon, 06 Apr 2026 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Vue</category><category>Nuxt</category><category>Bundle Optimization</category><category>Dynamic Import</category><category>TypeScript</category><category>Web Vitals</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/parallel-ssr-data-fetching-vue-onserverprefetch</guid>
    <title>Usunęliśmy jedną linijkę kodu i nasz SSR przyspieszył trzykrotnie</title>
    <link>https://whoisarjen.com/pl/blog/parallel-ssr-data-fetching-vue-onserverprefetch</link>
    <description>Jak pojedynczy inline&#39;owy await w naszym composable&#39;u Vue po cichu serializował całe pobieranie danych podczas renderowania na serwerze i jak onServerPrefetch naprawił to bez żadnych zmian w architekturze.</description>
    <pubDate>Mon, 06 Apr 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue</category><category>SSR</category><category>Performance</category><category>Nuxt</category><category>TanStack Query</category><category>TypeScript</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/redirect-constants-client-bundle-bloat-server-migration</guid>
    <title>3842 linie stałych z przekierowaniami ukrywały się w naszym client bundle</title>
    <link>https://whoisarjen.com/pl/blog/redirect-constants-client-bundle-bloat-server-migration</link>
    <description>Jak odkryliśmy, że trzy pliki ze stałymi przekierowań wysyłają 316 KB martwego balastu do każdej przeglądarki, i dlaczego przeniesienie ich do server middleware z fallbackiem w bazie ucięło nasz bundle JavaScriptu o jedną trzecią.</description>
    <pubDate>Mon, 06 Apr 2026 11:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>JavaScript</category><category>Performance</category><category>Bundle Size</category><category>SEO</category><category>Redirects</category><category>Server-Side</category><category>Nuxt</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/responsive-images-sizes-attribute-performance</guid>
    <title>Atrybut sizes to najskuteczniejsza optymalizacja obrazów, której nie używasz</title>
    <link>https://whoisarjen.com/pl/blog/responsive-images-sizes-attribute-performance</link>
    <description>Odkryliśmy, że nasz pipeline optymalizacji obrazów generował idealne wartości srcset, które przeglądarka całkowicie ignorowała. Naprawą okazał się pojedynczy atrybut HTML, który od lat traktowaliśmy jako opcjonalny.</description>
    <pubDate>Mon, 06 Apr 2026 10:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Images</category><category>Web Vitals</category><category>Responsive Design</category><category>Nuxt</category><category>Frontend</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/history-replacestate-vs-router-replace-url-canonicalization</guid>
    <title>Przestań używać Router.replace() do kanonikalizacji adresów — sięgnij po History.replaceState()</title>
    <link>https://whoisarjen.com/pl/blog/history-replacestate-vs-router-replace-url-canonicalization</link>
    <description>Przepalaliśmy pełne cykle nawigacji Vue Routera tylko po to, żeby poprawić slug w adresie karty produktu. Zamiana router.replace() na history.replaceState() wycięła zbędne re-rendery, naprawiła popsute meta tagi SEO i sprowadziła kanonikalizację po stronie klienta do jednego wywołania, które nie dotyka DOM-u.</description>
    <pubDate>Mon, 06 Apr 2026 09:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue.js</category><category>Performance</category><category>SEO</category><category>Nuxt</category><category>URL Canonicalization</category><category>SSR</category><category>Router</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/replacing-redis-with-postgres-cache-migration</guid>
    <title>Zastąpiliśmy Redisa PostgreSQL-em w cache&#39;owaniu — oto co z tego wyszło</title>
    <link>https://whoisarjen.com/pl/blog/replacing-redis-with-postgres-cache-migration</link>
    <description>Nasz cache na Redisie ciągle zrywał połączenia TLS, kładąc całą warstwę cache&#39;owania. Po benchmarku, który omal nie wysłał nas w złą stronę, przenieśliśmy się na PostgreSQL — ta sama wydajność, zero dropów, o jeden serwis mniej do utrzymania.</description>
    <pubDate>Mon, 06 Apr 2026 08:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Caching</category><category>PostgreSQL</category><category>Redis</category><category>Performance</category><category>Architecture</category><category>Serverless</category><category>Migration</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/hmac-timestamp-tokens-zero-trust-service-communication</guid>
    <title>Tokeny HMAC z timestampem: komunikacja zero-trust między twoimi własnymi serwisami</title>
    <link>https://whoisarjen.com/pl/blog/hmac-timestamp-tokens-zero-trust-service-communication</link>
    <description>Jak zabezpieczyliśmy komunikację między serwisami tokenami podpisanymi HMAC-SHA256, które wygasają po 10 sekundach — bez stanu sesji, bez kluczy API do rotowania, bez odpytywania bazy w middleware.</description>
    <pubDate>Sun, 15 Mar 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Security</category><category>HMAC</category><category>Architecture</category><category>Node.js</category><category>TypeScript</category><category>Microservices</category><category>Authentication</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/splitting-monolith-into-services-fix-api-bugs</guid>
    <title>Kiedy podwojenie pamięci serwera to zły fix: jak rozdzielenie serwisów zakończyło nasz kryzys OOM</title>
    <link>https://whoisarjen.com/pl/blog/splitting-monolith-into-services-fix-api-bugs</link>
    <description>Nasza monolityczna aplikacja Nuxt regularnie wykładała się na limicie 2 GB pamięci. Podbiliśmy go do 4 GB — dwa razy drożej, ten sam problem u podstaw. Po pięciu dniach nieudanych optymalizacji (kompresja strumieniowa, polling po Redisie, cache SWR) rozbiliśmy monolit na trzy niezależne serwisy. Każdy dostał własne 2 GB, łączny koszt spadł, a crashe się skończyły.</description>
    <pubDate>Sat, 14 Mar 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Architecture</category><category>Nuxt</category><category>Nitro</category><category>Memory</category><category>Performance</category><category>Serverless</category><category>Vercel</category><category>TypeScript</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/the-api-payload-trap-why-your-server-shouldnt-touch-the-bytes</guid>
    <title>Pułapka payloadu w API: dlaczego twój serwer nie powinien dotykać bajtów</title>
    <link>https://whoisarjen.com/pl/blog/the-api-payload-trap-why-your-server-shouldnt-touch-the-bytes</link>
    <description>Jak zastąpienie proxowania odpowiedzi API redirectami 307 do podpisanych URL-i CDN wyzerowało koszty transferu na origin i usunęło całą klasę bugów ze streamowaniem.</description>
    <pubDate>Wed, 11 Mar 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>CDN</category><category>Performance</category><category>Architecture</category><category>API Design</category><category>Node.js</category><category>Caching</category><category>Security</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/hidden-languages-wasting-vercel-budget-seo-fix</guid>
    <title>Jak nieopublikowane języki po cichu drenowały nasz budżet na Vercelu i zabiły wydajność na mobile</title>
    <link>https://whoisarjen.com/pl/blog/hidden-languages-wasting-vercel-budget-seo-fix</link>
    <description>Dodaliśmy arabski i portugalski do naszej konfiguracji i18n w Nuxcie, ale zablokowaliśmy je na produkcji. Problem? Sitemapy, tagi hreflang i crawlery nic o tym nie wiedziały — generując tysiące bezużytecznych URL-i, podwajając liczbę zapytań do API i przepalając wywołania funkcji serverless.</description>
    <pubDate>Sat, 14 Feb 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt</category><category>i18n</category><category>Vercel</category><category>SEO</category><category>Performance</category><category>Sitemap</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/css-radial-gradient-scroll-lag-svg-fix</guid>
    <title>Jak CSS-owy radial-gradient zabił mi płynność scrollowania (i jednolinijkowa poprawka na SVG)</title>
    <link>https://whoisarjen.com/pl/blog/css-radial-gradient-scroll-lag-svg-fix</link>
    <description>Powtarzalny radial-gradient, który świetnie wyglądał w projekcie, zamienił moją stronę w ociężałego potworka. Oto jak namierzyłem winowajcę i naprawiłem go inline SVG w data URI — zero różnicy wizualnej, płynne 60 klatek na sekundę.</description>
    <pubDate>Thu, 12 Feb 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>CSS</category><category>Performance</category><category>SVG</category><category>Nuxt</category><category>Web Vitals</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/optimizing-api-responses-removing-redundant-data</guid>
    <title>Odchudziłem odpowiedzi API o 60%: ukryty koszt spreadowania obiektów</title>
    <link>https://whoisarjen.com/pl/blog/optimizing-api-responses-removing-redundant-data</link>
    <description>Jak zwykły destructuring usunął zbędne obiekty tłumaczeń z odpowiedzi API, odciążył cache i przyspieszył frontend.</description>
    <pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>TypeScript</category><category>API Design</category><category>Performance</category><category>Caching</category><category>Redis</category><category>Nuxt</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/smart-swr-caching-user-context-aware-freshness</guid>
    <title>Inteligentny cache SWR: świeżość danych zależna od kontekstu użytkownika w e-commerce</title>
    <link>https://whoisarjen.com/pl/blog/smart-swr-caching-user-context-aware-freshness</link>
    <description>Jak wdrożyć cache Stale-While-Revalidate, który dostosowuje się do typu użytkownika i wrażliwości endpointu. Klienci B2B dostają świeże stany magazynowe, a anonimowi odwiedzający szybsze odpowiedzi z cache.</description>
    <pubDate>Sun, 28 Dec 2025 19:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Caching</category><category>SWR</category><category>Performance</category><category>E-commerce</category><category>Node.js</category><category>TypeScript</category><category>Redis</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/redis-cache-compression-6x-capacity-1gb-server</guid>
    <title>6x więcej pojemności cache: kompresja Redisa na serwerze 1 GB</title>
    <link>https://whoisarjen.com/pl/blog/redis-cache-compression-6x-capacity-1gb-server</link>
    <description>Jak upchnęliśmy 6x więcej wpisów cache w instancji Redisa o rozmiarze 1 GB, używając kompresji gzip i zachowując przy tym type safety oraz narzut poniżej milisekundy.</description>
    <pubDate>Sun, 28 Dec 2025 18:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Redis</category><category>Performance</category><category>Caching</category><category>Compression</category><category>Node.js</category><category>TypeScript</category><category>Nuxt 3</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-ssr-cache-hostname-bug</guid>
    <title>Subtelny bug cache&#39;owania w SSR, który fragmentuje cache: dlaczego url.hostname kłamie podczas renderowania na serwerze</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-ssr-cache-hostname-bug</link>
    <description>Jak pozornie poprawny cache key oparty na url.hostname prowadzi do fragmentacji cache&#39;u między requestami SSR a tymi z przeglądarki i drastycznie obniża cache hit rate w aplikacjach Nuxt/Nitro.</description>
    <pubDate>Sun, 28 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt</category><category>SSR</category><category>Caching</category><category>Performance</category><category>Nitro</category><category>TypeScript</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/timestamp-based-cache-invalidation-swr</guid>
    <title>Inwalidacja cache&#39;a w O(1): flagi z timestampem zamiast kasowania kluczy</title>
    <link>https://whoisarjen.com/pl/blog/timestamp-based-cache-invalidation-swr</link>
    <description>Jak zastąpiliśmy powolne czyszczenie cache&#39;a po kluczach natychmiastową inwalidacją opartą na timestampach, nie tracąc przy tym wydajności SWR.</description>
    <pubDate>Sun, 28 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Redis</category><category>Caching</category><category>Nuxt 3</category><category>Architecture</category><category>SWR</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/prisma-enum-client-side-import-issue</guid>
    <title>Ukryte niebezpieczeństwo importowania enumów Prismy w kodzie client-side</title>
    <link>https://whoisarjen.com/pl/blog/prisma-enum-client-side-import-issue</link>
    <description>Dlaczego importowanie enumów Prismy bezpośrednio w kodzie client-side psuje produkcyjne buildy i jaki wzorzec ze stałymi to naprawia.</description>
    <pubDate>Sun, 24 Aug 2025 14:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>prisma</category><category>typescript</category><category>bundling</category><category>build-errors</category><category>frontend</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/postgresql-pagination-consistency-different-limit-values</guid>
    <title>Dlaczego różne wartości LIMIT zwracają różne wyniki w PostgreSQL (i jak to naprawić)</title>
    <link>https://whoisarjen.com/pl/blog/postgresql-pagination-consistency-different-limit-values</link>
    <description>Dogłębne spojrzenie na niespójną paginację w PostgreSQL i na to, dlaczego deterministyczne sortowanie w złożonych zapytaniach jest tak ważne — bo nasi użytkownicy dostawali od tego szału</description>
    <pubDate>Sun, 10 Aug 2025 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Database</category><category>Pagination</category><category>SQL</category><category>Performance</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-disable-prefetch-save-costs</guid>
    <title>Jak uciąłem kosztowne skoki transferu, wyłączając prefetch linków w Nuxcie</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-disable-prefetch-save-costs</link>
    <description>Optymalizując projekt w Nuxt 3, odkryłem, że nadmierny automatyczny prefetch napędzał zużycie transferu na Vercelu. Globalne wyłączenie prefetcha mocno ścięło koszty i ruch sieciowy.</description>
    <pubDate>Sat, 09 Aug 2025 18:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt 3</category><category>Performance</category><category>Prefetch</category><category>Vercel</category><category>Optimization</category><category>Vue</category><category>Bandwidth</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-fontawesome-bundle-cost</guid>
    <title>Jak odziedziczyłem problem z Font Awesome za 50 dolarów dziennie w Nuxt 3</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-fontawesome-bundle-cost</link>
    <description>Przejąłem projekt w Nuxt 3, który zjadał ponad 50 dolarów dziennie na transferze w Vercelu. Winowajca? Jeden import z gwiazdką, który wciągał do bundle&#39;a całą bibliotekę Font Awesome. Oto jak go znalazłem i naprawiłem.</description>
    <pubDate>Sat, 09 Aug 2025 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt 3</category><category>Font Awesome</category><category>Performance</category><category>Vercel</category><category>Vue</category><category>Optimization</category><category>Bundle Size</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/92-percent-smaller-bundle-translation-optimization</guid>
    <title>92% mniejszy bundle: jak inteligentne ładowanie tłumaczeń odmieniło naszą międzynarodową stronę</title>
    <link>https://whoisarjen.com/pl/blog/92-percent-smaller-bundle-translation-optimization</link>
    <description>Od czerwonych wyników w Lighthouse do soczystej zieleni: technika lazy loadingu, która ścięła początkowy bundle o 92% i podniosła wydajność o 47%</description>
    <pubDate>Sat, 09 Aug 2025 10:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Optimization</category><category>Lighthouse</category><category>i18n</category><category>Lazy Loading</category><category>Bundle Size</category><category>Nuxt 3</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/ai-search-bar-technical-deep-dive</guid>
    <title>Wyszukiwarka, która sprawia wrażenie AI: techniczny deep dive</title>
    <link>https://whoisarjen.com/pl/blog/ai-search-bar-technical-deep-dive</link>
    <description>Jak zbudowaliśmy wielowarstwowy system wyszukiwania, który rozumie intencję użytkownika, radzi sobie z literówkami i dostarcza trafne wyniki w 9 językach, korzystając z PostgreSQL, TypeScriptu i sprytnych algorytmów</description>
    <pubDate>Mon, 21 Jul 2025 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Search</category><category>AI</category><category>E-commerce</category><category>Full-text Search</category><category>TypeScript</category><category>Performance</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/generic-carousel-vue3-typescript</guid>
    <title>Generyczny komponent karuzeli w Vue 3 i TypeScript</title>
    <link>https://whoisarjen.com/pl/blog/generic-carousel-vue3-typescript</link>
    <description>Jak wykorzystać generics w Vue 3, żeby zbudować type-safe komponent karuzeli obsługujący produkty, banery, strefy i wszystko inne — bez duplikowania kodu.</description>
    <pubDate>Tue, 01 Jul 2025 19:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue 3</category><category>TypeScript</category><category>Components</category><category>Generics</category><category>Carousel</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/megamenu-50-commits-lessons-learned</guid>
    <title>MegaMenu, które zajęło 50 commitów: lekcja o złożoności komponentów</title>
    <link>https://whoisarjen.com/pl/blog/megamenu-50-commits-lessons-learned</link>
    <description>Czego 50 commitów w jednym komponencie Vue przez 3 miesiące nauczyło mnie o iteracyjnym rozwoju, właściwym momencie na refactor i panowaniu nad złożonością.</description>
    <pubDate>Sun, 22 Jun 2025 18:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue</category><category>Components</category><category>Refactoring</category><category>Software Engineering</category><category>Iteration</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/seo-aware-links-automatic-nofollow-nuxtlink</guid>
    <title>Linki świadome SEO: automatyczny nofollow dla parametrów query w Nuxt</title>
    <link>https://whoisarjen.com/pl/blog/seo-aware-links-automatic-nofollow-nuxtlink</link>
    <description>Gotowy wrapper na NuxtLink, który automatycznie dodaje rel=&quot;nofollow&quot; do linków z parametrami query i zapobiega wyciekaniu PageRank na przefiltrowanych i sparametryzowanych URL-ach.</description>
    <pubDate>Thu, 12 Jun 2025 17:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>SEO</category><category>Nuxt 3</category><category>Vue</category><category>Component</category><category>PageRank</category><category>Links</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/timezone-safe-datetime-global-applications</guid>
    <title>Obsługa daty i czasu odporna na strefy czasowe w aplikacjach globalnych</title>
    <link>https://whoisarjen.com/pl/blog/timezone-safe-datetime-global-applications</link>
    <description>Prosty kontrakt między frontendem a backendem na obsługę daty i czasu, który eliminuje bugi w harmonogramowaniu między strefami i uniezależnia aplikację od lokalizacji serwera.</description>
    <pubDate>Thu, 05 Jun 2025 16:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>DateTime</category><category>Timezone</category><category>UTC</category><category>JavaScript</category><category>Architecture</category><category>i18n</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/git-worktrees-vercel-cli-fix</guid>
    <title>Git worktrees i Vercel CLI: jak naprawić niekompatybilność</title>
    <link>https://whoisarjen.com/pl/blog/git-worktrees-vercel-cli-fix</link>
    <description>Git worktrees świetnie sprawdzają się przy równoległej pracy nad kilkoma branchami, ale Vercel CLI się w nich wywala. Oto poprawka dla monorepo opartego na Nuxcie.</description>
    <pubDate>Wed, 28 May 2025 15:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Git</category><category>Worktrees</category><category>Vercel</category><category>Monorepo</category><category>Turbo</category><category>Productivity</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-chunk-loading-errors-auto-reload</guid>
    <title>Obsługa błędów ładowania chunków po deployu w Nuxt 3</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-chunk-loading-errors-auto-reload</link>
    <description>Dlaczego po deployu użytkownicy dostają błędy 403 na plikach JavaScript i jak naprawia to plugin Nuxta w pięciu linijkach.</description>
    <pubDate>Tue, 20 May 2025 14:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt 3</category><category>Deployment</category><category>CDN</category><category>Production</category><category>Error Handling</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/core-web-vitals-nuxt3-lcp-cls-fixes</guid>
    <title>Naprawa Core Web Vitals w Nuxt 3: szybkie wygrane w LCP i CLS</title>
    <link>https://whoisarjen.com/pl/blog/core-web-vitals-nuxt3-lcp-cls-fixes</link>
    <description>Proste zmiany, które naprawiają Largest Contentful Paint i Cumulative Layout Shift w Nuxt 3. Preconnect, wymiary obrazków i ukryci zabójcy wydajności.</description>
    <pubDate>Mon, 12 May 2025 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Core Web Vitals</category><category>Performance</category><category>Nuxt 3</category><category>LCP</category><category>CLS</category><category>SEO</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/postgresql-cte-optimization-60-percent-faster-search</guid>
    <title>Wyszukiwarka szybsza o 60-80%: optymalizacja CTE w PostgreSQL pod Node.js</title>
    <link>https://whoisarjen.com/pl/blog/postgresql-cte-optimization-60-percent-faster-search</link>
    <description>Trzy antywzorce SQL, które zabijały wydajność naszej wyszukiwarki, i optymalizacje CTE, które to naprawiły.</description>
    <pubDate>Mon, 05 May 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Performance</category><category>SQL</category><category>Node.js</category><category>Prisma</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/fixing-youtube-error-153-gdpr-compliant</guid>
    <title>Naprawa błędu YouTube 153: sposób zgodny z RODO</title>
    <link>https://whoisarjen.com/pl/blog/fixing-youtube-error-153-gdpr-compliant</link>
    <description>Jak naprawić błąd 153 przy odtwarzaniu osadzonych filmów z YouTube, przechodząc na youtube-nocookie.com, i przy okazji zyskać na wydajności oraz prywatności.</description>
    <pubDate>Tue, 22 Apr 2025 11:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>YouTube</category><category>GDPR</category><category>Privacy</category><category>Performance</category><category>Vue</category><category>Nuxt 3</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/sitemap-exclusion-bug-that-hid-all-products</guid>
    <title>Bug w sitemapie, który ukrył wszystkie nasze produkty przed Google</title>
    <link>https://whoisarjen.com/pl/blog/sitemap-exclusion-bug-that-hid-all-products</link>
    <description>Jak 10 linijek konfiguracji po cichu zablokowało tysiące stron produktowych przed indeksowaniem w Google i jakie zaskakujące zachowanie nuxtjs/sitemap za tym stało.</description>
    <pubDate>Tue, 15 Apr 2025 10:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>SEO</category><category>Nuxt 3</category><category>Sitemap</category><category>Debugging</category><category>i18n</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/setting-up-a-turborepo-prisma-nuxt-environment-without-import-issues-on-vercel</guid>
    <title>Konfiguracja środowiska Turborepo + Prisma + Nuxt bez problemów z importami na Vercelu</title>
    <link>https://whoisarjen.com/pl/blog/setting-up-a-turborepo-prisma-nuxt-environment-without-import-issues-on-vercel</link>
    <description>Jak próbowałem różnych podejść do konfiguracji środowiska Turborepo + Prisma + Nuxt i jakie rozwiązanie ostatecznie zadziałało na Vercelu.</description>
    <pubDate>Tue, 18 Mar 2025 14:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>turborepo</category><category>prisma</category><category>nuxt</category><category>vercel</category><category>monorepo</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/how-i-resolved-prisma-issues-and-fixed-vercel-500-internal-server-error</guid>
    <title>Jak rozwiązałem problemy z Prismą i naprawiłem Vercel 500 INTERNAL_SERVER_ERROR</title>
    <link>https://whoisarjen.com/pl/blog/how-i-resolved-prisma-issues-and-fixed-vercel-500-internal-server-error</link>
    <description>Po tych poprawkach aplikacja ruszyła na Vercelu bez zarzutu. W końcu mogłem się położyć spać.</description>
    <pubDate>Mon, 27 May 2024 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>prisma</category><category>vercel</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/the-power-of-typescript-satisfied-operator-in-less-than-2-minutes</guid>
    <title>Moc operatora satisfies w TypeScripcie w mniej niż 2 minuty</title>
    <link>https://whoisarjen.com/pl/blog/the-power-of-typescript-satisfied-operator-in-less-than-2-minutes</link>
    <description>Zapamiętaj, drogi devie: satisfies sprawdza typ obiektu, nie wpływając na wnioskowanie TypeScriptu, i powinien być jednym z twoich głównych sprzymierzeńców przy typowaniu stałych obiektów.</description>
    <pubDate>Sat, 25 May 2024 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>typescript</category><category>guide</category>
  </item>

    </channel>
  </rss>
