[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies-pl":3},[4,31,49,67,88,110,124,141,157,174,201,219,243,264,280,296,312,336,357,373,389,405,421],{"id":5,"title":6,"category":7,"content":8,"description":9,"extension":10,"faq":11,"icon":12,"links":13,"meta":22,"projects":23,"since":27,"stem":28,"updated":29,"__hash__":30},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fcaddy.yml","Caddy","infrastructure","Caddy to serwer WWW i odwrotne proxy, którego używam do kierowania żądań do aplikacji SaaS. W projektach takich jak VetSpace i DigiPulse łączy publiczne domeny z usługami działającymi w kontenerach Docker.\n\n## Jak korzystam z Caddy\n\n- **Kierowanie ruchu** — przekazywanie żądań do aplikacji lub kontenera obsługującego daną domenę.\n- **HTTPS** — automatyczne uzyskiwanie i odnawianie certyfikatów dla skonfigurowanych domen.\n- **Czytelna konfiguracja** — reguły w pliku Caddyfile, które można przeglądać razem ze zmianami aplikacji.\n\n## Certyfikaty a dostęp do danych placówki\n\nAutomatyczne HTTPS wymaga poprawnego DNS, weryfikacji domeny i trwałego przechowywania certyfikatów. Błędy odnawiania nadal trzeba monitorować. Sama aplikacja musi rozpoznawać placówkę i sprawdzać uprawnienia: odwrotne proxy nie zapewnia izolacji danych klientów.\n\n## Miejsce Caddy w infrastrukturze\n\nW moich środowiskach Docker Caddy ułatwia zarządzanie ruchem przychodzącym bez rozbudowanej konfiguracji proxy. Osobno trzeba dobrać limity czasu, przekazywane nagłówki i logi dostępu. Te szczegóły pomagają prześledzić na przykład nieudane żądanie rezerwacji od serwera proxy do API Laravel.\n","Caddy w aplikacjach SaaS: odwrotne proxy, automatyczne HTTPS, obsługa domen i kierowanie żądań do usług w kontenerach Docker.","yml",null,"i-simple-icons-caddy",[14,19],{"label":15,"to":16,"color":17,"icon":18},"caddyserver.com","https:\u002F\u002Fcaddyserver.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":20,"to":21,"color":17,"icon":18},"Dokumentacja techniczna","https:\u002F\u002Fcaddyserver.com\u002Fdocs\u002Fautomatic-https",{},[24,25,26],"vetspace","digipulse","netpostpanel","2022","pl\u002Ftechnologies\u002Fcaddy","2026-09-20","odSoXQrJDgJHdIIDDlGYf79GO0pLGV6q6w-M_xfmlpo",{"id":32,"title":33,"category":7,"content":34,"description":35,"extension":10,"faq":11,"icon":36,"links":37,"meta":43,"projects":44,"since":46,"stem":47,"updated":29,"__hash__":48},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fcloudflare.yml","Cloudflare","Cloudflare udostępnia DNS, sieć dostarczania treści i usługi ochrony stron. Korzystam z niego przy publicznych produktach SaaS, aby zarządzać domenami, buforować pliki statyczne i ograniczać automatyczne wysyłanie formularzy.\n\n## Gdzie korzystam z Cloudflare\n\nVetCard, VetSpace i DigiPulse łączą publiczne strony z funkcjami aplikacji. Wymagają więc różnych reguł buforowania: obraz można udostępniać wielu odwiedzającym z tego samego cache, ale dane wizyt i kont muszą pozostać prywatne. DigiPulse korzysta również z Turnstile w publicznych formularzach.\n\n## Buforowanie i ochrona formularzy\n\n- **Pliki statyczne** — obrazy, style i skrypty dostarczane z serwerów bliższych odwiedzającym.\n- **Dane prywatne** — odpowiedzi zawierające dane użytkownika wyłączone ze wspólnej pamięci podręcznej.\n- **Turnstile** — weryfikacja przesłanego tokena na serwerze; sam widżet w przeglądarce nie wystarcza.\n\n## Za co nadal odpowiada aplikacja\n\nCloudflare uzupełnia walidację danych, kontrolę uprawnień i ograniczanie liczby żądań. Reguły buforowania oraz zabezpieczenie połączenia z serwerem źródłowym pozostają częścią konfiguracji wdrożenia. Dostępne funkcje ochrony i limity zależą od wybranych usług i planu.\n","Cloudflare dla aplikacji SaaS: zarządzanie DNS, pamięć podręczna CDN i ochrona formularzy przed botami za pomocą Turnstile.","i-simple-icons-cloudflare",[38,41],{"label":39,"to":40,"color":17,"icon":18},"cloudflare.com","https:\u002F\u002Fwww.cloudflare.com",{"label":20,"to":42,"color":17,"icon":18},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{},[45,24,25],"vetcard","2021","pl\u002Ftechnologies\u002Fcloudflare","5iMRd8mA7xkBV5Bw_SXgMplUPh83Sh6tZqn4Hk_kCYE",{"id":50,"title":51,"category":7,"content":52,"description":53,"extension":10,"faq":11,"icon":54,"links":55,"meta":61,"projects":62,"since":64,"stem":65,"updated":29,"__hash__":66},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fdigitalocean.yml","DigitalOcean","DigitalOcean to dostawca infrastruktury chmurowej. Korzystałem z maszyn wirtualnych Droplet przy pierwszych projektach DigiSpace, samodzielnie konfigurując środowisko Linux i wdrażając aplikacje.\n\n## Praca z serwerami Droplet\n\nOddzielne maszyny pozwalały niezależnie konfigurować i aktualizować usługi. Praca obejmowała serwery WWW, bazy danych, reguły zapory, aktualizacje systemu i kopie zapasowe. Droplet wymaga samodzielnej administracji: łatwo go utworzyć, ale utrzymanie oprogramowania pozostaje obowiązkiem użytkownika.\n\n## Przejście na serwer dedykowany\n\nGdy infrastruktura się rozrosła, przeniosłem usługi na wynajęty serwer Hetzner z Proxmox VE. Docker ułatwił przenoszenie środowisk aplikacji. Dane, zmiany DNS i plan odtworzenia usług nadal wymagały osobnego przygotowania.\n\n## Jak porównuję warianty hostingu\n\nBiorę pod uwagę zużycie zasobów, czas administracji, miejsce na kopie zapasowe i wymaganą dostępność. Maszyny w chmurze są wygodne, gdy środowiska trzeba niezależnie tworzyć lub skalować. Serwer dedykowany może pasować do stałego obciążenia, ale skupia usługi na jednej fizycznej maszynie. Opłacalność zależy od konkretnego projektu.\n","Doświadczenie z DigitalOcean: serwery Droplet, wdrażanie aplikacji na Linuksie i przenoszenie usług SaaS na serwer dedykowany.","i-simple-icons-digitalocean",[56,59],{"label":57,"to":58,"color":17,"icon":18},"digitalocean.com","https:\u002F\u002Fwww.digitalocean.com",{"label":20,"to":60,"color":17,"icon":18},"https:\u002F\u002Fdocs.digitalocean.com\u002Fproducts\u002Fdroplets\u002Fdetails\u002Fpolicies\u002F",{},[63],"digispace","2020","pl\u002Ftechnologies\u002Fdigitalocean","lj7kqZK4CLHs43YnwQDHWrAeKb0Ovlr9BbM1Cy4wcRs",{"id":68,"title":69,"category":7,"content":70,"description":71,"extension":10,"faq":72,"icon":76,"links":77,"meta":83,"projects":84,"since":85,"stem":86,"updated":29,"__hash__":87},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fdocker.yml","Docker","Docker pozwala umieścić aplikację i jej zależności w obrazie kontenera. Używam go do usług Laravel i Node.js w DigiPulse, VetSpace oraz NetPostPanel, od lokalnej pracy po wdrożenia na maszynach wirtualnych.\n\n## Jak organizuję kontenery\n\n- **Docker Compose** — wspólny opis aplikacji, procesów obsługujących zadania w tle i usług pomocniczych.\n- **Budowanie wieloetapowe** — oddzielenie narzędzi budowania od końcowego obrazu uruchomieniowego.\n- **Trwałe dane** — pliki bazy danych i przesłane materiały przechowywane poza wymienialnymi kontenerami.\n\n## Co daje przenośność\n\nKontenery pomogły mi zmienić dostawcę hostingu bez odtwarzania środowiska aplikacji od podstaw. Na działanie systemu nadal wpływają konfiguracja, architektura procesora, sieć i dane. Sam Docker nie gwarantuje więc, że błąd z produkcji uda się odtworzyć lokalnie.\n\n## Kontrola stanu i odzyskiwanie działania\n\nHealth check zgłasza stan kontenera. Polityki restartu Dockera reagują na zakończenie procesu; sam status unhealthy nie powoduje ponownego uruchomienia. Trzeba to uwzględnić przy wdrażaniu i usuwaniu awarii, szczególnie w przypadku baz danych i procesów, które nie mogą zgubić rozpoczętych zadań.\n","Docker dla Laravel i Node.js: powtarzalne środowiska, usługi Docker Compose i wdrażanie kontenerów w moich projektach SaaS.",[73],{"label":74,"content":75},"Kiedy wybierasz Docker Compose zamiast Kubernetes?","Używam Compose do usług zarządzanych na pojedynczych maszynach wirtualnych. Kubernetes rozważam, gdy projekt potrzebuje rozdzielania zadań między węzły i ma zasoby na utrzymanie klastra.","i-simple-icons-docker",[78,81],{"label":79,"to":80,"color":17,"icon":18},"docker.com","https:\u002F\u002Fwww.docker.com",{"label":20,"to":82,"color":17,"icon":18},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Fcontainers\u002Fstart-containers-automatically\u002F",{},[25,24,26,63],"2019","pl\u002Ftechnologies\u002Fdocker","Q6atlSkxe60m_ZElSu6Q4q5VeRVKZrseqvxIDR9-zh0",{"id":89,"title":90,"category":91,"content":92,"description":93,"extension":10,"faq":94,"icon":98,"links":99,"meta":105,"projects":106,"since":107,"stem":108,"updated":29,"__hash__":109},"technologies_pl\u002Fpl\u002Ftechnologies\u002Ffilament.yml","Filament","backend","Filament to zestaw narzędzi Laravel do tworzenia paneli administracyjnych i interfejsów aplikacji. Używam go do formularzy, tabel i ekranów podsumowań, pozostawiając reguły biznesowe w backendzie Laravel.\n\n## Przykłady z moich projektów\n\nW DigiPulse Filament służy do zarządzania monitoringiem. W DigiSpace obsługuje panel treści działający obok starszego interfejsu Inertia i Vue. Dzięki temu można stopniowo rozwijać narzędzia administracyjne bez jednoczesnej wymiany publicznej strony.\n\n## Co tworzę w Filament\n\n- **Zasoby** — ekrany dodawania, edycji i wyszukiwania rekordów.\n- **Formularze i tabele** — walidację, filtry i działania dopasowane do procesu pracy.\n- **Własne strony** — komponenty Livewire do zadań, które wykraczają poza zwykłą edycję danych.\n\n## Uprawnienia i utrzymanie\n\nPanel administracyjny wymaga reguł autoryzacji i testów istotnych operacji. Ukrycie przycisku nie blokuje dostępu do danych. Korzystam z gotowych komponentów tam, gdzie odpowiadają potrzebom, a własną logikę dodaję tam, gdzie ułatwia pracę użytkownikom. Czas realizacji zależy od integracji, uprawnień i reguł biznesowych.\n","Tworzenie paneli w Filament i Laravel: formularze, tabele, ekrany administracyjne i zarządzanie treścią w DigiPulse oraz DigiSpace.",[95],{"label":96,"content":97},"Do jakich paneli administracyjnych pasuje Filament?","Sprawdza się przy formularzach, tabelach i zarządzaniu rekordami w Laravel. Bardziej złożone procesy można obsłużyć przez własne strony i komponenty Livewire w tym samym panelu.","i-simple-icons-filament",[100,103],{"label":101,"to":102,"color":17,"icon":18},"filamentphp.com","https:\u002F\u002Ffilamentphp.com",{"label":20,"to":104,"color":17,"icon":18},"https:\u002F\u002Ffilamentphp.com\u002Fdocs\u002F5.x\u002Fintroduction\u002Foverview",{},[25,63],"2023","pl\u002Ftechnologies\u002Ffilament","ocIDhUF1nwIlRhSx0TWzb3COt86cShAxejv8ft0YAW8",{"id":111,"title":112,"category":7,"content":113,"description":114,"extension":10,"faq":11,"icon":115,"links":116,"meta":120,"projects":121,"since":64,"stem":122,"updated":29,"__hash__":123},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fgithub-actions.yml","GitHub Actions","GitHub Actions uruchamia zautomatyzowane procesy na podstawie konfiguracji w repozytorium GitHub. Używam go do sprawdzania zmian i wspierania wdrożeń, przechowując opis procesu razem z kodem aplikacji.\n\n## Co sprawdza to portfolio\n\nPo wysłaniu zmian do repozytorium uruchamiają się ESLint, sprawdzanie typów TypeScript, testy jednostkowe, budowanie wersji produkcyjnej i testy przeglądarkowe Playwright. Każdy etap dotyczy innego obszaru: spójności kodu, błędów typów, zachowania aplikacji lub gotowej witryny.\n\n## CI i wdrożenie to osobne procesy\n\nTo portfolio jest wdrażane przez integrację Vercel z Git. Nieudany przebieg GitHub Actions sam w sobie nie blokuje wdrożenia ani scalenia zmian: wymagane kontrole i warunki publikacji trzeba skonfigurować osobno. Obecność testów w CI nie oznacza automatycznie, że od ich wyniku zależy wydanie.\n\n## Moje podejście do automatyzacji\n\nW projektach Laravel, takich jak DigiSpace, automatyczne testy pomagają weryfikować zmiany przed publikacją. Szybkie kontrole umieszczam na początku, aby wcześniej otrzymać czytelną informację o błędzie. Automatyzacja wdrożeń wymaga również kontroli dostępu, przydatnych logów i planu przywrócenia działania.\n","GitHub Actions w CI\u002FCD: automatyczna analiza kodu, sprawdzanie typów, testy i budowanie aplikacji na przykładzie moich projektów.","i-simple-icons-githubactions",[117],{"label":118,"to":119,"color":17,"icon":18},"github.com\u002Ffeatures\u002Factions","https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions",{},[63,24,25,26,45],"pl\u002Ftechnologies\u002Fgithub-actions","CXDHAn6swWrwPY0j6hlfr2YSOGlV4IpOjjV6g8qqu1g",{"id":125,"title":126,"category":91,"content":127,"description":128,"extension":10,"faq":11,"icon":129,"links":130,"meta":136,"projects":137,"since":138,"stem":139,"updated":29,"__hash__":140},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fgo.yml","Go","Go to kompilowany język programowania, którego używam do usług działających obok aplikacji Laravel. W moich projektach wykonują one konkretne zadania, dla których przydatny jest osobny proces i niezależny cykl wdrożeń.\n\n## Go w DigiPulse i VetSpace\n\nDigiPulse korzysta z osobnej usługi Go do sprawdzania dostępności stron. Laravel obsługuje aplikację i panel administracyjny, a usługa monitoringu wysyła żądania HTTP i przekazuje wyniki. W VetSpace oddzielna usługa Go uczestniczy w analizie wizyt z pomocą AI.\n\n## Organizacja pracy w tle\n\nGorutyny ułatwiają współbieżne wykonywanie zadań, ale ich liczbę nadal trzeba kontrolować. Limity czasu, anulowanie żądań i ograniczone kolejki pomagają obsługiwać wolne lub niedostępne strony. Liczy się to, czy usługa niezawodnie kończy sprawdzenia przy dostępnych zasobach. Ogólne stwierdzenie, że Go jest szybsze od PHP, nie zastąpi pomiarów.\n\n## Wdrożenie i wybór języka\n\nAplikacje Go można wdrażać jako skompilowane pliki wykonywalne. To, czy potrzebują bibliotek systemowych, zależy od ustawień budowania i zależności. Zwykłe procesy aplikacji pozostawiam w Laravel, a Go wybieram wtedy, gdy wydzielenie usługi upraszcza jej działanie i utrzymanie.\n","Go w aplikacjach SaaS: osobna usługa monitoringu DigiPulse i analiza wizyt weterynaryjnych z pomocą AI w VetSpace.","i-simple-icons-go",[131,134],{"label":132,"to":133,"color":17,"icon":18},"go.dev","https:\u002F\u002Fgo.dev",{"label":20,"to":135,"color":17,"icon":18},"https:\u002F\u002Fgo.dev\u002Fdoc\u002Ffaq",{},[25,24],"2024","pl\u002Ftechnologies\u002Fgo","yHGSyLHdBS-6OLAzX1J17OTxLhxmqHGA5Fgt9w3cGW0",{"id":142,"title":143,"category":7,"content":144,"description":145,"extension":10,"faq":11,"icon":146,"links":147,"meta":153,"projects":154,"since":107,"stem":155,"updated":29,"__hash__":156},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fhetzner.yml","Hetzner","Hetzner udostępnia serwer dedykowany, który wynajmuję dla DigiPulse, VetSpace, NetPostPanel i usług pomocniczych. Zarządzam oprogramowaniem, a Proxmox rozdziela środowiska aplikacji między maszyny wirtualne.\n\n## Za co odpowiadam\n\nZajmuję się systemem operacyjnym, maszynami wirtualnymi, wdrażaniem kontenerów, konfiguracją sieci i odtwarzaniem aplikacji. Wynajem daje kontrolę nad przydziałem zasobów, ale sprzęt pozostaje własnością dostawcy. Awarie i wymianę podzespołów rozwiązuje się z obsługą hostingu.\n\n## Dlaczego ten model pasuje do moich projektów\n\nKilka stale działających usług może korzystać ze wspólnej puli zasobów. Daje mi to przewidywalny podstawowy koszt hostingu i swobodę wyboru narzędzi wdrożeniowych. Pełny koszt obejmuje również przechowywanie danych, kopie zapasowe, czas administracji i dodatkową infrastrukturę.\n\n## Dostępność wymaga osobnego planu\n\nMaszyny wirtualne na jednym serwerze nadal zależą od tego samego fizycznego sprzętu. Izolacja w Proxmox nie zapewnia wysokiej dostępności hosta. Gdy wymagania projektu rosną, trzeba osobno zaplanować redundancję i czas odtworzenia usług. Kolejna maszyna wirtualna na tym samym serwerze nie rozwiązuje tego problemu.\n","Serwer dedykowany Hetzner dla SaaS: wynajęty sprzęt, maszyny wirtualne Proxmox i samodzielne utrzymanie aplikacji.","i-simple-icons-hetzner",[148,151],{"label":149,"to":150,"color":17,"icon":18},"hetzner.com","https:\u002F\u002Fwww.hetzner.com",{"label":20,"to":152,"color":17,"icon":18},"https:\u002F\u002Fdocs.hetzner.com\u002Frobot\u002Fdedicated-server\u002Fdedicated-server-hardware\u002Fdedicated-server-hardware-overview\u002F",{},[25,24,26],"pl\u002Ftechnologies\u002Fhetzner","ogfpDFnc_J1qZaXOSl6rADIUeCsrHq0pdNDfHab2hjQ",{"id":158,"title":159,"category":7,"content":160,"description":161,"extension":10,"faq":11,"icon":162,"links":163,"meta":169,"projects":170,"since":64,"stem":172,"updated":29,"__hash__":173},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fhostinger.yml","Hostinger","Hostinger to dostawca hostingu, z którego korzystam przy WordPress i mniejszych stronach klientów, w tym DigiSpace Studio. Panel zarządzania ułatwia codzienną obsługę oraz przekazanie gotowego projektu.\n\n## Co jest ważne dla strony firmowej\n\nStrona potrzebuje wygodnej edycji treści, dostępu do konta hostingowego i jasnych zasad utrzymania. Przy konfiguracji sprawdzam wersje PHP, dostęp do bazy danych, kopie zapasowe i ustawienia domeny. Zakres dostępnych usług zależy od planu.\n\n## Hosting zarządzany a VPS\n\nZarządzany hosting stron i VPS do samodzielnej administracji wiążą się z innym podziałem obowiązków. Sam panel nie oznacza, że dostawca aktualizuje aplikację, wtyczki czy oprogramowanie serwera. Najpierw sprawdzam zakres usługi, a potem ustalam, kto odpowiada za aktualizacje i odzyskiwanie danych.\n\n## Przekazanie i dalsza opieka\n\nW projekcie WordPress hosting powinien odpowiadać możliwościom klienta po uruchomieniu strony. Własność konta, opłaty za odnowienie i dostęp do kopii zapasowych muszą być jasno ustalone. Bardziej rozbudowane usługi SaaS mogą wymagać osobno administrowanego serwera z większą swobodą konfiguracji.\n","Hostinger dla WordPress i stron klientów: konfiguracja hostingu, przekazanie projektu oraz podział obowiązków związanych z utrzymaniem.","i-simple-icons-hostinger",[164,167],{"label":165,"to":166,"color":17,"icon":18},"hostinger.com","https:\u002F\u002Fwww.hostinger.com",{"label":20,"to":168,"color":17,"icon":18},"https:\u002F\u002Fwww.hostinger.com\u002Fsupport\u002F8311982-what-is-managed-hosting-in-hostinger\u002F",{},[171],"digispace-studio","pl\u002Ftechnologies\u002Fhostinger","sYlXmOQKm-sqssfF1JEqii6KskALZF1OiOa5CN02Lyk",{"id":175,"title":176,"category":91,"content":177,"description":178,"extension":10,"faq":179,"icon":189,"links":190,"meta":196,"projects":197,"since":198,"stem":199,"updated":29,"__hash__":200},"technologies_pl\u002Fpl\u002Ftechnologies\u002Flaravel.yml","Laravel","Laravel to framework PHP, którego używam do produktów SaaS, API i narzędzi administracyjnych. Moje projekty obejmują VetSpace, DigiPulse, NetPostPanel i stronę DigiSpace. Każdy ma własne reguły biznesowe i potrzeby integracyjne.\n\n## Jak korzystam z Laravel\n\n- **VetSpace** — wspólne API katalogu placówek i CRM, dostęp z uwzględnieniem placówki oraz subskrypcje Stripe przez Cashier.\n- **DigiPulse** — aplikacja monitoringu i panel Filament obok osobnej usługi sprawdzającej dostępność, napisanej w Go.\n- **NetPostPanel** — generowanie treści w tle z wykorzystaniem kolejek i Horizon.\n- **DigiSpace** — wielojęzyczna strona z własnym CMS i panelem Filament.\n\n## Framework i jego ekosystem\n\nLaravel zapewnia routing, walidację, dostęp do bazy danych i API kolejek. Filament, Cashier i Horizon to dodatkowe narzędzia, które dobieram i konfiguruję dla projektu. Płatności, uprawnienia i izolacja danych klientów nadal wymagają osobnego projektu oraz testów.\n\n## Utrzymanie po wdrożeniu\n\nStaram się oddzielać logikę biznesową od obsługi żądań HTTP i ekranów administracyjnych. Ułatwia to ponowne wykorzystanie procesu w API lub zadaniu w tle. Optymalizację zaczynam od pomiarów: Octane może pomóc przy odpowiednim obciążeniu, ale nie zastępuje poprawy zapytań ani kontroli stanu aplikacji.\n","Programowanie w Laravel: aplikacje SaaS, API, panele Filament, kolejki i subskrypcje Stripe na przykładzie VetSpace oraz DigiPulse.",[180,183,186],{"label":181,"content":182},"Tworzysz nowe aplikacje Laravel czy utrzymujesz istniejące?","Jedno i drugie. Zajmuję się nowymi aplikacjami, audytami, refaktoryzacją i rozwojem działających produktów. Podejście zależy od stanu kodu oraz wymagań dotyczących wydań.",{"label":184,"content":185},"Z jakich narzędzi Laravel korzystasz?","Z Filament do administracji, Cashier do subskrypcji Stripe i Horizon do kolejek Redis. Pracuję też z Octane i FrankenPHP, gdy aplikacja korzysta na długotrwałych procesach.",{"label":187,"content":188},"Czy możesz zająć się hostingiem i wdrożeniem Laravel?","Tak. Pracuję z Docker, Caddy, Proxmox i CI\u002FCD, także na wynajętym serwerze dedykowanym Hetzner. Konfiguracja zależy od wymaganej dostępności i sposobu utrzymania projektu.","i-simple-icons-laravel",[191,194],{"label":192,"to":193,"color":17,"icon":18},"laravel.com","https:\u002F\u002Flaravel.com",{"label":20,"to":195,"color":17,"icon":18},"https:\u002F\u002Flaravel.com\u002Fframework\u002Fdocs\u002F12.x\u002Fhorizon",{},[24,25,63,26,45],"2018","pl\u002Ftechnologies\u002Flaravel","72mFszTPQwaEpRXz_IBnYPJdyqCs4fkrI7sldPYwZpA",{"id":202,"title":203,"category":204,"content":205,"description":206,"extension":10,"faq":11,"icon":207,"links":208,"meta":214,"projects":215,"since":216,"stem":217,"updated":29,"__hash__":218},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fmysql.yml","MySQL","database","MySQL to relacyjna baza danych, której używam w aplikacjach Laravel i witrynach WordPress. W DigiSpace przechowuje treści strony firmowej oraz CMS, a w DigiSpace Studio jest częścią środowiska WordPress.\n\n## Na czym polega praca z bazą\n\n- **Model danych** — relacje między stronami, menu i innymi rekordami, klucze oraz ograniczenia integralności.\n- **Analiza zapytań** — sprawdzanie wolnych zapytań i planów wykonania przed zmianą indeksów lub zwiększeniem zasobów.\n- **Migracje** — planowanie zmian struktury z uwzględnieniem istniejących danych i kolejności wdrożenia.\n\n## MySQL w WordPress\n\nMySQL jest częstym wyborem dla WordPress, ale nie jedynym obsługiwanym silnikiem: WordPress działa również z MariaDB. Decyzja zależy od hostingu, istniejących danych i doświadczenia w utrzymaniu. Zmiana silnika wymaga sprawdzenia zgodności.\n\n## MySQL czy PostgreSQL?\n\nPracuję z obiema bazami. Działająca aplikacja MySQL może nie potrzebować migracji, podczas gdy innemu projektowi przydadzą się typy danych lub indeksy PostgreSQL. W obu przypadkach jakość zapytań, kopie zapasowe i sprawdzone odtwarzanie są ważniejsze niż ogólna deklaracja, że jedna baza zawsze działa szybciej.\n","MySQL w Laravel i WordPress: projektowanie bazy, optymalizacja zapytań i przechowywanie treści w DigiSpace oraz DigiSpace Studio.","i-simple-icons-mysql",[209,212],{"label":210,"to":211,"color":17,"icon":18},"mysql.com","https:\u002F\u002Fwww.mysql.com",{"label":20,"to":213,"color":17,"icon":18},"https:\u002F\u002Fwordpress.org\u002Fabout\u002Frequirements\u002F",{},[63,171],"2017","pl\u002Ftechnologies\u002Fmysql","QLkGz_IH004AuWnYrqwDFL3jNc28Y34uv91ZpTNcoLU",{"id":220,"title":221,"category":222,"content":223,"description":224,"extension":10,"faq":225,"icon":232,"links":233,"meta":239,"projects":240,"since":27,"stem":241,"updated":29,"__hash__":242},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fnuxt.yml","Nuxt","frontend","Nuxt to framework do aplikacji Vue z routingiem i renderowaniem na serwerze. Korzystam z niego w publicznym katalogu VetCard oraz w tym portfolio, gdzie treść strony powinna być dostępna dla odwiedzających i wyszukiwarek już w odpowiedzi serwera.\n\n## Przykłady z moich projektów\n\nVetCard łączy strony placówek weterynaryjnych z interaktywną rezerwacją wizyt. Jedna aplikacja obsługuje wiele placówek, wersje językowe i indywidualne kolory. To portfolio korzysta z Nuxt Content do tłumaczonych plików YAML, a obrazy do udostępniania w mediach społecznościowych generuje podczas działania serwera.\n\n## Co obejmuje praca nad SEO\n\nRenderowanie na serwerze dostarcza treść HTML bez czekania na wykonanie JavaScript w przeglądarce. Osobno konfiguruję metadane, adresy kanoniczne, wersje językowe i mapę witryny. Ułatwia to odnajdywanie oraz interpretowanie stron, ale nie gwarantuje indeksacji ani pozycji. Wyszukiwarki potrafią wykonywać JavaScript, lecz wymaga to dodatkowego etapu przetwarzania.\n\n## Renderowanie i wdrożenie\n\nNuxt obsługuje różne sposoby renderowania. Dobieram je do strony: sama interaktywność nie wymaga wyłączenia renderowania serwerowego. To portfolio korzysta z renderowania na serwerze i pamięci podręcznej ISR w Vercel dla wybranych tras; generowanie stron z wyprzedzeniem jest wyłączone w wersji produkcyjnej.\n","Tworzenie wielojęzycznych stron w Nuxt: renderowanie na serwerze, metadane SEO, katalogi placówek i strony oparte na treści.",[226,229],{"label":227,"content":228},"Dlaczego warto użyć Nuxt na publicznej stronie?","Renderowanie na serwerze udostępnia treść w początkowej odpowiedzi HTML. Nuxt daje też narzędzia do routingu i metadanych. Strony JavaScript mogą być indeksowane, ale renderowanie serwerowe zmniejsza zależność od wykonywania kodu przez robota wyszukiwarki.",{"label":230,"content":231},"Z której wersji Nuxt korzystasz?","To portfolio i VetCard korzystają z Nuxt 4. Portfolio używa też Nuxt Content, Nuxt Image, lokalizacji i generowania obrazów do mediów społecznościowych podczas działania serwera. Dobór modułów zależy od projektu.","i-simple-icons-nuxtdotjs",[234,237],{"label":235,"to":236,"color":17,"icon":18},"nuxt.com","https:\u002F\u002Fnuxt.com",{"label":20,"to":238,"color":17,"icon":18},"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fjavascript-seo-basics",{},[45,24],"pl\u002Ftechnologies\u002Fnuxt","xpApnf-ZOKv12gGHpj_JDJ-CuLUULJ7PtlrZQQDKOy8",{"id":244,"title":245,"category":91,"content":246,"description":247,"extension":10,"faq":248,"icon":255,"links":256,"meta":260,"projects":261,"since":216,"stem":262,"updated":29,"__hash__":263},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fphp.yml","PHP","PHP to mój główny język programowania po stronie serwera. Mam ponad osiem lat doświadczenia komercyjnego z Laravel, Symfony i WordPress, gdy odpowiada on potrzebom projektu. Obecnie pracuję z PHP 8.x; wcześniejsze doświadczenie obejmuje również starsze wersje języka.\n\n## Gdzie korzystam z PHP\n\nLaravel obsługuje projekty takie jak VetSpace, DigiPulse i NetPostPanel. Moja praca komercyjna z Symfony obejmuje platformę sprzedaży biletów na Formula 1, MotoGP, EICMA i EuroLeague. Zajmuję się składaniem zamówień, kontami użytkowników, narzędziami administracyjnymi i integracjami.\n\n## Na czym się skupiam\n\n- **Logika biznesowa** — zrozumiałe procesy rezerwacji, subskrypcji i zamówień.\n- **API i płatności** — walidacja, uprawnienia oraz niezawodna obsługa odpowiedzi zewnętrznych usług.\n- **Utrzymanie** — automatyczne testy i analiza statyczna wspierające rozwój istniejącego kodu.\n\n## Wybór środowiska wykonawczego\n\nPHP-FPM sprawdza się przy typowej obsłudze żądań. Długotrwałe procesy, w tym aplikacje uruchamiane przez Octane i FrankenPHP, wymagają innego podejścia do stanu i pamięci. Dobieram środowisko do aplikacji i sprawdzam wyniki przy reprezentatywnym obciążeniu. Sam język czy framework nie gwarantuje wydajności.\n","Programowanie w PHP, Laravel i Symfony: aplikacje SaaS, sprzedaż biletów, integracje płatności i API z myślą o dalszym rozwoju.",[249,252],{"label":250,"content":251},"Z którymi wersjami PHP pracujesz?","Obecnie pracuję z PHP 8.x. Przy aktualizacji starszej aplikacji sprawdzam wymagania frameworka i zależności oraz testuję zachowanie, na które wpływa zmiana wersji.",{"label":253,"content":254},"Jak wybierasz między Laravel a Symfony?","Uwzględniam istniejący kod, doświadczenie zespołu, integracje i wymagania utrzymaniowe. Oba nadają się do wieloletniego rozwoju: Laravel wykorzystuję we własnych produktach SaaS, a Symfony w komercyjnej sprzedaży biletów.","i-simple-icons-php",[257],{"label":258,"to":259,"color":17,"icon":18},"php.net","https:\u002F\u002Fwww.php.net",{},[24,25,63,26,45,171],"pl\u002Ftechnologies\u002Fphp","b50Ixw7Bu4EM-3bL9unxNvKkevXbkclhkKWa2R4hmdw",{"id":265,"title":266,"category":204,"content":267,"description":268,"extension":10,"faq":11,"icon":269,"links":270,"meta":276,"projects":277,"since":85,"stem":278,"updated":29,"__hash__":279},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fpostgresql.yml","PostgreSQL","PostgreSQL to relacyjna baza danych obsługująca transakcje, zapytania SQL i dane JSON. Korzystam z niej w DigiPulse do przechowywania danych monitoringu, z których aplikacja tworzy widoki stanu usług oraz historię incydentów.\n\n## Praca z wynikami monitoringu\n\nWyniki sprawdzeń dostępności przybywają z czasem. Zapytania powinny odnajdywać dane konkretnego monitora z wybranego okresu bez odczytywania zbędnych wierszy. Indeksy, okres przechowywania i agregacja wpływają na wydajność oraz rozmiar danych. Plan wykonania pokazuje, na co zapytanie zużywa zasoby.\n\n## Izolacja klientów wymaga precyzji\n\nOsobna baza dla każdego klienta i osobny schemat we wspólnej bazie to różne architektury. PostgreSQL obsługuje obie, ale schematy wymagają odpowiednich uprawnień i ograniczenia zakresu zapytań. Żaden wariant sam w sobie nie zapewnia zgodności ze wszystkimi wymaganiami dotyczącymi danych ani ochrony przed każdym błędem dostępu.\n\n## Jak wybieram bazę danych\n\nOgraniczenia integralności i typ JSONB przydają się, gdy aplikacja łączy uporządkowane rekordy z elastyczną strukturą pól. MySQL również pasuje do wielu projektów Laravel i WordPress. Przed wyborem porównuję rzeczywiste zapytania, model danych i wymagania związane z utrzymaniem.\n","PostgreSQL dla SaaS: dane monitoringu DigiPulse, integralność rekordów, analiza zapytań i warianty izolacji danych klientów.","i-simple-icons-postgresql",[271,274],{"label":272,"to":273,"color":17,"icon":18},"postgresql.org","https:\u002F\u002Fwww.postgresql.org",{"label":20,"to":275,"color":17,"icon":18},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-schemas.html",{},[25],"pl\u002Ftechnologies\u002Fpostgresql","WUh2p9-aD7ryAXqMbbeayEARxEF7VpQ4H7b1NCDcYrg",{"id":281,"title":282,"category":7,"content":283,"description":284,"extension":10,"faq":11,"icon":285,"links":286,"meta":292,"projects":293,"since":107,"stem":294,"updated":29,"__hash__":295},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fproxmox.yml","Proxmox","Proxmox VE to platforma wirtualizacji, z której korzystam na wynajętym serwerze Hetzner. Pozwala zarządzać osobnymi środowiskami aplikacji SaaS i usług pomocniczych, w tym infrastrukturą DigiPulse.\n\n## Jak organizuję środowiska\n\nMaszyny wirtualne mają oddzielne systemy operacyjne i konfigurowalny przydział zasobów. Wewnątrz nich Docker uruchamia usługi aplikacji. Dzięki temu łatwiej aktualizować i diagnozować poszczególne środowiska niż instalować wszystkie usługi bezpośrednio na fizycznym hoście.\n\n## Migawki i kopie zapasowe\n\nMigawka może pomóc wycofać zmianę, zależnie od pamięci masowej i stanu aplikacji. Nie zastępuje niezależnej kopii zapasowej ani nie chroni przed utratą dysków hosta. Przy odtwarzaniu środowiska trzeba też uwzględnić spójność bazy danych i kolejność uruchamiania usług.\n\n## Ograniczenia jednego hosta\n\nMaszyny wirtualne współdzielą zasoby fizyczne i zależą od dostępności serwera. Limity pomagają rozdzielać obciążenie, ale awaria dysku lub hosta może dotknąć wiele aplikacji. Dlatego oddzielenie środowisk, odtwarzanie z kopii i wysoka dostępność wymagają osobnych rozwiązań.\n","Proxmox VE dla hostingu SaaS: maszyny wirtualne na serwerze dedykowanym, podział środowisk, migawki i planowanie kopii zapasowych.","i-simple-icons-proxmox",[287,290],{"label":288,"to":289,"color":17,"icon":18},"proxmox.com","https:\u002F\u002Fwww.proxmox.com",{"label":20,"to":291,"color":17,"icon":18},"https:\u002F\u002Fpve.proxmox.com\u002Fpve-docs\u002Fpve-admin-guide.pdf",{},[25,24,26],"pl\u002Ftechnologies\u002Fproxmox","42iAwA27G6gKFi17MB0fx5vKDkihFBGVNi0qka08XP4",{"id":297,"title":298,"category":204,"content":299,"description":300,"extension":10,"faq":11,"icon":301,"links":302,"meta":308,"projects":309,"since":85,"stem":310,"updated":29,"__hash__":311},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fredis.yml","Redis","Redis to magazyn danych w pamięci, którego używam do buforowania i przetwarzania w tle. W projektach Laravel pomaga wykonywać zadania, na które użytkownik nie powinien czekać w ramach żądania HTTP.\n\n## Przykłady z moich projektów\n\nNetPostPanel korzysta z Laravel Horizon do kolejek generowania treści. W DigiPulse Redis uczestniczy w architekturze monitoringu opartej na zdarzeniach. Takie zadania wymagają innego podejścia do trwałości niż zwykła pamięć podręczna strony: utrata oczekującej pracy może wpłynąć na produkt, nawet jeśli cache da się odtworzyć.\n\n## Buforowanie i koordynacja\n\nRedis może przechowywać wyniki obliczeń, liczniki żądań i krótkotrwałe blokady. Klucze i czas wygaśnięcia muszą pasować do danych. Blokady pomagają koordynować procesy, ale ponawianie zadań nadal trzeba zaprojektować tak, aby nie powielało operacji biznesowych.\n\n## Trwałość danych kolejki\n\nRedis oferuje migawki RDB i dziennik AOF z różnymi możliwościami odtwarzania. Restart nie musi oznaczać utraty danych, a traktowanie wszystkich kluczy jako jednorazowych jest niebezpieczne dla kolejek. Trwałość, usuwanie kluczy przy braku pamięci i ponawianie zadań trzeba skonfigurować razem. Natomiast Redis Pub\u002FSub nie przechowuje wiadomości dla odłączonych odbiorców.\n","Redis w aplikacjach Laravel: kolejki zadań, pamięć podręczna i koordynacja pracy na przykładzie DigiPulse oraz NetPostPanel.","i-simple-icons-redis",[303,306],{"label":304,"to":305,"color":17,"icon":18},"redis.io","https:\u002F\u002Fredis.io",{"label":20,"to":307,"color":17,"icon":18},"https:\u002F\u002Fredis.io\u002Fdocs\u002Flatest\u002Foperate\u002Foss_and_stack\u002Fmanagement\u002Fpersistence\u002F",{},[25,26],"pl\u002Ftechnologies\u002Fredis","2j_TCXW9S2DQRyq9CcQO_ZN3Xmcs2JifWUtt4BlWGOo",{"id":313,"title":314,"category":315,"content":316,"description":317,"extension":10,"faq":318,"icon":325,"links":326,"meta":332,"projects":333,"since":46,"stem":334,"updated":29,"__hash__":335},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fstripe.yml","Stripe","tools","Stripe udostępnia usługi płatności i subskrypcji. Integruję go z VetSpace przez Laravel Cashier, a także pracuję nad płatnościami kartą w komercyjnej platformie sprzedaży biletów.\n\n## Subskrypcje i składanie zamówień\n\nPraca obejmuje okresy próbne, zmiany planów, potwierdzanie płatności i obsługę nieudanych obciążeń. Cashier zapewnia integrację z Laravel, a szczegóły rozliczeń zależą od ustawień Stripe i reguł aplikacji. Interfejs powinien jasno pokazywać oczekiwanie, powodzenie i błąd płatności.\n\n## Obsługa webhooków\n\nPowrót użytkownika ze strony płatności nie potwierdza zapłaty. Obsługa webhooków musi sprawdzać podpis, uwzględniać duplikaty i zmienioną kolejność zdarzeń, a w razie potrzeby uzgadniać stan przez Stripe API. Idempotentna obsługa zapobiega ponownemu wykonaniu tej samej operacji biznesowej.\n\n## Utrzymanie logiki płatności\n\nMam również doświadczenie z integracjami Dalenys i Revolut. Tam, gdzie to praktyczne, oddzielam specyfikę operatora od procesów zamówień i subskrypcji. Operatorzy mają różne możliwości, więc dodanie kolejnego nadal wymaga testów stanów i błędów. Ważne, aby dało się prześledzić przebieg płatności, gdy klient zgłosi problem.\n","Integracja Stripe dla SaaS i sprzedaży biletów: subskrypcje Laravel Cashier, stany płatności i niezawodna obsługa webhooków.",[319,322],{"label":320,"content":321},"Czy możesz dodać subskrypcje Stripe do istniejącej aplikacji Laravel?","Tak. Praca obejmuje integrację Cashier, produkty i ceny Stripe, obsługę webhooków oraz testy cyklu subskrypcji. Okresy próbne i działania po nieudanej płatności są dopasowywane do produktu.",{"label":323,"content":324},"Czy pracujesz z innymi operatorami płatności?","Mam również doświadczenie z Dalenys i Revolut. Każda integracja wymaga osobnych kontroli stanów płatności, uwierzytelniania i obsługi błędów.","i-simple-icons-stripe",[327,330],{"label":328,"to":329,"color":17,"icon":18},"stripe.com","https:\u002F\u002Fstripe.com",{"label":20,"to":331,"color":17,"icon":18},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks",{},[24],"pl\u002Ftechnologies\u002Fstripe","Hs25-UeEnpmS4A1mnjRahEX2X1ep4qIv8z7qvxzLCIQ",{"id":337,"title":338,"category":91,"content":339,"description":340,"extension":10,"faq":341,"icon":348,"links":349,"meta":353,"projects":354,"since":85,"stem":355,"updated":29,"__hash__":356},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fsymfony.yml","Symfony","Symfony to framework PHP, z którego korzystam w pracy komercyjnej nad platformą sprzedaży biletów na Formula 1, MotoGP, EICMA i EuroLeague. Pracuję zarówno nad procesem zakupu, jak i wewnętrznymi narzędziami administracyjnymi.\n\n## Czym się zajmuję\n\n- **Składanie zamówień** — koszyk, wybór miejsc, potwierdzenie zakupu i dostarczanie biletów.\n- **Płatności** — integracje z operatorami takimi jak Stripe i Dalenys.\n- **Konta i administracja** — profile, historia zamówień oraz zarządzanie wydarzeniami i sprzedażą.\n- **Usługi zewnętrzne** — mapy miejsc i API wykorzystywane podczas zakupu.\n\n## Czego wymaga sprzedaż biletów\n\nPo rozpoczęciu sprzedaży platforma musi poradzić sobie ze zmianą popytu, zachowując spójność zamówień i dostępnych miejsc. Szczególne znaczenie mają więc transakcje, stany płatności i obsługa błędów. Szybka strona ma wartość wtedy, gdy klient może poprawnie dokończyć zakup.\n\n## Symfony i Laravel w mojej pracy\n\nPracuję z oboma frameworkami. Wybór zależy od istniejącej architektury, zasad zespołu i integracji, a nie od sztywnego podziału na duże i małe produkty. W rozwijanej aplikacji Symfony skupiam się na zmianach, które można przejrzeć, przetestować i utrzymywać w kolejnych wydaniach.\n","Programowanie w Symfony dla sprzedaży biletów: składanie zamówień, integracje płatności, konta użytkowników i narzędzia administracyjne.",[342,345],{"label":343,"content":344},"Przy jakich projektach Symfony pracowałeś?","Moje doświadczenie komercyjne obejmuje platformę sprzedaży biletów na Formula 1, MotoGP, EICMA i EuroLeague: składanie zamówień, integracje płatności oraz narzędzia administracyjne.",{"label":346,"content":347},"Czy możesz dołączyć do istniejącego projektu Symfony?","Tak. Najpierw poznaję architekturę i proces wydań, a następnie określam zmiany i testy potrzebne do bezpiecznego rozwoju aplikacji.","i-simple-icons-symfony",[350],{"label":351,"to":352,"color":17,"icon":18},"symfony.com","https:\u002F\u002Fsymfony.com",{},[],"pl\u002Ftechnologies\u002Fsymfony","kEWH51vcYlbCcizU3cvTGDOQxraqUG6IAUpAoFrepA0",{"id":358,"title":359,"category":222,"content":360,"description":361,"extension":10,"faq":11,"icon":362,"links":363,"meta":369,"projects":370,"since":46,"stem":371,"updated":29,"__hash__":372},"technologies_pl\u002Fpl\u002Ftechnologies\u002Ftailwindcss.yml","Tailwind CSS","Tailwind CSS to framework CSS oparty na klasach narzędziowych. Używam go w interfejsach aplikacji i publicznych witrynach, między innymi VetCard, VetSpace, DigiSpace oraz w tym portfolio.\n\n## Stylowanie w praktyce\n\nW VetCard wspólne komponenty określają strukturę stron, a indywidualne kolory pozwalają zachować identyfikację placówek. W portfolio Tailwind CSS v4 współpracuje z Nuxt UI, a parametry motywu są zapisane w CSS. DigiSpace również korzysta z Tailwind w interfejsie administracyjnym.\n\n## Jak dbam o spójny wygląd\n\n- **Responsywny układ** — nawigacja, formularze i karty dopasowane do różnych ekranów.\n- **Wspólne parametry projektu** — kolory i odstępy używane w wielu komponentach.\n- **Ponowne użycie** — wydzielanie podobnych elementów w komponenty, gdy mają wspólne przeznaczenie.\n\n## Czego nie gwarantują klasy narzędziowe\n\nKlasy blisko znaczników ułatwiają czytanie stylów, ale zmiana wspólnego komponentu czy motywu może wpłynąć na wiele stron. Rozmiar CSS zależy od wykrytych klas i własnych stylów. Wygląd na telefonie, obsługę fokusu klawiatury i kontrast kolorów trzeba sprawdzić osobno — framework nie robi tego automatycznie.\n","Tailwind CSS dla responsywnych interfejsów Vue i Nuxt: wspólne komponenty, kolory placówek i łatwiejsze utrzymanie stylów.","i-simple-icons-tailwindcss",[364,367],{"label":365,"to":366,"color":17,"icon":18},"tailwindcss.com","https:\u002F\u002Ftailwindcss.com",{"label":20,"to":368,"color":17,"icon":18},"https:\u002F\u002Ftailwindcss.com\u002Fdocs\u002Fdetecting-classes-in-source-files",{},[63,45,24],"pl\u002Ftechnologies\u002Ftailwindcss","bEYrDTq-ym5oLsp1D90nD9Su-PHZf9bjrj3552QB5Ug",{"id":374,"title":375,"category":7,"content":376,"description":377,"extension":10,"faq":11,"icon":378,"links":379,"meta":385,"projects":386,"since":138,"stem":387,"updated":29,"__hash__":388},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fterraform.yml","Terraform","Terraform opisuje infrastrukturę w plikach konfiguracyjnych i zarządza zasobami za pomocą dostawców, czyli providerów. Korzystam z niego w infrastrukturze DigiPulse, aby konfigurację usług łatwiej było przeglądać i odtwarzać.\n\n## Konfiguracja i plan zmian\n\nProvider Docker daje Terraform dostęp do zasobów Dockera. Wspólna konfiguracja może opisywać podobne środowiska z różnymi zmiennymi wejściowymi. Każde wymaga własnego planu uwzględniającego aktualny stan: zapisany plan nie jest szablonem do użycia w innym środowisku.\n\n## Przestrzenie robocze i sekrety\n\nPrzestrzenie robocze CLI rozdzielają stan, ale nie stanowią granicy uprawnień. Pliki stanu i planu mogą zawierać sekrety nawet dla wartości oznaczonych jako sensitive. Środowiska wymagające silniejszej izolacji potrzebują osobnych danych dostępowych, chronionego magazynu stanu i odpowiednich uprawnień.\n\n## Infrastruktura a wydania aplikacji\n\nKonfiguracja infrastruktury opisuje zasoby i zależności, a wydania aplikacji mogą przechodzić przez oddzielny proces CI\u002FCD. Terraform wykrywa różnice między opisanym a rzeczywistym stanem podczas tworzenia planu, ale nie zapobiega stale ręcznym zmianom. Plan trzeba przejrzeć przed zastosowaniem, zwłaszcza gdy przewiduje wymianę lub usunięcie zasobu.\n","Infrastruktura jako kod z Terraform: zasoby Docker, konfiguracje środowisk i weryfikacja zmian przed wdrożeniem usług SaaS.","i-simple-icons-terraform",[380,383],{"label":381,"to":382,"color":17,"icon":18},"terraform.io","https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform",{"label":20,"to":384,"color":17,"icon":18},"https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform\u002Flanguage\u002Fstate\u002Fworkspaces",{},[25],"pl\u002Ftechnologies\u002Fterraform","jMqJSey4AfcW-qZffND8YXpjxYVmA2B8B9O_Nrp6v0c",{"id":390,"title":391,"category":222,"content":392,"description":393,"extension":10,"faq":11,"icon":394,"links":395,"meta":401,"projects":402,"since":64,"stem":403,"updated":29,"__hash__":404},"technologies_pl\u002Fpl\u002Ftechnologies\u002Ftypescript.yml","TypeScript","TypeScript dodaje statyczne sprawdzanie typów do JavaScript. Używam go w aplikacjach Vue i Nuxt, w tym VetCard i tym portfolio, aby interfejsy komponentów oraz modele danych były łatwiejsze do zrozumienia i zmiany.\n\n## Co opisuję typami\n\n- **Komponenty** — parametry wejściowe, zdarzenia i wspólny stan.\n- **Modele API** — oczekiwaną strukturę danych placówek i rezerwacji.\n- **Wspólna logika** — argumenty i wyniki funkcji composable.\n\nW tym repozytorium działa też sprawdzanie typów w CI oraz schematy przetłumaczonej treści. Te kontrole uzupełniają się, ale odpowiadają za różne zadania.\n\n## Gdzie kończy się sprawdzanie statyczne\n\nTypy TypeScript są usuwane z wygenerowanego JavaScript. Adnotacja typu nie weryfikuje rzeczywistej odpowiedzi API. Dane zewnętrzne wymagają walidacji podczas działania aplikacji, a nieuzgodniona zmiana backendu nie pojawi się automatycznie jako błąd kompilatora.\n\n## Łatwiejsze utrzymanie\n\nPo zmianie zadeklarowanego modelu kontrola typów może wskazać niezgodne miejsca w kodzie. Pomaga to konsekwentnie zaktualizować formularze i szablony. Typowanie uzupełnia testy i walidację danych, zamiast usuwać potrzebę ich stosowania.\n","TypeScript w Vue i Nuxt: typowane komponenty, modele API i bezpieczniejsza refaktoryzacja z walidacją danych zewnętrznych.","i-simple-icons-typescript",[396,399],{"label":397,"to":398,"color":17,"icon":18},"typescriptlang.org","https:\u002F\u002Fwww.typescriptlang.org",{"label":20,"to":400,"color":17,"icon":18},"https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002F2\u002Fbasic-types.html",{},[45,24],"pl\u002Ftechnologies\u002Ftypescript","yxBKvm0_1AoQmXdv6t6c5rBnhQFUwscqBjIcur-YNII",{"id":406,"title":407,"category":222,"content":408,"description":409,"extension":10,"faq":11,"icon":410,"links":411,"meta":417,"projects":418,"since":46,"stem":419,"updated":29,"__hash__":420},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fvite.yml","Vite","Vite to narzędzie do tworzenia i budowania frontendu. Korzystam z niego przez Nuxt w VetCard i tym portfolio, a także przez integrację z Laravel w DigiSpace.\n\n## Podczas pracy nad kodem\n\nSerwer deweloperski obsługuje wymianę modułów bez pełnego przeładowania strony, czyli HMR. Wiele zmian można więc zobaczyć od razu w otwartej aplikacji. Rzeczywisty czas reakcji zależy jednak od projektu, wtyczek i komputera — nie jest bezwarunkową obietnicą natychmiastowej aktualizacji.\n\n## Przygotowanie do wdrożenia\n\nBudowanie przygotowuje pliki frontendu, w tym nazwy z hashem i podział kodu na części przy odpowiedniej konfiguracji. Nuxt i Laravel dodają własną integrację wokół wyniku. Wewnętrzny bundler zależy od wersji Vite, dlatego przy zmianie konfiguracji sprawdzam zainstalowane wersje narzędzi.\n\n## Co sprawdzam po zbudowaniu aplikacji\n\nUdane budowanie nie dowodzi, że każda strona działa. Adresy plików, zmienne środowiskowe, renderowanie na serwerze i zachowanie przeglądarki trzeba sprawdzić w docelowym środowisku. Vite jest częścią procesu wydania; testy przeglądarkowe i kontrola uruchomionej strony obejmują to, czego kompilacja nie weryfikuje.\n","Vite w Vue, Nuxt i Laravel: wygodna praca lokalna, przygotowanie plików do publikacji i weryfikacja wersji produkcyjnej.","i-simple-icons-vite",[412,415],{"label":413,"to":414,"color":17,"icon":18},"vite.dev","https:\u002F\u002Fvite.dev",{"label":20,"to":416,"color":17,"icon":18},"https:\u002F\u002Fvite.dev\u002Fguide\u002F",{},[63],"pl\u002Ftechnologies\u002Fvite","I1OO3WwqeA4bVBUNHe3PVfWEqiJAhrW6-_TpKKs1XMo",{"id":422,"title":423,"category":222,"content":424,"description":425,"extension":10,"faq":426,"icon":433,"links":434,"meta":438,"projects":439,"since":85,"stem":440,"updated":29,"__hash__":441},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fvue.yml","Vue.js","Vue.js to framework JavaScript do tworzenia interfejsów. Używam go w panelu placówki VetSpace, publicznej witrynie VetCard i interfejsach administracyjnych, między innymi w DigiSpace.\n\n## Różne interfejsy, wspólne narzędzia\n\n- **Panele aplikacji** — formularze, listy i procesy dla zalogowanych użytkowników.\n- **Publiczne strony** — komponenty Vue w stronach Nuxt renderowanych na serwerze.\n- **Integracja z Laravel** — Inertia łączy trasy serwerowe ze stronami Vue bez potrzeby osobnego publicznego API dla tych ekranów.\n\n## Przykład strony placówki\n\nVetCard potrzebuje zarówno czytelnych informacji o placówce, jak i interaktywnej rezerwacji wizyt. Nuxt odpowiada za renderowanie strony na serwerze, a Vue za interakcje użytkownika. Ta sama witryna pomaga więc poznać placówkę i wybrać termin wizyty.\n\n## Utrzymanie komponentów\n\nComposition API pomaga grupować powiązaną logikę, a TypeScript jasno określa parametry i wyniki. Oddzielam pobieranie danych, wspólną logikę i prezentację tam, gdzie poprawia to czytelność. Wybór frameworka nadal zależy od istniejącego projektu i zespołu: różne interfejsy mogą wymagać różnej architektury.\n","Tworzenie aplikacji Vue.js: panele SaaS, publiczne strony, wspólne komponenty, integracja z Laravel i renderowanie przez Nuxt.",[427,430],{"label":428,"content":429},"Używasz Vue z Nuxt czy Laravel?","Korzystam z obu rozwiązań. Nuxt stosuję na publicznych stronach takich jak VetCard, a Vue z Laravel lub Inertia w interfejsach aplikacji. Wybór zależy od routingu, dostępu do danych i renderowania.",{"label":431,"content":432},"Jak podszedłbyś do migracji z Vue 2 do Vue 3?","Najpierw sprawdziłbym zależności i niezgodne API, a potem zaplanował zmiany według komponentów lub tras, jeśli pozwala na to architektura. Testy i stopniowe wydania pomagają kontrolować przejście.","i-simple-icons-vuedotjs",[435],{"label":436,"to":437,"color":17,"icon":18},"vuejs.org","https:\u002F\u002Fvuejs.org",{},[24,45,25,63],"pl\u002Ftechnologies\u002Fvue","6hwithj9eifKxgkkTpCFcDJIwI6V7Q2hjnokWsx5k9k"]