<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kliku Kliku</title><link>https://klikukliku.dev/pl/</link><description>Recent content on Kliku Kliku</description><generator>Hugo</generator><language>pl</language><lastBuildDate>Tue, 24 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://klikukliku.dev/pl/index.xml" rel="self" type="application/rss+xml"/><item><title>Framework dla naszej uwagi, czyli technika Pomodoro</title><link>https://klikukliku.dev/pl/posts/pomodoro-technique/</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/pomodoro-technique/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Zastanawialiście się kiedyś, dlaczego po kilku godzinach ciągłego pisania kodu nasza produktywność drastycznie spada? Zauważyłem u siebie, że największym wrogiem skupienia nie jest brak wiedzy. Jest nim ciągłe przełączanie kontekstu. Komunikatory, maile i szybkie pytania od kolegów wybijają nas z rytmu. Postanowiłem poszukać rozwiązania i przez ostatnie tygodnie testowałem technikę Pomodoro. Chcę się dzisiaj podzielić z wami moimi wnioskami.&lt;/p&gt;
&lt;h2 id="na-czym-polega-to-podejście"&gt;Na czym polega to podejście?&lt;/h2&gt;
&lt;p&gt;Zasada działania jest bardzo prosta. Dzielimy nasz czas pracy na mniejsze, sztywno określone bloki. Najczęściej jest to dwadzieścia pięć minut pełnego skupienia na wyłącznie jednym zadaniu. W tym czasie wyciszamy powiadomienia i nie sprawdzamy poczty.&lt;/p&gt;</description></item><item><title>OpenCode wewnątrz Dockera: Jak bezpiecznie uruchamiać AI w lokalnym terminalu?</title><link>https://klikukliku.dev/pl/posts/opencode-in-docer-container/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/opencode-in-docer-container/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Ostatnio przyglądałem się tematowi bezpiecznego uruchamiania narzędzi AI bezpośrednio w naszym lokalnym środowisku. Narzędzia typu OpenCode są świetne, ale dają algorytmom dużą swobodę w operowaniu na naszych plikach. Zwykle kieruje się zasadą ograniczonego zaufania co skłoniło mnie do podjęcia próby zamknięcia opencode w kontenerze z dostępem do niezbędnych plików i katalogów.&lt;/p&gt;
&lt;h2 id="dlaczego-izolacja-ma-znaczenie"&gt;Dlaczego izolacja ma znaczenie?&lt;/h2&gt;
&lt;p&gt;Kiedy pozwalamy modelom AI generować i uruchamiać kod, de facto oddajemy im częściową kontrolę nad terminalem. Nawet jeśli ufamy dostawcy, błąd w wygenerowanym skrypcie może narobić bałaganu w systemie plików. Rozwiązanie? &lt;strong&gt;Konteneryzacja&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Komentarze Cusdis w Hugo: lekkie rozwiązanie bez trackingu</title><link>https://klikukliku.dev/pl/posts/hugo-comments-cusdis/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-comments-cusdis/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Przeglądając systemy komentarzy do blogów statycznych, wziąłem na warsztat Cusdis — bo obiecuje podejście „minimum tarcia”: prosty widget, bez reklam i bez ciężkiej analityki w tle. Cusdis pozycjonuje się jako lekka, prywatnościowa alternatywa dla Disqus i jest rozwijany jako projekt open source, z opcją self-hostingu oraz wariantem zarządzanym na cusdis.com. Szczegółowy przewodnik po self-hostingu Cusdis znajdziesz w dedykowanym wpisie: &lt;a href="https://klikukliku.dev/pl/posts/cusdis-self-hosted-vps"&gt;Self-Hosting Cusdis na VPS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Moim celem było sprawdzić dwie rzeczy: jak wygląda sensowna integracja z Hugo (bez wklejania skryptów „na dziko”) oraz jaki realny narzut pojawia się na stronie, gdy komentarze są włączone.&lt;/p&gt;</description></item><item><title>Stylowanie Cusdis: Jak przejąć kontrolę nad iframe bez modyfikowania źródła</title><link>https://klikukliku.dev/pl/posts/cusdis-custom-styles/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/cusdis-custom-styles/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Ostatnio przyglądałem się implementacji systemu komentarzy opartego na Cusdis. To lekkie i privacy-friendly rozwiązanie, ale ma jedną cechę, która z perspektywy UI jest wyzwaniem: widget renderuje się wewnątrz &lt;code&gt;iframe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Co to dla nas oznacza? Iframe tworzy odizolowane środowisko. Style CSS, które mamy w naszym projekcie, nie &amp;ldquo;przeciekają&amp;rdquo; do środka. W efekcie, jeśli nasz layout ma specyficzny branding, domyślny, minimalistyczny wygląd Cusdis będzie wyglądał jak ciało obce.&lt;/p&gt;
&lt;p&gt;Przeanalizowałem ten temat i znalazłem sposób, by to obejść, zachowując czystość kodu.&lt;/p&gt;</description></item><item><title>Self-hosting Cusdis z Caddy na VPS</title><link>https://klikukliku.dev/pl/posts/cusdis-self-hosted-vps/</link><pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/cusdis-self-hosted-vps/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Kiedy szukałem systemu komentarzy, szybko zdałem sobie sprawę, że większość dostępnych rozwiązań albo śledzi użytkowników, albo wymaga ciężkiego JavaScriptu, albo po prostu kosztuje. Cusdis wyróżnia się na tym tle. Jest lekki, open-source i od początku zaprojektowany z myślą o self-hostingu.&lt;/p&gt;
&lt;p&gt;W tym wpisie pokazuję, jak wdrożyć Cusdis na dowolnym VPS, używając Dockera i Caddy jako reverse proxy, z poprawnie skonfigurowanym CORS-em.&lt;/p&gt;
&lt;h2 id="dlaczego-cusdis"&gt;Dlaczego Cusdis?&lt;/h2&gt;
&lt;p&gt;Zanim przejdę do konfiguracji, kilka słów o tym, co skłoniło mnie do wyboru właśnie tego narzędzia:&lt;/p&gt;</description></item><item><title>Komentarze Giscus w Hugo: Lekka Integracja z GitHub Discussions</title><link>https://klikukliku.dev/pl/posts/hugo-comments-giscus/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-comments-giscus/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;W ramach przeglądu rozwiązań do obsługi komentarzy na blogach statycznych, wziąłem na warsztat &lt;strong&gt;Giscus&lt;/strong&gt;. To narzędzie typu open-source, które wykorzystuje GitHub Discussions jako swój backend.&lt;/p&gt;
&lt;p&gt;Zaintrygowała mnie przede wszystkim obietnica wydajności i prywatności.Poniżej przedstawiam analizę tego rozwiązania, instrukcję implementacji w Hugo oraz wnioski z testów wydajnościowych.&lt;/p&gt;
&lt;h2 id="czym-właściwie-jest-giscus"&gt;Czym właściwie jest Giscus?&lt;/h2&gt;
&lt;p&gt;Giscus to widget, który łączy Twoją stronę bezpośrednio z API GitHuba. Kiedy czytelnik zostawia komentarz pod wpisem, system automatycznie tworzy nową dyskusję (lub dopisuje odpowiedź) w powiązanym repozytorium na GitHubie.&lt;/p&gt;</description></item><item><title>Komentarze Disqus w Hugo: Przewodnik po Integracji i Analiza Wydajności</title><link>https://klikukliku.dev/pl/posts/hugo-comments-disqus/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-comments-disqus/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Disqus to prawdopodobnie pierwsze rozwiązanie, które przychodzi nam do głowy, gdy myślimy o komentarzach na stronach statycznych. Jest z nami od 2007 roku, obsługuje miliony witryn i zdejmuje z nas ciężar tworzenia własnego backendu.&lt;/p&gt;
&lt;p&gt;Postanowiłem sprawdzić, jak wygląda jego integracja z Hugo w 2026 roku, ale przede wszystkim, jaki jest rzeczywisty koszt tej wygody. Przeprowadziłem testy wydajnościowe na tym blogu i wyniki mogą was zaskoczyć.&lt;/p&gt;
&lt;h2 id="czym-właściwie-jest-disqus"&gt;Czym właściwie jest Disqus?&lt;/h2&gt;
&lt;p&gt;W skrócie: to „komentarze jako usługa”. My dostarczamy statyczny frontend, a Disqus bierze na siebie całą brudną robotę: hosting bazy danych, walkę ze spamem, moderację i logowanie użytkowników (Google, Facebook, Twitter).&lt;/p&gt;</description></item><item><title>Optymalizacja wydajności w Hugo. Kompletny przewodnik</title><link>https://klikukliku.dev/pl/posts/hugo-performance-summary/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-performance-summary/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Przez ostatnie tygodnie przeszedłem przez kompleksową optymalizację mojej strony. Zaczęło się od prostej ciekawości czy da się wycisnąć więcej z tego generatora stron statycznych — a skończyło na serii eksperymentów, które dały wymierne rezultaty.&lt;/p&gt;
&lt;p&gt;Punkt wyjścia był naprawdę przyzwoity. Hugo z definicji generuje szybkie strony. Mój wynik w Lighthouse oscylował gdzieś między 92 a 94 punktami. Ale kiedy zagłębiłem się w Chrome DevTools i zerknąłem na szczegóły transferu sieciowego, zobaczyłem rzeczy, których gołym okiem nie widać. Prawie 15 megabajtów transferu na stronę główną. 15 osobnych plików CSS, które generowały półtorej sekundy opóźnienia. Zero strategii cache&amp;rsquo;owania dla osób, które wracają na stronę.&lt;/p&gt;</description></item><item><title>Optymalizacja JS w Hugo: Bundling, Fingerprinting i Cache w 15 minut</title><link>https://klikukliku.dev/pl/posts/hugo-js-optimization/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-js-optimization/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Po &lt;strong&gt;&lt;a href="https://klikukliku.dev/pl/posts/hugo-css-optimization"&gt;uporządkowaniu stylów CSS&lt;/a&gt;&lt;/strong&gt; i &lt;strong&gt;&lt;a href="https://klikukliku.dev/pl/posts/hugo-image-optimization"&gt;optymalizacji obrazów&lt;/a&gt;&lt;/strong&gt;, zająłem się warstwą JavaScript. Na pierwszy rzut oka sytuacja wyglądała niewinnie. Strona ładowała dwa pliki: skrypt z motywu oraz mój własny kod obsługujący przełączanie koloru motywu. Łącznie ważyły one niespełna trzy kilobajty. Przy tak małym rozmiarze mogłoby się wydawać, że optymalizacja w tym miejscu to sztuka dla sztuki.&lt;/p&gt;
&lt;p&gt;Prawdziwe wyzwanie kryło się jednak w nagłówkach HTTP. Zauważyłem, że oba pliki miały ustawiony roczny czas życia w pamięci podręcznej. Niestety, w ich nazwach brakowało unikalnego identyfikatora, czyli tak zwanego fingerprintu. To stwarzało poważne ryzyko. Oznaczało bowiem, że po wdrożeniu jakichkolwiek poprawek, użytkownicy nadal korzystaliby ze starej wersji kodu zapisanej w przeglądarce.&lt;/p&gt;</description></item><item><title>Optymalizacja serwera HTTP dla Hugo: GZIP, cache headers i fingerprinting</title><link>https://klikukliku.dev/pl/posts/hugo-server-optimization/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-server-optimization/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Często skupiamy się na minifikacji HTML czy bundlingu CSS, uznając to za koniec optymalizacji. Zauważyłem jednak, że nawet najlepiej przygotowane pliki potrafią ładować się wolno, jeśli zapomnimy o warstwie serwera HTTP. To właśnie tam leży niewykorzystany potencjał, który warto zagospodarować.&lt;/p&gt;
&lt;p&gt;W mojej praktyce kluczowe okazują się dwa elementy konfiguracji. Po pierwsze, kompresja GZIP. Z mojego doświadczenia wynika, że potrafi ona zredukować rozmiar plików tekstowych o sześćdziesiąt do siedemdziesięciu procent. Po drugie, odpowiednie nagłówki Cache. Dzięki nim eliminujemy zbędne zapytania przy kolejnych wizytach użytkownika. Pokażę wam dzisiaj, jak skonfigurować serwer dla strony opartej na Hugo, aby wycisnąć maksimum możliwości ze statycznych plików.&lt;/p&gt;</description></item><item><title>Optymalizacja CSS w Hugo: minifikacja i bundling dla maksymalnej wydajności</title><link>https://klikukliku.dev/pl/posts/hugo-css-optimization/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-css-optimization/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Często skupiamy się na optymalizacji JavaScriptu czy obrazów, a style CSS traktujemy nieco po macoszemu. Wydaje nam się, że skoro pojedyncze pliki ważą zaledwie kilka kilobajtów, to nie stanowią problemu. Jednak to mylne założenie. Sposób, w jaki dostarczamy te pliki do przeglądarki, może mieć kluczowy wpływ na to, jak szybko użytkownik zobaczy gotową stronę.&lt;/p&gt;
&lt;p&gt;Kiedy zajrzałem do narzędzi deweloperskich w Chrome, zauważyłem u siebie konkretny problem. Moja strona ładowała aż piętnaście osobnych plików CSS. Sumarycznie generowało to opóźnienie rzędu jednej i sześciu dziesiątych sekundy. Co ciekawe, problemem wcale nie był rozmiar danych. Kompresja GZIP działała poprawnie i redukowała wagę plików o ponad sześćdziesiąt procent. Prawdziwym wąskim gardłem okazała się sama liczba zapytań HTTP. Przeglądarka traciła czas na nawiązywanie połączeń, zamiast na pobieranie treści.&lt;/p&gt;</description></item><item><title>Hugo Image Processing: Jak odchudziłem stronę o 98%</title><link>https://klikukliku.dev/pl/posts/hugo-image-optimization/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-image-optimization/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Obrazy to zazwyczaj największa przeszkoda w osiągnięciu wysokiej wydajności stron internetowych. Choć Hugo generuje z natury szybkie witryny statyczne, nieoptymalizowane grafiki potrafią całkowicie zniweczyć tę przewagę. Postanowiłem przyjrzeć się temu bliżej na przykładzie własnej strony.&lt;/p&gt;
&lt;p&gt;Analiza w Chrome DevTools jasno wskazała źródło problemu. Obrazy stanowiły aż dziewięćdziesiąt sześć procent całego transferu, co dawało prawie piętnaście megabajtów danych. Namierzyłem trzy duże grafiki w formacie PNG, które generowały większość tego ruchu i wydłużały czas ładowania do ponad czterech sekund. Dla użytkowników mobilnych oznaczało to długie oczekiwanie i niepotrzebne zużycie pakietu danych.&lt;/p&gt;</description></item><item><title>Szybki start w Symfony: Dockerfile i Makefile</title><link>https://klikukliku.dev/pl/posts/dockerfile-and-makefile-for-symfony/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/dockerfile-and-makefile-for-symfony/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Ostatnio sporo czasu poświęciłem na optymalizację mojego środowiska lokalnego. Zauważyłem, że sam wpadłem w pułapkę nadmiernej komplikacji. Tworzyłem rozbudowane pliki docker-compose i ukrywałem logikę w skryptach, przez co traciłem z oczu to, co najważniejsze. Postanowiłem wrócić do korzeni i postawić na prostotę. Moja obecna konfiguracja dla Symfony opiera się na dwóch filarach: czystym Dockerze i pliku Makefile. W samym obrazie deweloperskim postawiłem na najnowszą wersję PHP oraz wsparcie dla SQLite. Dzięki temu mogę wystartować z developmentem błyskawicznie, bez tracenia czasu na konfigurowanie ciężkich kontenerów z bazami danych.&lt;/p&gt;</description></item><item><title>Google Tag Manager w ekosystemie Hugo.</title><link>https://klikukliku.dev/pl/posts/google-tag-manager-in-hugo/</link><pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/google-tag-manager-in-hugo/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Ostatnio musiałem zintegrować analitykę w jednym z projektów opartych na Hugo. Zazwyczaj wrzucenie skryptu śledzącego to &amp;ldquo;pięć minut roboty&amp;rdquo;, ale jeśli chcemy to zrobić porządnie – czyli wydajnie i z poszanowaniem prywatności użytkowników – sprawa robi się ciekawsza.&lt;/p&gt;
&lt;p&gt;Poniżej spisałem moje wnioski i gotową procedurę wdrożenia Google Tag Managera (GTM) oraz Google Analytics 4 (GA4). Skupiłem się na tym, aby kod był czysty, a mechanizm zgód na cookies (Cookie Consent) faktycznie działał, a nie tylko wyglądał.&lt;/p&gt;</description></item><item><title>Hugo + GitHub Actions: prosty pipeline wdrożenia</title><link>https://klikukliku.dev/pl/posts/deploy-hugo-by-github-actions/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/deploy-hugo-by-github-actions/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Najprostszy sposób na automatyczne wdrażanie strony w Hugo wygląda tak: trzymamy cały projekt w repozytorium na GitHubie, a GitHub Actions po każdym pushu buduje stronę i wysyła wygenerowany katalog public/ na nasz serwer przez SSH z użyciem rsync.&lt;/p&gt;
&lt;h2 id="założenia"&gt;Założenia&lt;/h2&gt;
&lt;p&gt;Zakładam tutaj dwie rzeczy.&lt;/p&gt;
&lt;p&gt;Po pierwsze, masz już lokalnie działający projekt Hugo. Na przykład utworzony komendą &lt;code&gt;hugo new site twoja_strona&lt;/code&gt; i sprawdzony w ten sposób, że lokalne wywołanie komendy &lt;code&gt;hugo&lt;/code&gt; poprawnie generuje katalog public/.&lt;/p&gt;</description></item><item><title>Hugo vs Sulu</title><link>https://klikukliku.dev/pl/posts/hugo-vs-sulu/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/posts/hugo-vs-sulu/</guid><description>&lt;h2 id="wstęp"&gt;Wstęp&lt;/h2&gt;
&lt;p&gt;Dzisiaj weźmiemy na warsztat dwa narzędzia o zupełnie innej filozofii działania: Hugo oraz Sulu. Oba są rozwiązaniami typu open source, ale służą do rozwiązywania problemów w odmienny sposób.&lt;/p&gt;
&lt;p&gt;Zacznijmy od Hugo. To generator stron statycznych napisany w języku Go. Jego głównym zadaniem jest przetworzenie kodu na gotowe pliki HTML, CSS i JavaScript, które potem możemy wystawić na dowolnym serwerze. To, co wyróżnia Hugo, to przede wszystkim niesamowita szybkość budowania witryny. Społeczność wokół tego projektu dynamicznie rośnie i zgromadziła już ponad osiemdziesiąt pięć tysięcy gwiazdek na GitHubie. Muszę jednak zaznaczyć, że jest to narzędzie typowo deweloperskie. Edycja treści opiera się tu głównie na plikach Markdown i systemie kontroli wersji Git, co wymaga pewnej biegłości technicznej.&lt;/p&gt;</description></item><item><title>O co chodzi</title><link>https://klikukliku.dev/pl/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/readme/</guid><description>&lt;h2 id="cześć"&gt;Cześć!&lt;/h2&gt;
&lt;p&gt;Mówią, że startując z projektem, trzeba mieć strategię. Ja na razie mam tylko chęci i klawiaturę.&lt;/p&gt;
&lt;p&gt;Nie wiem jeszcze, czy to będzie techniczny poradnik, czy dziennik developera. Na ten moment traktuję to miejsce jako moją „zewnętrzną pamięć”. Zbieram tu rozwiązania i pomysły, które chcę zachować na przyszłość, żeby nie musieć szukać ich dwa razy.&lt;/p&gt;
&lt;p&gt;A skoro już to spisuję – niech służy też innym.&lt;/p&gt;</description></item><item><title>Timer Pomodoro</title><link>https://klikukliku.dev/pl/pomodoro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://klikukliku.dev/pl/pomodoro/</guid><description/></item></channel></rss>