[{"data":1,"prerenderedAt":2330},["ShallowReactive",2],{"post:\u002Fblog\u002Ffigcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo":3,"surround:\u002Fblog\u002Ffigcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo":1450,"related:\u002Fblog\u002Ffigcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo":1456,"categories":1488,"tags":1556,"post-author:maciej-walczak":2316},{"id":4,"title":5,"author":6,"body":7,"categories":1425,"comments":1428,"cover":15,"coverAlt":13,"date":1429,"description":1430,"draft":1431,"extension":1432,"hidden":1431,"meta":1433,"navigation":1428,"path":1434,"readingTime":1435,"redirectFrom":1436,"seo":1437,"sitemap":1438,"slug":1439,"stem":1440,"tags":1441,"updated":1448,"wpId":1448,"__hash__":1449},"blog\u002Fblog\u002F2026-10-14-figcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo.md","FigCraft – czyli Figma od nowa, w Ruście i za darmo","maciej-walczak",{"type":8,"value":9,"toc":1403},"minimark",[10,17,32,42,45,50,63,66,69,109,112,118,122,133,136,162,165,169,172,186,193,197,200,203,208,215,436,457,461,468,472,479,510,513,519,523,533,739,785,792,804,807,822,826,832,922,928,931,959,969,991,1005,1009,1012,1022,1025,1042,1051,1054,1061,1072,1075,1079,1104,1108,1115,1119,1122,1180,1193,1207,1211,1251,1262,1271,1288,1297,1304,1313,1320,1323,1327,1330,1369,1372,1376,1383,1386,1389,1393,1396,1399],[11,12],"figure",{"alt":13,"height":14,"src":15,"width":16},"Logo FigCraft i napis „czyli Figma od nowa, w Ruście i za darmo” obok laptopa z otwartym edytorem FigCraft, krab Ferris i fragment kodu w Ruście oraz lista – nowa, natywna aplikacja, napisana w Ruście, darmowa i open source",1086,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-okladka.png",1448,[18,19,20,21,31],"p",{},"Trafiłem dziś na ",[22,23,27],"a",{"href":24,"rel":25},"https:\u002F\u002Fgetartcraft.com\u002Fapps\u002Ffigcraft",[26],"nofollow",[28,29,30],"strong",{},"FigCraft"," – wyskoczył mi w feedzie na Facebooku – i przyznam, że opis na stronie brzmiał jak spis życzeń każdego front-endowca, który choć raz musiał przekonywać kogoś w firmie do kolejnej licencji: „Interface design, rebuilt in pure Rust”. Czyli – w dużym skrócie – Figma napisana od zera, jako natywna aplikacja desktopowa. Darmowa, open source, bez konta, bez telemetrii i bez abonamentu.",[18,33,34,35,41],{},"Ktoś powie: kolejna „alternatywa dla Figmy”, takich już trochę było. I to prawda. Ale tu jest kilka rzeczy, które sprawiły, że nie przewinąłem dalej – a jedna z nich to serwer MCP, czyli możliwość podpięcia agenta AI pod aplikację. A że ostatnio sporo piszę o pracy z Claude Code (choćby w ",[22,36,38],{"href":37},"\u002Fblog\u002Ftinyjs-natywna-aplikacja-w-kilka-godzin-i-ponizej-10-mb",[28,39,40],{},"poprzednim wpisie o TinyJS","), to było mi z FigCraftem po drodze.",[18,43,44],{},"Od razu uczciwie – to jest wpis „na gorąco”. Testowałem na szybko, może ze 2 godziny, na MacBooku Pro M5. Głównie pod jednym kątem: czy FigCraft nadaje się do projektowania interfejsów i layoutów lokalnie, na własne potrzeby – razem z AI. Bez wnikania w każdy szczegół. No to lecimy…",[46,47,49],"h2",{"id":48},"a-co-to-za-zwierz","A co to za zwierz?",[18,51,52,53,56,57,62],{},"FigCraft to część większego projektu – ",[28,54,55],{},"ArtCraft",", czyli rodziny aplikacji z dopiskiem „Craft” w nazwie. Twórcy zapowiadają cały zestaw darmowych narzędzi, które mają robić to, co pakiet Adobe: PhotoCraft (grafika rastrowa), VectorCraft (ilustracja), FilmCraft (montaż wideo), LightCraft (zdjęcia i RAW-y), DesignCraft (skład) i kilka innych. Wszystkie pisane w Ruście, bez Electrona. Kod leży na GitHubie, w organizacji ",[22,58,61],{"href":59,"rel":60},"https:\u002F\u002Fgithub.com\u002Fstorytold\u002Ffigcraft",[26],"storytold",".",[18,64,65],{},"Sam FigCraft w README opisany jest jako „clean-room reimplementation of Figma” – czyli odtworzenie Figmy od podstaw, bez korzystania z jej kodu. Licencja: MIT albo Apache-2.0, do wyboru.",[18,67,68],{},"Co jest w środku? Lista funkcji wygląda zaskakująco poważnie:",[70,71,72,79,85,91,97,103],"ul",{},[73,74,75,78],"li",{},[28,76,77],{},"ramki i auto layout"," – w obu kierunkach, z zawijaniem i gridem, do tego constrainty i siatki",[73,80,81,84],{},[28,82,83],{},"komponenty i warianty"," – instancje z nadpisaniami, zestawy komponentów, style i zmienne z trybem jasnym i ciemnym",[73,86,87,90],{},[28,88,89],{},"wektory"," – pióro, ołówek, shape builder, operacje boolowskie, obrys o zmiennej grubości",[73,92,93,96],{},[28,94,95],{},"prototypowanie"," – połączenia, triggery, animowane przejścia i tryb prezentacji",[73,98,99,102],{},[28,100,101],{},"Dev Mode"," – pomiary i generowany kod: CSS, HTML, React, SwiftUI i Compose",[73,104,105,108],{},[28,106,107],{},"sesje na żywo"," – host wysyła link, goście edytują ten sam plik w czasie rzeczywistym, z kursorami i czatem",[18,110,111],{},"Vue w Dev Mode… nie ma. No cóż, nie można mieć wszystkiego 🙂",[18,113,114,115,62],{},"Aplikacja działa na macOS (Apple Silicon i Intel), Windowsie (również ARM), Linuksie (Flatpak, AppImage, .deb, .rpm), a nawet na FreeBSD. Jest też wersja w WebAssembly, którą można postawić u siebie na serwerze. Aktualna wersja w chwili pisania to ",[28,116,117],{},"0.5.1",[46,119,121],{"id":120},"haczyk-oczywiście-że-jest","Haczyk? Oczywiście, że jest…",[18,123,124,125,128,129,132],{},"I to wypisany wprost na stronie: ",[28,126,127],{},"early alpha",". Autorzy w README sami zresztą szacują, że FigCraft jest mniej więcej w ",[28,130,131],{},"49%"," drogi do tego, żeby zastąpić Figmę w prawdziwej pracy. Szacunek za szczerość – rzadko który projekt tak otwarcie mówi, że jeszcze nie jest gotowy.",[18,134,135],{},"Kilka rzeczy, o których trzeba wiedzieć na starcie:",[70,137,138,146,153,156,159],{},[73,139,140,141,145],{},"pliki zapisywane są lokalnie, jako archiwa ",[142,143,144],"code",{},".figcraft"," – chmury i kont na razie nie ma",[73,147,148,149,152],{},"import plików ",[142,150,151],{},".fig"," działa w trybie „best effort” i – cytując README – nie był jeszcze sprawdzany na prawdziwych dokumentach z Figmy",[73,154,155],{},"da się za to wczytać plik wyeksportowany przez Figma REST API (JSON), łącznie z prototypami i zmiennymi",[73,157,158],{},"pluginy działają w WebAssembly, a nie w systemie pluginów Figmy – więc ulubione wtyczki trzeba sobie odpuścić",[73,160,161],{},"multiplayer to dopiero „first preview”",[18,163,164],{},"Czyli o ile do zabawy i małych projektów wygląda obiecująco, o tyle przenoszenie na to firmowego design systemu to na dziś raczej odważny pomysł.",[46,166,168],{"id":167},"instalacja","Instalacja",[18,170,171],{},"Poszedłem najprostszą drogą i pobrałem 2 pliki:",[70,173,174,180],{},[73,175,176,179],{},[142,177,178],{},"figcraft-0.5.1-macos-universal.dmg"," – sama aplikacja, 92 MB",[73,181,182,185],{},[142,183,184],{},"figcraft-cli-0.5.1-macos-universal.zip"," – narzędzie wiersza poleceń, 76 MB (o nim za chwilę, bo to właśnie przez nie AI rozmawia z FigCraftem)",[18,187,188,189,192],{},"Można też zainstalować wszystko przez ArtCraft Launcher albo zbudować ze źródeł (",[142,190,191],{},"cargo run --release -p figcraft","), ale do szybkiego testu DMG w zupełności wystarczy. Strona obiecuje, że aplikacja „opens instantly” – i na moim komputerze faktycznie uruchamia się błyskawicznie.",[46,194,196],{"id":195},"pierwsze-wrażenia","Pierwsze wrażenia",[18,198,199],{},"Podobieństwo do Figmy jest wręcz bliźniacze. Układ paneli, narzędzia, nazewnictwo – jeśli ktoś w Figmie pracował, to czuje się tu jak w domu i ręka sama wie, gdzie kliknąć.",[18,201,202],{},"Jedno zastrzeżenie: moje doświadczenia z Figmą to przede wszystkim perspektywa front-endowca – praca z gotowym projektem, odczytywanie wymiarów, eksport assetów. Nie jestem projektantem, więc nie brałem na warsztat auto layoutu, wariantów i nadpisań „z ręki” ani importu plików z Figmy. To zostawiam na inny raz – albo dla kogoś, kto w Figmie spędza całe dnie.",[204,205,207],"h3",{"id":206},"dev-mode-czyli-co-z-tego-ma-front-endowiec","Dev Mode, czyli co z tego ma front-endowiec",[18,209,210,211,214],{},"Generowanie kodu jest dostępne również z CLI (komenda ",[142,212,213],{},"inspect.code","), więc sprawdziłem je na tej samej karcie logowania, którą zbudował agent (o tym niżej). Wynik dla Reacta wygląda tak:",[216,217,222],"pre",{"className":218,"code":219,"language":220,"meta":221,"style":221},"language-jsx shiki shiki-themes github-light-default github-light-default github-dark-default","export function Logowanie() {\n  return (\n    \u003Cdiv className=\"logowanie\">\n      \u003Cp className=\"zaloguj-si\">Zaloguj się\u003C\u002Fp>\n      \u003Cp className=\"witaj-ponownie-na-nowoczesny-frontend-pl\">Witaj ponownie na nowoczesny-frontend.pl\u003C\u002Fp>\n      \u003Cdiv className=\"pole-e-mail\">\n        \u003Cp className=\"jan-example-com\">jan@example.com\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cdiv className=\"przycisk\">\n        \u003Cp className=\"zaloguj\">Zaloguj\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  );\n}\n","jsx","",[142,223,224,244,253,277,299,320,336,358,368,384,405,414,424,430],{"__ignoreMap":221},[225,226,229,233,236,240],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"s5nWI","export",[225,234,235],{"class":231}," function",[225,237,239],{"class":238},"sd69k"," Logowanie",[225,241,243],{"class":242},"s_bOF","() {\n",[225,245,247,250],{"class":227,"line":246},2,[225,248,249],{"class":231},"  return",[225,251,252],{"class":242}," (\n",[225,254,256,259,263,267,270,274],{"class":227,"line":255},3,[225,257,258],{"class":242},"    \u003C",[225,260,262],{"class":261},"sfEsd","div",[225,264,266],{"class":265},"sDkKp"," className",[225,268,269],{"class":231},"=",[225,271,273],{"class":272},"s-BGO","\"logowanie\"",[225,275,276],{"class":242},">\n",[225,278,280,283,285,287,289,292,295,297],{"class":227,"line":279},4,[225,281,282],{"class":242},"      \u003C",[225,284,18],{"class":261},[225,286,266],{"class":265},[225,288,269],{"class":231},[225,290,291],{"class":272},"\"zaloguj-si\"",[225,293,294],{"class":242},">Zaloguj się\u003C\u002F",[225,296,18],{"class":261},[225,298,276],{"class":242},[225,300,302,304,306,308,310,313,316,318],{"class":227,"line":301},5,[225,303,282],{"class":242},[225,305,18],{"class":261},[225,307,266],{"class":265},[225,309,269],{"class":231},[225,311,312],{"class":272},"\"witaj-ponownie-na-nowoczesny-frontend-pl\"",[225,314,315],{"class":242},">Witaj ponownie na nowoczesny-frontend.pl\u003C\u002F",[225,317,18],{"class":261},[225,319,276],{"class":242},[225,321,323,325,327,329,331,334],{"class":227,"line":322},6,[225,324,282],{"class":242},[225,326,262],{"class":261},[225,328,266],{"class":265},[225,330,269],{"class":231},[225,332,333],{"class":272},"\"pole-e-mail\"",[225,335,276],{"class":242},[225,337,339,342,344,346,348,351,354,356],{"class":227,"line":338},7,[225,340,341],{"class":242},"        \u003C",[225,343,18],{"class":261},[225,345,266],{"class":265},[225,347,269],{"class":231},[225,349,350],{"class":272},"\"jan-example-com\"",[225,352,353],{"class":242},">jan@example.com\u003C\u002F",[225,355,18],{"class":261},[225,357,276],{"class":242},[225,359,361,364,366],{"class":227,"line":360},8,[225,362,363],{"class":242},"      \u003C\u002F",[225,365,262],{"class":261},[225,367,276],{"class":242},[225,369,371,373,375,377,379,382],{"class":227,"line":370},9,[225,372,282],{"class":242},[225,374,262],{"class":261},[225,376,266],{"class":265},[225,378,269],{"class":231},[225,380,381],{"class":272},"\"przycisk\"",[225,383,276],{"class":242},[225,385,387,389,391,393,395,398,401,403],{"class":227,"line":386},10,[225,388,341],{"class":242},[225,390,18],{"class":261},[225,392,266],{"class":265},[225,394,269],{"class":231},[225,396,397],{"class":272},"\"zaloguj\"",[225,399,400],{"class":242},">Zaloguj\u003C\u002F",[225,402,18],{"class":261},[225,404,276],{"class":242},[225,406,408,410,412],{"class":227,"line":407},11,[225,409,363],{"class":242},[225,411,262],{"class":261},[225,413,276],{"class":242},[225,415,417,420,422],{"class":227,"line":416},12,[225,418,419],{"class":242},"    \u003C\u002F",[225,421,262],{"class":261},[225,423,276],{"class":242},[225,425,427],{"class":227,"line":426},13,[225,428,429],{"class":242},"  );\n",[225,431,433],{"class":227,"line":432},14,[225,434,435],{"class":242},"}\n",[18,437,438,439,441,442,444,445,448,449,452,453,456],{},"Do tego osobny plik CSS z flexboxem, odstępami, kolorami i fontami – wartości zgadzają się z projektem co do piksela. Ale od razu widać problem z dostępnością: same ",[142,440,262],{}," i ",[142,443,18],{},". Nagłówek nie jest nagłówkiem, pole e-mail nie jest ",[142,446,447],{},"input","em, a przycisk nie jest ",[142,450,451],{},"button","em. A klasa ",[142,454,455],{},"zaloguj-si","? Polskie „ę” po prostu wypadło z nazwy. Trudno mieć o to pretensje do narzędzia graficznego, które nie wie, co ma oznaczać ta czy inna ramka. Ale jako punkt wyjścia do kodu produkcyjnego to się raczej nie nada. Jako ściąga z wartościami CSS – jak najbardziej.",[204,458,460],{"id":459},"dostępność","Dostępność",[18,462,463,464,467],{},"Ciekawostka dla tych, którzy czytają mnie dłużej – w README pojawia się ",[28,465,466],{},"AccessKit",", czyli biblioteka do obsługi dostępności w natywnych aplikacjach w Ruście. Przy narzędziach graficznych to rzadkość. Z VoiceOverem jeszcze nie siadałem, ale to na pewno pierwsza rzecz na liście przy kolejnym podejściu.",[46,469,471],{"id":470},"figcraft-i-ai-czyli-mcp","FigCraft i AI – czyli MCP",[18,473,474,475,478],{},"I tu dochodzimy do tego, co zainteresowało mnie najbardziej. Każdy element menu, narzędzie i gest w FigCrafcie to jedna z ponad ",[28,476,477],{},"400 komend"," – i ten sam rejestr komend jest dostępny dla:",[70,480,481,491,496],{},[73,482,483,486,487,490],{},[28,484,485],{},"CLI"," (",[142,488,489],{},"figcraft-cli",") – renderowanie i eksport plików, uruchamianie skryptów JSON bez okna",[73,492,493],{},[28,494,495],{},"kanału sterującego JSON",[73,497,498,501,502,505,506,509],{},[28,499,500],{},"serwera MCP"," – ",[142,503,504],{},"figcraft-cli mcp",", działającego bez okna albo podpiętego pod uruchomioną aplikację (",[142,507,508],{},"--attach",")",[18,511,512],{},"Innymi słowy – agent AI może robić w FigCrafcie dokładnie to samo, co ja myszką. Bez scrapowania ekranu i bez kombinowania.",[18,514,515,516,518],{},"Brzmi pięknie, więc zamiast wierzyć na słowo – sprawdziłem. A konkretnie poprosiłem Claude Code, żeby wziął ",[142,517,489],{}," w wersji 0.5.1 (osobna paczka, po rozpakowaniu ok. 150 MB, leży u mnie w Aplikacjach obok samego FigCraft.app) i zobaczył, czy da się go używać z poziomu agenta.",[204,520,522],{"id":521},"skrypt-zamiast-myszki","Skrypt zamiast myszki",[18,524,525,526,529,530,532],{},"Najprostsza droga to ",[142,527,528],{},"figcraft-cli run"," – podajemy plik JSON z listą komend, a CLI wykonuje je bez otwierania okna i zapisuje wynik do pliku ",[142,531,144],{},". Kolejne warstwy dostają po prostu kolejne numery (pierwsza strona to 1, pierwsza warstwa to 2), więc w następnych krokach można się do nich odwołać:",[216,534,538],{"className":535,"code":536,"language":537,"meta":221,"style":221},"language-json shiki shiki-themes github-light-default github-light-default github-dark-default","[\n  {\"command\": \"frame.create\", \"params\": {\"name\": \"Logowanie\", \"width\": 400, \"props\": {\"fill\": \"#ffffff\", \"layout\": \"vertical\", \"gap\": 16, \"padding\": 32, \"cornerRadius\": 16, \"sizingV\": \"hug\"}}},\n  {\"command\": \"node.create\", \"params\": {\"type\": \"text\", \"parent\": 2, \"text\": \"Zaloguj się\", \"props\": {\"fontSize\": 28, \"fontFamily\": \"Inter\", \"fontStyle\": \"Bold\"}}}\n]\n","json",[142,539,540,545,653,734],{"__ignoreMap":221},[225,541,542],{"class":227,"line":228},[225,543,544],{"class":242},"[\n",[225,546,547,550,553,556,559,562,565,568,571,573,576,578,581,583,586,588,591,593,596,598,601,603,606,608,611,613,616,618,621,623,626,628,631,633,636,638,640,642,645,647,650],{"class":227,"line":246},[225,548,549],{"class":242},"  {",[225,551,552],{"class":261},"\"command\"",[225,554,555],{"class":242},": ",[225,557,558],{"class":272},"\"frame.create\"",[225,560,561],{"class":242},", ",[225,563,564],{"class":261},"\"params\"",[225,566,567],{"class":242},": {",[225,569,570],{"class":261},"\"name\"",[225,572,555],{"class":242},[225,574,575],{"class":272},"\"Logowanie\"",[225,577,561],{"class":242},[225,579,580],{"class":261},"\"width\"",[225,582,555],{"class":242},[225,584,585],{"class":265},"400",[225,587,561],{"class":242},[225,589,590],{"class":261},"\"props\"",[225,592,567],{"class":242},[225,594,595],{"class":261},"\"fill\"",[225,597,555],{"class":242},[225,599,600],{"class":272},"\"#ffffff\"",[225,602,561],{"class":242},[225,604,605],{"class":261},"\"layout\"",[225,607,555],{"class":242},[225,609,610],{"class":272},"\"vertical\"",[225,612,561],{"class":242},[225,614,615],{"class":261},"\"gap\"",[225,617,555],{"class":242},[225,619,620],{"class":265},"16",[225,622,561],{"class":242},[225,624,625],{"class":261},"\"padding\"",[225,627,555],{"class":242},[225,629,630],{"class":265},"32",[225,632,561],{"class":242},[225,634,635],{"class":261},"\"cornerRadius\"",[225,637,555],{"class":242},[225,639,620],{"class":265},[225,641,561],{"class":242},[225,643,644],{"class":261},"\"sizingV\"",[225,646,555],{"class":242},[225,648,649],{"class":272},"\"hug\"",[225,651,652],{"class":242},"}}},\n",[225,654,655,657,659,661,664,666,668,670,673,675,678,680,683,685,688,690,692,694,697,699,701,703,706,708,711,713,716,718,721,723,726,728,731],{"class":227,"line":255},[225,656,549],{"class":242},[225,658,552],{"class":261},[225,660,555],{"class":242},[225,662,663],{"class":272},"\"node.create\"",[225,665,561],{"class":242},[225,667,564],{"class":261},[225,669,567],{"class":242},[225,671,672],{"class":261},"\"type\"",[225,674,555],{"class":242},[225,676,677],{"class":272},"\"text\"",[225,679,561],{"class":242},[225,681,682],{"class":261},"\"parent\"",[225,684,555],{"class":242},[225,686,687],{"class":265},"2",[225,689,561],{"class":242},[225,691,677],{"class":261},[225,693,555],{"class":242},[225,695,696],{"class":272},"\"Zaloguj się\"",[225,698,561],{"class":242},[225,700,590],{"class":261},[225,702,567],{"class":242},[225,704,705],{"class":261},"\"fontSize\"",[225,707,555],{"class":242},[225,709,710],{"class":265},"28",[225,712,561],{"class":242},[225,714,715],{"class":261},"\"fontFamily\"",[225,717,555],{"class":242},[225,719,720],{"class":272},"\"Inter\"",[225,722,561],{"class":242},[225,724,725],{"class":261},"\"fontStyle\"",[225,727,555],{"class":242},[225,729,730],{"class":272},"\"Bold\"",[225,732,733],{"class":242},"}}}\n",[225,735,736],{"class":227,"line":279},[225,737,738],{"class":242},"]\n",[216,740,744],{"className":741,"code":742,"language":743,"meta":221,"style":221},"language-bash shiki shiki-themes github-light-default github-light-default github-dark-default","figcraft-cli run login.json --out login.figcraft\nfigcraft-cli export login.figcraft -o login.png --scale 2\n","bash",[142,745,746,763],{"__ignoreMap":221},[225,747,748,751,754,757,760],{"class":227,"line":228},[225,749,489],{"class":750},"sQJ0q",[225,752,753],{"class":272}," run",[225,755,756],{"class":272}," login.json",[225,758,759],{"class":265}," --out",[225,761,762],{"class":272}," login.figcraft\n",[225,764,765,767,770,773,776,779,782],{"class":227,"line":246},[225,766,489],{"class":750},[225,768,769],{"class":272}," export",[225,771,772],{"class":272}," login.figcraft",[225,774,775],{"class":265}," -o",[225,777,778],{"class":272}," login.png",[225,780,781],{"class":265}," --scale",[225,783,784],{"class":265}," 2\n",[18,786,787,788,791],{},"Na każdy krok CLI odpowiada jedną linią JSON-a (",[142,789,790],{},"{\"command\":\"frame.create\",\"ok\":true,\"result\":{\"id\":2},\"step\":0}","), więc agent od razu wie, co się udało i jakie id dostała nowa warstwa. Cały skrypt z 8 krokami – ramka z auto layoutem, nagłówek, opis, pole e-mail, przycisk zamieniony w komponent – wykonał się w ok. 60 ms. Efekt:",[11,793,798],{"alt":794,"height":795,"src":796,"width":797},"Karta logowania wyeksportowana z FigCraft: nagłówek „Zaloguj się”, podtytuł „Witaj ponownie na nowoczesny-frontend.pl”, pole e-mail i zielony przycisk „Zaloguj”",506,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-login-card.png",800,[18,799,800,801],{},"Karta logowania zbudowana skryptem z 8 komend i wyeksportowana przez ",[142,802,803],{},"figcraft-cli export",[18,805,806],{},"Polskie znaki na miejscu, auto layout się zgadza, przycisk rozciąga się na całą szerokość. Szału nie ma, ale to jest dokładnie to, co zleciłem – i ani razu nie dotknąłem myszki 🙂",[18,808,809,810,813,814,817,818,821],{},"Lista komend jest dostępna przez ",[142,811,812],{},"figcraft-cli commands"," (z opisem parametrów, a z ",[142,815,816],{},"--json"," w formie, którą agent łatwo przetrawi). Ciekawostka – na stronie jest „400+”, a w wersji 0.5.1 naliczyłem ich ",[28,819,820],{},"536",". Najwięcej dotyczy tekstu (52), widoku (44) i wektorów (40).",[204,823,825],{"id":824},"serwer-mcp","Serwer MCP",[18,827,828,829,831],{},"Druga droga to ",[142,830,504],{},", czyli serwer MCP na stdio. Po podłączeniu wystawia agentowi 18 narzędzi:",[70,833,834,853,870,884,897,907],{},[73,835,836,501,839,561,842,441,845,848,849,852],{},[28,837,838],{},"ogólne",[142,840,841],{},"list_commands",[142,843,844],{},"run_command",[142,846,847],{},"batch"," (kilka komend jako jeden krok cofania, więc jednym ",[142,850,851],{},"undo"," da się odkręcić całość)",[73,854,855,501,858,561,861,561,864,561,867],{},[28,856,857],{},"warstwy",[142,859,860],{},"create_node",[142,862,863],{},"set_properties",[142,865,866],{},"get_node",[142,868,869],{},"select",[73,871,872,501,875,561,878,441,881],{},[28,873,874],{},"podgląd",[142,876,877],{},"inspect_document",[142,879,880],{},"inspect_ui",[142,882,883],{},"screenshot",[73,885,886,501,889,561,892,561,895],{},[28,887,888],{},"pliki",[142,890,891],{},"open_file",[142,893,894],{},"save_file",[142,896,232],{},[73,898,899,501,902,561,904],{},[28,900,901],{},"historia",[142,903,851],{},[142,905,906],{},"redo",[73,908,909,501,912,561,915,561,918,921],{},[28,910,911],{},"„ręce”",[142,913,914],{},"pointer",[142,916,917],{},"key",[142,919,920],{},"type_text",", czyli symulowanie myszki i klawiatury",[18,923,924,925,927],{},"Najbardziej ucieszył mnie ",[142,926,883],{},". Pamiętacie wpis o TinyJS? Największym problemem było tam to, że Claude nie widział aplikacji, którą budował. Tutaj agent może w każdej chwili zrobić zrzut swojej pracy, obejrzeć go i poprawić to, co się rozjechało. Sprawdziłem – działa także w trybie bez okna.",[18,929,930],{},"Podpięcie do Claude Code to jedna komenda:",[216,932,934],{"className":741,"code":933,"language":743,"meta":221,"style":221},"claude mcp add figcraft -- \u002FApplications\u002Ffigcraft-cli-0.5.1-macos-universal\u002Ffigcraft-cli mcp\n",[142,935,936],{"__ignoreMap":221},[225,937,938,941,944,947,950,953,956],{"class":227,"line":228},[225,939,940],{"class":750},"claude",[225,942,943],{"class":272}," mcp",[225,945,946],{"class":272}," add",[225,948,949],{"class":272}," figcraft",[225,951,952],{"class":265}," --",[225,954,955],{"class":272}," \u002FApplications\u002Ffigcraft-cli-0.5.1-macos-universal\u002Ffigcraft-cli",[225,957,958],{"class":272}," mcp\n",[18,960,961,962,964,965,968],{},"Jest też tryb ",[142,963,508],{},", w którym serwer MCP steruje uruchomioną aplikacją (trzeba ją odpalić z parametrem ",[142,966,967],{},"--control \u003Cport>","). Na ekranie widać wtedy na żywo, jak agent rysuje.",[18,970,971,972,975,976,978,979,981,982,985,986,441,988,990],{},"Ten tryb też sprawdziłem. Po uruchomieniu aplikacji z ",[142,973,974],{},"--control 47800"," w terminalu pojawia się komunikat „FigCraft control server listening on 127.0.0.1:47800” – kanał nasłuchuje wyłącznie lokalnie, więc nikt z sieci się pod niego nie podepnie. Agent zbudował tę samą kartę logowania warstwa po warstwie, a ja patrzyłem, jak w panelu warstw pojawiają się kolejne elementy. Pojedyncze wywołanie ",[142,977,860],{}," trwało 13–37 ms, a ",[142,980,883],{}," z ",[142,983,984],{},"window: true"," zwrócił zrzut całego okna aplikacji (1440×900) – czyli agent widzi nie tylko projekt, ale też panele i zaznaczenie. Działają również ",[142,987,851],{},[142,989,906],{}," – zmiany agenta trafiają do zwykłej historii dokumentu.",[11,992,997],{"alt":993,"height":994,"src":995,"width":996},"Okno aplikacji FigCraft: po lewej panel warstw z ramką „Logowanie (live)”, na środku zaznaczona karta logowania o wymiarach 400 na 192, po prawej panel Design z ustawieniami auto layoutu",900,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-live-window.png",1440,[18,998,999,1000,1002,1003],{},"Zrzut okna, który agent zrobił sam – narzędziem ",[142,1001,883],{}," z opcją ",[142,1004,984],{},[204,1006,1008],{"id":1007},"wyrysuj-panel-rejestracji","„Wyrysuj panel rejestracji”",[18,1010,1011],{},"Karta logowania to jednak prosta rzecz. Chciałem zobaczyć, co agent zrobi, gdy dostanie zadanie bardziej po ludzku – bez listy pól, bez kolorów, bez wymiarów. Całe polecenie brzmiało: „wyrysuj panel rejestracji”. Tylko tyle i aż tyle.",[18,1013,1014,1015,561,1017,561,1019,1021],{},"Claude Code nie zaczął od rysowania, tylko od napisania sobie kilku pomocniczych funkcji – „pole z etykietą”, „pionowy stos”, „tekst” – i dopiero z nich złożył cały ekran. Trochę jak programista, który, zanim zacznie kopiować ten sam kawałek kodu 4 razy, robi z niego komponent 🙂 Z drobnym zastrzeżeniem: w tej sesji narzędzia MCP nie były jeszcze wczytane, więc agent rozmawiał przez krótki skrypt w Pythonie z serwerem MCP podpiętym pod uruchomioną aplikację, wysyłając te same wywołania (",[142,1016,860],{},[142,1018,869],{},[142,1020,883],{},"), które normalnie wysłałby bezpośrednio.",[18,1023,1024],{},"Co wyszło? Karta „Rejestracja” postawiona obok karty logowania, z auto layoutem (wysokość dopasowana do treści – 650 px), zaokrągleniem i cieniem. W środku:",[70,1026,1027,1030,1033,1036,1039],{},[73,1028,1029],{},"nagłówek „Załóż konto” z podtytułem",[73,1031,1032],{},"4 pola z etykietami: imię i nazwisko, e-mail, hasło (z podpowiedzią „Minimum 8 znaków, w tym cyfra”) i powtórzenie hasła",[73,1034,1035],{},"checkbox z akceptacją regulaminu",[73,1037,1038],{},"zielony przycisk „Utwórz konto” – w tym samym kolorze co przycisk logowania",[73,1040,1041],{},"stopka „Masz już konto? Zaloguj się”",[11,1043,1048],{"alt":1044,"height":1045,"src":1046,"width":1047},"Panel rejestracji narysowany w FigCraft: nagłówek „Załóż konto”, pola imię i nazwisko, e-mail, hasło z podpowiedzią i powtórz hasło, checkbox akceptacji regulaminu, zielony przycisk „Utwórz konto” i link „Zaloguj się”",1444,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-register-panel.png",1024,[18,1049,1050],{},"Panel rejestracji – efekt polecenia „wyrysuj panel rejestracji”",[18,1052,1053],{},"Na plus – porządek w warstwach. Każde pole to osobna ramka nazwana po polsku („Pole – Hasło”, a w niej „Input”), są „Przycisk”, „Zgoda” i „Stopka”. Kto choć raz dostał plik, w którym warstwy nazywały się „Frame 4728” i „Rectangle 12 copy 3”, ten doceni… Agent trzymał się też stylu karty logowania – ten sam font, ta sama zieleń, te same zaokrąglenia – mimo że nikt mu tego nie kazał.",[11,1055,1058],{"alt":1056,"height":994,"src":1057,"width":996},"Okno aplikacji FigCraft z zaznaczonym panelem rejestracji; w panelu warstw po lewej ramki nazwane po polsku: Stopka, Przycisk, Zgoda, Pole – Powtórz hasło, Pole – Hasło, Input","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-register-window.png",[18,1059,1060],{},"Ten sam panel w aplikacji – warstwy nazwane po ludzku",[18,1062,1063,1064,1067,1068,1071],{},"Bez potknięć się nie obyło. Pierwsza próba wyłożyła się już na pierwszej warstwie – agent podał przesunięcie cienia jako obiekt ",[142,1065,1066],{},"{x, y}",", a FigCraft oczekuje pary ",[142,1069,1070],{},"[x, y]",". Komunikat był na tyle konkretny („expected a tuple of size 2”), że wystarczyła jedna poprawka i druga próba przeszła w całości. Na szczęście błędne wywołanie niczego nie utworzyło, więc nie trzeba było sprzątać połowicznie narysowanej karty.",[18,1073,1074],{},"Czy to jest projekt gotowy do wdrożenia? Nie. Pola to wciąż zwykłe ramki, a nie komponenty z wariantami (błąd, focus, wyłączone), checkbox to prostokąt, a o kontraście szarego tekstu podpowiedzi warto byłoby jeszcze porozmawiać. Ale jako szkic na start, zrobiony z 3 słów polecenia – jestem pod wrażeniem.",[204,1076,1078],{"id":1077},"na-co-uważać","Na co uważać?",[18,1080,1081,1082,1085,1086,1089,1090,1093,1094,1097,1098,1100,1101,62],{},"Jedna pułapka wyszła od razu. Gdy agent podał w parametrze ",[142,1083,1084],{},"parent"," napis zamiast liczby (próbował po swojemu odwołać się do wyniku poprzedniego kroku), FigCraft go… po prostu zignorował. Warstwa wylądowała bezpośrednio na stronie, a CLI zwrócił ",[142,1087,1088],{},"\"ok\": true",". Za to nieistniejące id (",[142,1091,1092],{},"parent: 999",") czy nieznana komenda kończą się porządnym błędem i kodem wyjścia 1 – i wtedy nic nie jest zapisywane. Czyli agentowi warto kazać sprawdzać wynik przez ",[142,1095,1096],{},"info"," albo ",[142,1099,877],{},", a nie tylko patrzeć na ",[142,1102,1103],{},"ok",[46,1105,1107],{"id":1106},"design-system-bloga-czyli-coś-na-poważnie","Design system bloga – czyli coś na poważnie",[18,1109,1110,1111,1114],{},"Karta logowania i panel rejestracji to była rozgrzewka. Skoro agent potrafi rysować, to czemu nie dać mu czegoś, co faktycznie mi się przyda? Ten blog stoi na Nuxt UI z własną paletą kolorów, ale design systemu w żadnym narzędziu graficznym nigdy nie miał – wszystko żyje w kodzie. Polecenie brzmiało więc: zrób katalog w ",[142,1112,1113],{},"docs",", umieść w nim plik projektowy FigCraft i odwzoruj design system serwisu – „tak prawilnie – od tokenów po komponenty”.",[204,1116,1118],{"id":1117},"najpierw-kod-potem-rysowanie","Najpierw kod, potem rysowanie",[18,1120,1121],{},"Claude Code zaczął od tego, od czego powinien zacząć każdy, kto przenosi design system – od przeczytania źródeł. A źródeł prawdy jest tu kilka:",[70,1123,1124,1140,1161,1174],{},[73,1125,1126,1131,1132,1135,1136,1139],{},[28,1127,1128],{},[142,1129,1130],{},"app\u002Fassets\u002Fcss\u002Fmain.css"," – moja paleta ",[142,1133,1134],{},"brand"," (fiolet w oklch), fonty, nadpisane tokeny ",[142,1137,1138],{},"--ui-*"," i gradient z logo",[73,1141,1142,1147,1148,1151,1152,1154,1155,1151,1158],{},[28,1143,1144],{},[142,1145,1146],{},"app\u002Fapp.config.ts"," – czyli informacja, że ",[142,1149,1150],{},"primary"," to ",[142,1153,1134],{},", a ",[142,1156,1157],{},"neutral",[142,1159,1160],{},"zinc",[73,1162,1163,1166,1167,561,1170,1173],{},[28,1164,1165],{},"Nuxt UI"," – tokeny semantyczne (",[142,1168,1169],{},"--ui-text-muted",[142,1171,1172],{},"--ui-bg-elevated","…) dla trybu jasnego i ciemnego oraz rozmiary i warianty komponentów",[73,1175,1176,1179],{},[28,1177,1178],{},"Tailwind"," – pozostałe palety i skala odstępów",[18,1181,1182,1183,486,1186,1189,1190,1192],{},"I tu pierwsza decyzja, która bardzo mi się spodobała. Zamiast przepisać kolory ręcznie do pliku, agent napisał ",[28,1184,1185],{},"generator",[142,1187,1188],{},"pnpm design:build","), który za każdym razem czyta tokeny z kodu i buduje plik FigCraft od zera. Zmienię kolor w CSS-ie, odpalę skrypt i design system jest aktualny. Plik ",[142,1191,144],{}," jest więc tak naprawdę artefaktem builda, a nie czymś, co ktoś edytuje ręcznie i co po pół roku rozjeżdża się z produkcją. Kto pracował z design systemem w Figmie, ten wie, że to jest największa bolączka…",[18,1194,1195,1196,1198,1199,1202,1203,1206],{},"Generator uruchamia ",[142,1197,504],{}," bez okna i rozmawia z nim przez MCP – dokładnie tym samym protokołem, który opisałem wyżej. Cały plik to ok. ",[28,1200,1201],{},"4650 wywołań",", które wykonują się w mniej więcej ",[28,1204,1205],{},"1 sekundę",". Tak, dobrze czytacie.",[204,1208,1210],{"id":1209},"co-jest-w-środku","Co jest w środku?",[70,1212,1213,1223,1229,1235,1245],{},[73,1214,1215,1218,1219,1222],{},[28,1216,1217],{},"157 zmiennych"," w 5 kolekcjach – paleta bazowa, tokeny semantyczne z trybami Light i Dark, promienie, odstępy i wymiary układu. Każda zmienna ma w „code syntax” nazwę z kodu, np. ",[142,1220,1221],{},"var(--ui-text-muted)",", więc w Dev Mode od razu widać, czego użyć w CSS-ie",[73,1224,1225,1228],{},[28,1226,1227],{},"22 style"," – 20 tekstowych (od tytułu wpisu po blok kodu) i 2 cienie",[73,1230,1231,1234],{},[28,1232,1233],{},"25 ikon"," Lucide – tych samych, których używa Nuxt UI",[73,1236,1237,1240,1241,1244],{},[28,1238,1239],{},"26 komponentów"," ze ",[28,1242,1243],{},"154 wariantami"," – od przycisków, badge’y i pól formularza, przez callouty i karty wpisów, po nagłówek, stopkę i baner cookies",[73,1246,1247,1250],{},[28,1248,1249],{},"2 przykładowe ekrany"," – lista wpisów i wpis, każdy w wersji jasnej i ciemnej",[18,1252,1253,1254,1257,1258,1261],{},"Na stronie z kolorami generator od razu wylicza kontrast WCAG dla każdego tokenu tekstu – w obu trybach. Ciekawostka: wyliczone wartości zgadzają się co do setnych części z komentarzami w ",[142,1255,1256],{},"main.css"," (brand-600 na białym tle: 5,75:1). Przy okazji wyszło czarno na białym, że ",[142,1259,1260],{},"text\u002Fdimmed"," w jasnym motywie ma tylko 2,62:1 – więc nadaje się wyłącznie na placeholdery, a nie na treść.",[11,1263,1268],{"alt":1264,"height":1265,"src":1266,"width":1267},"Tabela tokenów semantycznych w FigCraft: po lewej tryb jasny, po prawej ciemny; przy każdym tokenie próbka koloru, wartość hex i kontrast WCAG, np. text\u002Fmuted 4,83:1 AA, text\u002Fdimmed 2,62:1 tylko dekoracja",1170,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-ds-tokens.png",1020,[18,1269,1270],{},"Te same próbki podpięte do zmiennych – po lewej tryb Light, po prawej Dark, z kontrastem WCAG",[18,1272,1273,1274,1277,1278,1277,1281,1284,1285,62],{},"Komponenty mają właściwości nazwane dokładnie tak jak propsy w kodzie. Przycisk to ",[142,1275,1276],{},"color"," × ",[142,1279,1280],{},"variant",[142,1282,1283],{},"size",", czyli 2 kolory używane na blogu, 6 wariantów i 5 rozmiarów – razem 60 kombinacji. Patrząc na instancję w projekcie, od razu wiadomo, co wpisać w szablonie: ",[142,1286,1287],{},"\u003CUButton color=\"neutral\" variant=\"soft\" size=\"sm\">",[11,1289,1294],{"alt":1290,"height":1291,"src":1292,"width":1293},"Zestaw wariantów komponentu Button w FigCraft: rzędy przycisków primary i neutral w wariantach solid, outline, soft, subtle, ghost i link, każdy w 5 rozmiarach",394,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-ds-button.png",1500,[18,1295,1296],{},"Button – 60 wariantów odpowiadających propsom UButton",[18,1298,1299,1300,1303],{},"A teraz wisienka na torcie. Ekrany są złożone wyłącznie z instancji komponentów, a wszystkie kolory są podpięte do tokenów semantycznych. Wersja ciemna to więc ",[28,1301,1302],{},"ta sama ramka"," z przełączonym trybem kolekcji Theme – bez ruszania ani jednej warstwy. Dokładnie tak, jak działa to na stronie.",[11,1305,1310],{"alt":1306,"height":1307,"src":1308,"width":1309},"Ekran listy wpisów bloga odtworzony w FigCraft w trybie jasnym: nagłówek z logo i nawigacją, 3 karty wpisów, panel kategorii i tagów, paginacja i stopka",954,"https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-ds-blog-light.png",1280,[18,1311,1312],{},"Lista wpisów – tryb jasny",[11,1314,1317],{"alt":1315,"height":1307,"src":1316,"width":1309},"Ten sam ekran listy wpisów w trybie ciemnym: identyczny układ, ciemne tło, jaśniejszy fiolet akcentów","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ffigcraft-ds-blog-dark.png",[18,1318,1319],{},"Ta sama ramka, tryb Dark",[18,1321,1322],{},"I muszę przyznać – efekt jest naprawdę dobry. Claude doskonale zebrał istniejący design system i odwzorował go w FigCrafcie: od tokenów, przez komponenty, aż po gotowe widoki, które wyglądają jak blog na produkcji. Taki trochę reverse engineering – zwykle design system powstaje najpierw w narzędziu graficznym, a potem trafia do kodu. Tu poszło dokładnie odwrotnie 🙂",[204,1324,1326],{"id":1325},"czego-figcraft-jeszcze-nie-umie","Czego FigCraft (jeszcze) nie umie?",[18,1328,1329],{},"Przy tak dużym pliku wyszło sporo ograniczeń – i to jest chyba najcenniejsza część tego eksperymentu:",[70,1331,1332,1338,1348,1357,1363],{},[73,1333,1334,1337],{},[28,1335,1336],{},"brak oklch"," – kolory z Tailwinda v4 i moja paleta są w oklch, a FigCraft przyjmuje tylko hex. Generator konwertuje je więc do sRGB sam",[73,1339,1340,1343,1344,1347],{},[28,1341,1342],{},"brak Inter Medium"," – wbudowany Inter ma tylko Regular, Italic, SemiBold i Bold, więc wszystko, co na stronie jest ",[142,1345,1346],{},"font-medium",", w pliku jest pogrubione mocniej. JetBrains Mono też nie ma, kod jest składany fontem Liberation Mono",[73,1349,1350,501,1353,1356],{},[28,1351,1352],{},"przezroczystości",[142,1354,1355],{},"bg-primary\u002F10"," z Tailwinda nie da się zapisać jako alias zmiennej z inną przezroczystością, więc te tokeny są wyliczone osobno dla każdego trybu",[73,1358,1359,1362],{},[28,1360,1361],{},"obrys z jednej strony"," – komentarz autora ma na stronie grubszą, fioletową lewą krawędź. W FigCrafcie różne grubości boków działają tylko bez zaokrąglonych rogów, więc skończyło się na pasku 4 px przypiętym do krawędzi",[73,1364,1365,1368],{},[28,1366,1367],{},"format gradientu"," nie jest nigdzie opisany w liście komend. Agent poradził sobie sprytnie – zaimportował SVG z gradientem i podejrzał, jak FigCraft zapisał go u siebie",[18,1370,1371],{},"Do tego kilka wpadek po stronie generatora, wyłapanych dopiero po obejrzeniu podglądów. Na przykład właściwość tekstowa współdzielona przez warianty nadpisywała treść komentarzy, a blok kodu w ekranie wpisu zwinął się do wąskiej kolumny. I tu znowu przydał się eksport do PNG – agent po każdym przebiegu oglądał wygenerowane strony, wyłapywał to, co się rozjechało, poprawiał skrypt i generował plik od nowa.",[46,1373,1375],{"id":1374},"czy-warto","Czy warto?",[18,1377,1378,1379,1382],{},"Jak zwykle odpowiedź brzmi – ",[28,1380,1381],{},"to zależy",". Jeśli ktoś pracuje w zespole z rozbudowanym design systemem w Figmie, to FigCraft go nie zastąpi – i autorzy sami to przyznają. Ale jeśli szukasz darmowego narzędzia do makiet i prototypów, które działa offline, nie wymaga konta i da się nim sterować z poziomu agenta AI – warto mieć go na oku.",[18,1384,1385],{},"A mój werdykt na szybko? To bardzo interesujący projekt. Darmowy, lokalny, bez konta i bez chmury, a do tego ze świetną integracją z Claude. Właśnie ta ostatnia rzecz zrobiła na mnie największe wrażenie – agent nie tylko rysuje, ale też widzi, co narysował, i sam poprawia własne błędy.",[18,1387,1388],{},"Oczywiście widać, że to wczesna wersja i sporo jest do dopracowania. Część funkcji może jeszcze nie działać, a u mnie przy otwieraniu pliku wyskakuje jakiś błąd – choć plik ostatecznie się wczytuje. Ale to raczej powód, żeby FigCrafta śledzić i testować kolejne wersje, a nie żeby go skreślać.",[46,1390,1392],{"id":1391},"co-dalej","Co dalej?",[18,1394,1395],{},"Na pewno będę dalej eksplorował współpracę FigCrafta z Claude. Najbardziej ciekawi mnie zabawa design systemem w obie strony – nie tylko „design system → projekt”, jak w tym wpisie, ale też odwrotnie: „projekt → design system”, czyli wyciąganie tokenów i komponentów z gotowego projektu z powrotem do kodu.",[18,1397,1398],{},"A Wy – próbowaliście już FigCrafta albo innych aplikacji z rodziny ArtCraft? Dajcie znać w komentarzach, chętnie porównam wrażenia 🙂",[1400,1401,1402],"style",{},"html pre.shiki code .sQJ0q, html code.shiki .sQJ0q{--shiki-light:#953800;--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .s-BGO, html code.shiki .s-BGO{--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .sDkKp, html code.shiki .sDkKp{--shiki-light:#0550AE;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5nWI, html code.shiki .s5nWI{--shiki-light:#CF222E;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .sd69k, html code.shiki .sd69k{--shiki-light:#8250DF;--shiki-default:#8250DF;--shiki-dark:#D2A8FF}html pre.shiki code .s_bOF, html code.shiki .s_bOF{--shiki-light:#1F2328;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sfEsd, html code.shiki .sfEsd{--shiki-light:#116329;--shiki-default:#116329;--shiki-dark:#7EE787}",{"title":221,"searchDepth":246,"depth":246,"links":1404},[1405,1406,1407,1408,1412,1418,1423,1424],{"id":48,"depth":246,"text":49},{"id":120,"depth":246,"text":121},{"id":167,"depth":246,"text":168},{"id":195,"depth":246,"text":196,"children":1409},[1410,1411],{"id":206,"depth":255,"text":207},{"id":459,"depth":255,"text":460},{"id":470,"depth":246,"text":471,"children":1413},[1414,1415,1416,1417],{"id":521,"depth":255,"text":522},{"id":824,"depth":255,"text":825},{"id":1007,"depth":255,"text":1008},{"id":1077,"depth":255,"text":1078},{"id":1106,"depth":246,"text":1107,"children":1419},[1420,1421,1422],{"id":1117,"depth":255,"text":1118},{"id":1209,"depth":255,"text":1210},{"id":1325,"depth":255,"text":1326},{"id":1374,"depth":246,"text":1375},{"id":1391,"depth":246,"text":1392},[1426,1427],"artykuly","polecane",true,"2026-10-14","Darmowa, open source’owa Figma, bez konta i bez chmury, z serwerem MCP na dokładkę? Brzmi jak bajka, więc postanowiłem sprawdzić, ile w tym prawdy…",false,"md",{},"\u002Fblog\u002Ffigcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo",17,[],{"title":5,"description":1430},{"loc":1434},"figcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo","blog\u002F2026-10-14-figcraft-czyli-figma-od-nowa-w-ruscie-i-za-darmo",[1442,1443,1444,1445,1446,1447],"figcraft","figma","front-end","mcp","ai","claude-code",null,"wUAasNBUspDMdyjpC16NTHomaclDyzrNEpYUB-qXZ90",[1451,1448],{"title":1452,"path":1453,"stem":1454,"description":1455,"children":-1},"GA4 i Claude Code – analityka www wsparta przez AI","\u002Fblog\u002Fga4-i-claude-code-analityka-www-wsparta-przez-ai","blog\u002F2026-10-10-ga4-i-claude-code-analityka-www-wsparta-przez-ai","Statystyki sklepu potrafią pokazywać liczby, które nie mają nic wspólnego z rzeczywistością. Jak AI pomaga mi to sprawdzać – na przykładzie flora-art.pl.",[1457,1468,1478],{"path":1453,"title":1452,"description":1455,"date":1458,"categories":1459,"tags":1460,"readingTime":416,"draft":1431,"cover":1467},"2026-10-10",[1426],[1447,1446,1461,1462,1463,1464,1465,1445,1466],"automatyzacja","programowanie","ga4","google-analytics","analityka","flora-art","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Fga4-claude-code-analityka-okladka.png",{"path":37,"title":1469,"description":1470,"date":1471,"categories":1472,"tags":1474,"readingTime":416,"draft":1431,"cover":1477},"TinyJS – natywna aplikacja w kilka godzin i poniżej 10 MB","Po południu przeczytałem o TinyJS, wieczorem miałem na Macu natywną aplikację do Florino. Z własnymi widokami, z logowaniem – i poniżej 10 MB…","2026-10-03",[1426,1473],"osx",[1473,1446,1447,1475,1476,1462],"saas","vue-js","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Ftinyjs-okladka.png",{"path":1479,"title":1480,"description":1481,"date":1482,"categories":1483,"tags":1484,"readingTime":426,"draft":1431,"cover":1487},"\u002Fblog\u002Fprogramista-w-czasach-ai","Programista w czasach AI","Czy AI zabierze nam robotę? Nie sądzę. Ale zmieni ją tak, że za kilka lat sami jej nie poznamy – i mam na to dowód w postaci 543 commitów…","2026-10-01",[1426],[1462,1485,1461,1486,1446,1447,1475],"kariera-w-it","front-end-developer","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002F2026\u002F10\u002Fprogramista-w-czasach-ai-okladka.png",[1489,1496,1503,1510,1517,1524,1530,1536,1543,1550],{"id":1490,"description":1448,"extension":1491,"meta":1492,"name":1493,"slug":1426,"stem":1494,"__hash__":1495},"categories\u002Fcategories\u002Fartykuly.yml","yml",{},"Artykuły","categories\u002Fartykuly","aw37OCuccDz54Q07CDyESiid8VqHzN1nGf8cMOk_mI0",{"id":1497,"description":1448,"extension":1491,"meta":1498,"name":1499,"slug":1500,"stem":1501,"__hash__":1502},"categories\u002Fcategories\u002Fdostepnosc-cyfrowa.yml",{},"Dostępność cyfrowa","dostepnosc-cyfrowa","categories\u002Fdostepnosc-cyfrowa","6m7Ag8ZZ1EzfdgLuQnAUAMmRcjkgb2tpFM9n1qxANOM",{"id":1504,"description":1448,"extension":1491,"meta":1505,"name":1506,"slug":1507,"stem":1508,"__hash__":1509},"categories\u002Fcategories\u002Fkonferencje.yml",{},"Konferencje","konferencje","categories\u002Fkonferencje","dQl4MW7163iEG-b7Cv6FJ2gUxLqnpaiMOLixCXvhHTw",{"id":1511,"description":1448,"extension":1491,"meta":1512,"name":1513,"slug":1514,"stem":1515,"__hash__":1516},"categories\u002Fcategories\u002Fkonfiguracja.yml",{},"Konfiguracja","konfiguracja","categories\u002Fkonfiguracja","ESTOPlJnBPnwuuqgOm7yqGAwgllsRJfSPVk22K_nQe0",{"id":1518,"description":1448,"extension":1491,"meta":1519,"name":1520,"slug":1521,"stem":1522,"__hash__":1523},"categories\u002Fcategories\u002Fnauka.yml",{},"Nauka","nauka","categories\u002Fnauka","3hQRPpuXqoNblW09Gj46arWFgH-3YfsMcgDyd4xLkN4",{"id":1525,"description":1448,"extension":1491,"meta":1526,"name":1527,"slug":1473,"stem":1528,"__hash__":1529},"categories\u002Fcategories\u002Fosx.yml",{},"OSX","categories\u002Fosx","WW8-0hUIqcivgAUl8WQuAvJ3-xVLRLjLkmP00PP4eXY",{"id":1531,"description":1448,"extension":1491,"meta":1532,"name":1533,"slug":1427,"stem":1534,"__hash__":1535},"categories\u002Fcategories\u002Fpolecane.yml",{},"Polecane","categories\u002Fpolecane","ckLXqMEBUHLxZavR7FGvpQjhxc7ycP_sQ7myEw64R9I",{"id":1537,"description":1448,"extension":1491,"meta":1538,"name":1539,"slug":1540,"stem":1541,"__hash__":1542},"categories\u002Fcategories\u002Fpomoce.yml",{},"Pomoce","pomoce","categories\u002Fpomoce","3oKSrG-VgrihP1nofQwuUItxUsyzVfgEfTMF2vq7EIw",{"id":1544,"description":1448,"extension":1491,"meta":1545,"name":1546,"slug":1547,"stem":1548,"__hash__":1549},"categories\u002Fcategories\u002Fprezentacje.yml",{},"Prezentacje","prezentacje","categories\u002Fprezentacje","4L5LUH8zxl0qXRvdymYTwtrkuj1tQun8R7yYz_OfndE",{"id":1551,"description":1448,"extension":1491,"meta":1552,"name":1553,"slug":1476,"stem":1554,"__hash__":1555},"categories\u002Fcategories\u002Fvue-js.yml",{},"Vue.js","categories\u002Fvue-js","wOIuiF3jWQ-Zph8v7hYGNuLdJbCx0VguVg0loyh-Mwk",[1557,1563,1568,1573,1580,1587,1594,1601,1606,1613,1620,1627,1633,1640,1647,1654,1661,1668,1675,1681,1688,1695,1701,1707,1713,1719,1725,1731,1736,1741,1746,1751,1757,1763,1768,1774,1780,1785,1791,1798,1804,1810,1817,1824,1830,1836,1843,1849,1854,1859,1865,1872,1879,1884,1890,1897,1904,1909,1916,1923,1930,1936,1943,1948,1955,1962,1968,1975,1981,1987,1994,2000,2007,2013,2019,2024,2030,2037,2043,2050,2056,2062,2069,2076,2083,2088,2095,2101,2107,2113,2120,2127,2134,2140,2146,2153,2160,2167,2173,2180,2186,2193,2200,2206,2212,2218,2225,2231,2237,2244,2251,2258,2264,2270,2276,2282,2288,2295,2302,2309],{"id":1558,"extension":1491,"meta":1559,"name":1560,"slug":1560,"stem":1561,"__hash__":1562},"tags\u002Ftags\u002Faccessibility.yml",{},"accessibility","tags\u002Faccessibility","luflFOwd8bzxVK2qeBv80Pzxhje6x-hbJYaDUihuwOk",{"id":1564,"extension":1491,"meta":1565,"name":1446,"slug":1446,"stem":1566,"__hash__":1567},"tags\u002Ftags\u002Fai.yml",{},"tags\u002Fai","dps1QD2_kN7ri7PVTP0uaeL-lYhL69nCwndkqEqLLhU",{"id":1569,"extension":1491,"meta":1570,"name":1465,"slug":1465,"stem":1571,"__hash__":1572},"tags\u002Ftags\u002Fanalityka.yml",{},"tags\u002Fanalityka","OazPvU9cHqo-nX1NPUamjhpZH7roEImTsqB55m-1Ewg",{"id":1574,"extension":1491,"meta":1575,"name":1576,"slug":1577,"stem":1578,"__hash__":1579},"tags\u002Ftags\u002Fangular.yml",{},"Angular","angular","tags\u002Fangular","z6SH0xA8FvB2X9kVmW-gtOdfx__mVrgIuA7HVCzfLjo",{"id":1581,"extension":1491,"meta":1582,"name":1583,"slug":1584,"stem":1585,"__hash__":1586},"tags\u002Ftags\u002Fapache2.yml",{},"Apache2","apache2","tags\u002Fapache2","unCvGoDYof2-UiVE0lnN8eq5ru5roRg5_2mAo4TdEHk",{"id":1588,"extension":1491,"meta":1589,"name":1590,"slug":1591,"stem":1592,"__hash__":1593},"tags\u002Ftags\u002Faplikacje-i-uslugi-internetowe.yml",{},"aplikacje i usługi internetowe","aplikacje-i-uslugi-internetowe","tags\u002Faplikacje-i-uslugi-internetowe","G2Vojqp3Zd7QgL3zFleglcNCFkjzkAAeDQCScU6P8bc",{"id":1595,"extension":1491,"meta":1596,"name":1597,"slug":1598,"stem":1599,"__hash__":1600},"tags\u002Ftags\u002Fasynchronicznosc.yml",{},"asynchroniczność","asynchronicznosc","tags\u002Fasynchronicznosc","9RMRbHed9wQxDzVpEjO6Ay9zxWDCI0e4hE8F4zqGgj0",{"id":1602,"extension":1491,"meta":1603,"name":1461,"slug":1461,"stem":1604,"__hash__":1605},"tags\u002Ftags\u002Fautomatyzacja.yml",{},"tags\u002Fautomatyzacja","vfUpLN8opVGvKUQgjGwEYxKfsZsLo3jxneMF9YMMVD0",{"id":1607,"extension":1491,"meta":1608,"name":1609,"slug":1610,"stem":1611,"__hash__":1612},"tags\u002Ftags\u002Fblokowanie-reklam.yml",{},"blokowanie reklam","blokowanie-reklam","tags\u002Fblokowanie-reklam","lq-tfiZ_uB_SerIlaIQFMOXvGIF3QoVVVyPxjwrEsR4",{"id":1614,"extension":1491,"meta":1615,"name":1616,"slug":1617,"stem":1618,"__hash__":1619},"tags\u002Ftags\u002Fblue-media.yml",{},"Blue Media","blue-media","tags\u002Fblue-media","z8G577CxZ7uSy-oNOkWtn3XgbsbjeKhuNby5Q6BCRuM",{"id":1621,"extension":1491,"meta":1622,"name":1623,"slug":1624,"stem":1625,"__hash__":1626},"tags\u002Ftags\u002Fchrome-extensions.yml",{},"chrome extensions","chrome-extensions","tags\u002Fchrome-extensions","Ip0fOTD9TMJiHcbXwgvAB2mFf_D1rlP5ZfkJG3GbCL0",{"id":1628,"extension":1491,"meta":1629,"name":1630,"slug":1447,"stem":1631,"__hash__":1632},"tags\u002Ftags\u002Fclaude-code.yml",{},"claude code","tags\u002Fclaude-code","wJZCEyRD6Cq9w7YKW0WDw94B_K-Y-nbkt1sLGN2RgEw",{"id":1634,"extension":1491,"meta":1635,"name":1636,"slug":1637,"stem":1638,"__hash__":1639},"tags\u002Ftags\u002Fcmr.yml",{},"CMR","cmr","tags\u002Fcmr","eNv_ncSDXVsAFBCM8A4uJqAJItqSOP29I1Kabpm-l3Y",{"id":1641,"extension":1491,"meta":1642,"name":1643,"slug":1644,"stem":1645,"__hash__":1646},"tags\u002Ftags\u002Fcodersday.yml",{},"CodersDay","codersday","tags\u002Fcodersday","jLWUVGvGvi2irKFpFs0Ea6hkW71mLoiroOaGDcv1KWw",{"id":1648,"extension":1491,"meta":1649,"name":1650,"slug":1651,"stem":1652,"__hash__":1653},"tags\u002Ftags\u002Fcoderslab.yml",{},"CodersLab","coderslab","tags\u002Fcoderslab","NQEy1mD_tk9h71yZtjSoC4LhXGE54DGYaYgj3JOoUqY",{"id":1655,"extension":1491,"meta":1656,"name":1657,"slug":1658,"stem":1659,"__hash__":1660},"tags\u002Ftags\u002Fcolor-contrast-analyzer.yml",{},"Color Contrast Analyzer","color-contrast-analyzer","tags\u002Fcolor-contrast-analyzer","hGu3gO_owf9Tn4p5-FssJGVt4ToSsRfgjMjWdX2YgEI",{"id":1662,"extension":1491,"meta":1663,"name":1664,"slug":1665,"stem":1666,"__hash__":1667},"tags\u002Ftags\u002Fcolor-contrast-checker.yml",{},"Color Contrast Checker","color-contrast-checker","tags\u002Fcolor-contrast-checker","w8QKUWUH691wTFtUWDJMjbCvC6zlFZo6j4UDDSg1NDY",{"id":1669,"extension":1491,"meta":1670,"name":1671,"slug":1672,"stem":1673,"__hash__":1674},"tags\u002Ftags\u002Fconfrontjs.yml",{},"ConFrontJS","confrontjs","tags\u002Fconfrontjs","G4ePmrCbuLVA_ccxs7rcKSveQ3Kvn7y6-Ie9-H_5gpc",{"id":1676,"extension":1491,"meta":1677,"name":1678,"slug":1678,"stem":1679,"__hash__":1680},"tags\u002Ftags\u002Fcss3.yml",{},"css3","tags\u002Fcss3","f5Gtp9yzvmyMSZ-IN--19c7OR-v5LXzdvhNaEmiOsuw",{"id":1682,"extension":1491,"meta":1683,"name":1684,"slug":1685,"stem":1686,"__hash__":1687},"tags\u002Ftags\u002Fdesi-2020.yml",{},"DESI 2020","desi-2020","tags\u002Fdesi-2020","KeSFSj6VcXN0OciAUSTR8C1kiGUE3nLzGR1Pi5h_USE",{"id":1689,"extension":1491,"meta":1690,"name":1691,"slug":1692,"stem":1693,"__hash__":1694},"tags\u002Ftags\u002Fdns.yml",{},"DNS","dns","tags\u002Fdns","_TzsfpRL_ROm8MT5opDE1gg4GnuukbCyKY87W-IFl68",{"id":1696,"extension":1491,"meta":1697,"name":1698,"slug":1500,"stem":1699,"__hash__":1700},"tags\u002Ftags\u002Fdostepnosc-cyfrowa.yml",{},"dostępność cyfrowa","tags\u002Fdostepnosc-cyfrowa","8xZ6WRsys1qnr-vWH_Y4Ne8ac2RBONWyLrrm31u00xI",{"id":1702,"extension":1491,"meta":1703,"name":1704,"slug":1704,"stem":1705,"__hash__":1706},"tags\u002Ftags\u002Febook.yml",{},"ebook","tags\u002Febook","2Eqjl28-mK0fxpryAfGFMCel8MSByJVuQRsvy_S_cgY",{"id":1708,"extension":1491,"meta":1709,"name":1710,"slug":1710,"stem":1711,"__hash__":1712},"tags\u002Ftags\u002Felgato.yml",{},"elgato","tags\u002Felgato","ys3dC5VhSFe1JP_z6vIBB8W8WSJmrbB2C3gwTjSkINM",{"id":1714,"extension":1491,"meta":1715,"name":1716,"slug":1716,"stem":1717,"__hash__":1718},"tags\u002Ftags\u002Fevent.yml",{},"event","tags\u002Fevent","xcUCN7zoFrW8LCakRgx4s2r8YTGvycTdYQEyx_Yg7Fk",{"id":1720,"extension":1491,"meta":1721,"name":1722,"slug":1722,"stem":1723,"__hash__":1724},"tags\u002Ftags\u002Ffacebook.yml",{},"facebook","tags\u002Ffacebook","xk1FSKdOP155PdsTUy6lbefdoi6pOrwzZtVO8B52vMo",{"id":1726,"extension":1491,"meta":1727,"name":1728,"slug":1728,"stem":1729,"__hash__":1730},"tags\u002Ftags\u002Ffanpage.yml",{},"fanpage","tags\u002Ffanpage","RoMU1ceix1opnNG2LPoGzfOjVZE128Gmk12ZtDAQxrM",{"id":1732,"extension":1491,"meta":1733,"name":1442,"slug":1442,"stem":1734,"__hash__":1735},"tags\u002Ftags\u002Ffigcraft.yml",{},"tags\u002Ffigcraft","WTLpMjDrY2RSAriKP_PIhPFrUfRbSjesfrpRp5_eTQ4",{"id":1737,"extension":1491,"meta":1738,"name":1443,"slug":1443,"stem":1739,"__hash__":1740},"tags\u002Ftags\u002Ffigma.yml",{},"tags\u002Ffigma","HqDjUE96DWwR7A2TOHbGrBJgtOm0WhFG5odvyZ2Sd30",{"id":1742,"extension":1491,"meta":1743,"name":1466,"slug":1466,"stem":1744,"__hash__":1745},"tags\u002Ftags\u002Fflora-art.yml",{},"tags\u002Fflora-art","EZJoljjwcgycvXhzhoZltu8jVe2P_rSd_t7-DmugrCs",{"id":1747,"extension":1491,"meta":1748,"name":1444,"slug":1444,"stem":1749,"__hash__":1750},"tags\u002Ftags\u002Ffront-end.yml",{},"tags\u002Ffront-end","xKzeWb2B7yr2l4WBGtpyUzD1T_sBK5i-sb21-MEDOWw",{"id":1752,"extension":1491,"meta":1753,"name":1754,"slug":1486,"stem":1755,"__hash__":1756},"tags\u002Ftags\u002Ffront-end-developer.yml",{},"front-end developer","tags\u002Ffront-end-developer","rHwMfWcbpd8wXqIVD1HzPWxBheHq8V_9TdHCHkz4Sp8",{"id":1758,"extension":1491,"meta":1759,"name":1760,"slug":1760,"stem":1761,"__hash__":1762},"tags\u002Ftags\u002Ffrontend.yml",{},"frontend","tags\u002Ffrontend","CxnBlT8roa7DydGYGxgRVXKKTvJrkjMMQrvHZQMxukA",{"id":1764,"extension":1491,"meta":1765,"name":1463,"slug":1463,"stem":1766,"__hash__":1767},"tags\u002Ftags\u002Fga4.yml",{},"tags\u002Fga4","rRvTzxNn5DJ4Sf5NYfC7bdlPytNph9v_BV9e-9z8mng",{"id":1769,"extension":1491,"meta":1770,"name":1771,"slug":1771,"stem":1772,"__hash__":1773},"tags\u002Ftags\u002Fgamepad.yml",{},"gamepad","tags\u002Fgamepad","Gsi3HzAfw68AJR6qCt8qeuS7Euw22ZMSpnaKNw0QV-A",{"id":1775,"extension":1491,"meta":1776,"name":1777,"slug":1777,"stem":1778,"__hash__":1779},"tags\u002Ftags\u002Fgoalkicker.yml",{},"goalkicker","tags\u002Fgoalkicker","L_zNfxJfO6lZOUiLaE5m_ggQUX0komBXXth0SrszFUk",{"id":1781,"extension":1491,"meta":1782,"name":1464,"slug":1464,"stem":1783,"__hash__":1784},"tags\u002Ftags\u002Fgoogle-analytics.yml",{},"tags\u002Fgoogle-analytics","04tt2kepradezfP_kRSWsq1w1BDQ6kJaoVd5RB3wCT4",{"id":1786,"extension":1491,"meta":1787,"name":1788,"slug":1788,"stem":1789,"__hash__":1790},"tags\u002Ftags\u002Fhandbook.yml",{},"handbook","tags\u002Fhandbook","D0-VmrV-_WQQnlVvaePXWciWrJ8zuWNJoJULW_rOpmI",{"id":1792,"extension":1491,"meta":1793,"name":1794,"slug":1795,"stem":1796,"__hash__":1797},"tags\u002Ftags\u002Fhtml-api.yml",{},"HTML API","html-api","tags\u002Fhtml-api","DBZv8DJ2hZR64GhJALF_-YzUG4mZWG9m2VZE76eM_wY",{"id":1799,"extension":1491,"meta":1800,"name":1801,"slug":1801,"stem":1802,"__hash__":1803},"tags\u002Ftags\u002Fhtml5.yml",{},"html5","tags\u002Fhtml5","fcqPnoul30jPoEk6tO8K9WWwU8XyFz3N7-GAse2uwsQ",{"id":1805,"extension":1491,"meta":1806,"name":1807,"slug":1807,"stem":1808,"__hash__":1809},"tags\u002Ftags\u002Fimmich.yml",{},"immich","tags\u002Fimmich","yRqxfTgoJptMOBpcKUS-JAmsUYKQZe4N5gyGFXSxoyU",{"id":1811,"extension":1491,"meta":1812,"name":1813,"slug":1814,"stem":1815,"__hash__":1816},"tags\u002Ftags\u002Finteligentny-dom.yml",{},"inteligentny dom","inteligentny-dom","tags\u002Finteligentny-dom","LwWCH_MYDfKSgfl9wyRWrWegvCgb2hAnXMlON3OQ0dk",{"id":1818,"extension":1491,"meta":1819,"name":1820,"slug":1821,"stem":1822,"__hash__":1823},"tags\u002Ftags\u002Fjaws.yml",{},"Jaws","jaws","tags\u002Fjaws","aklZIj6z2_fzRQ_h9RtAfvXgDhHH9v02f224m6u8B7s",{"id":1825,"extension":1491,"meta":1826,"name":1827,"slug":1827,"stem":1828,"__hash__":1829},"tags\u002Ftags\u002Fjunior.yml",{},"junior","tags\u002Fjunior","ega8Cjq-Z5swNxexQG-ROW8hvi0eaDCJj-l4ILDW-4U",{"id":1831,"extension":1491,"meta":1832,"name":1833,"slug":1485,"stem":1834,"__hash__":1835},"tags\u002Ftags\u002Fkariera-w-it.yml",{},"kariera w IT","tags\u002Fkariera-w-it","tyqsMUw9eQaVgTnsZy9DZAHFQXZNe0sDZavdgJ0KTcA",{"id":1837,"extension":1491,"meta":1838,"name":1839,"slug":1840,"stem":1841,"__hash__":1842},"tags\u002Ftags\u002Fkobiety-w-it.yml",{},"kobiety w IT","kobiety-w-it","tags\u002Fkobiety-w-it","Gm0D6QX7IUT1CDThH6LuhQtWOOWFop09QiDZwX_Tm7c",{"id":1844,"extension":1491,"meta":1845,"name":1846,"slug":1846,"stem":1847,"__hash__":1848},"tags\u002Ftags\u002Fkonferencja.yml",{},"konferencja","tags\u002Fkonferencja","-n95F1XvVC7rR9O9sOxyxnKIJBm4i5o3Md_Q-Z72occ",{"id":1850,"extension":1491,"meta":1851,"name":1507,"slug":1507,"stem":1852,"__hash__":1853},"tags\u002Ftags\u002Fkonferencje.yml",{},"tags\u002Fkonferencje","Qf_9S1xyR0mqWi1CzdU_iGIwcU8Z0ET_3JBEIOWhaxA",{"id":1855,"extension":1491,"meta":1856,"name":1514,"slug":1514,"stem":1857,"__hash__":1858},"tags\u002Ftags\u002Fkonfiguracja.yml",{},"tags\u002Fkonfiguracja","r2NNwL_ZY7xvPy0pUN2IPK8U6qBXSfay_MZbt1FpC2I",{"id":1860,"extension":1491,"meta":1861,"name":1862,"slug":1862,"stem":1863,"__hash__":1864},"tags\u002Ftags\u002Fkoronawirus.yml",{},"koronawirus","tags\u002Fkoronawirus","8DgCLCZ1uSF_kl0dmgiEVVM-KkZFxGpXJus3fmMH4sE",{"id":1866,"extension":1491,"meta":1867,"name":1868,"slug":1869,"stem":1870,"__hash__":1871},"tags\u002Ftags\u002Fksiazki-programistyczne.yml",{},"książki programistyczne","ksiazki-programistyczne","tags\u002Fksiazki-programistyczne","DF1l0MrjODlaeQ0evw8JedIJJb3v4MpesV0Fi6HpViQ",{"id":1873,"extension":1491,"meta":1874,"name":1875,"slug":1876,"stem":1877,"__hash__":1878},"tags\u002Ftags\u002Flenovo-m710q.yml",{},"lenovo m710q","lenovo-m710q","tags\u002Flenovo-m710q","H2DSlpm_FUSkpZXj5AZxrXjTzdGXcfWhIFXE8MAjoJw",{"id":1880,"extension":1491,"meta":1881,"name":1445,"slug":1445,"stem":1882,"__hash__":1883},"tags\u002Ftags\u002Fmcp.yml",{},"tags\u002Fmcp","3PkWXTczUl4idUlqZVtwyAQ2kQ3-wsGGRK8B5IciLZI",{"id":1885,"extension":1491,"meta":1886,"name":1887,"slug":1887,"stem":1888,"__hash__":1889},"tags\u002Ftags\u002Fmid.yml",{},"mid","tags\u002Fmid","61US_hzDYC5fw5yPUWya7ZNjc9fOddRUJyOJU3oVKaM",{"id":1891,"extension":1491,"meta":1892,"name":1893,"slug":1894,"stem":1895,"__hash__":1896},"tags\u002Ftags\u002Fmini-pc.yml",{},"mini pc","mini-pc","tags\u002Fmini-pc","zCEZkcdMTwLbaNGmGiT8qGCtnECxEafkiJ-glDrozw0",{"id":1898,"extension":1491,"meta":1899,"name":1900,"slug":1901,"stem":1902,"__hash__":1903},"tags\u002Ftags\u002Fnas.yml",{},"NAS","nas","tags\u002Fnas","RsN64SVV6BmbaR7e4pVVvGgbxQ0q8ihj5J4b_1oPH2k",{"id":1905,"extension":1491,"meta":1906,"name":1521,"slug":1521,"stem":1907,"__hash__":1908},"tags\u002Ftags\u002Fnauka.yml",{},"tags\u002Fnauka","bMIyGRMcT5SRj0bxdrER6sibTNLAHr1enmElQI67jTo",{"id":1910,"extension":1491,"meta":1911,"name":1912,"slug":1913,"stem":1914,"__hash__":1915},"tags\u002Ftags\u002Fnauka-programowania.yml",{},"nauka programowania","nauka-programowania","tags\u002Fnauka-programowania","M04c5RtH0Fu4ikOuW9fLy2-g2YBIAX0Yj9SHKEwOuUg",{"id":1917,"extension":1491,"meta":1918,"name":1919,"slug":1920,"stem":1921,"__hash__":1922},"tags\u002Ftags\u002Fnvda.yml",{},"NVDA","nvda","tags\u002Fnvda","AS3XsW73sA9-MAI4JVv4y7luo2oGkpXrGptc51MKLQY",{"id":1924,"extension":1491,"meta":1925,"name":1926,"slug":1927,"stem":1928,"__hash__":1929},"tags\u002Ftags\u002Fochrona-rodzicielska.yml",{},"ochrona rodzicielska","ochrona-rodzicielska","tags\u002Fochrona-rodzicielska","DZHsS1aBzb6OmeQFhCXy3Qu3QUMHsrbbN62bXmyBB0Q",{"id":1931,"extension":1491,"meta":1932,"name":1933,"slug":1933,"stem":1934,"__hash__":1935},"tags\u002Ftags\u002Foptimization.yml",{},"optimization","tags\u002Foptimization","fJedkuv-GIoYXYs-z7AFgjvCxunavWHOWZDesN1EgFU",{"id":1937,"extension":1491,"meta":1938,"name":1939,"slug":1940,"stem":1941,"__hash__":1942},"tags\u002Ftags\u002Forganizacja-pracy.yml",{},"organizacja pracy","organizacja-pracy","tags\u002Forganizacja-pracy","IJWHAuqRIlzOIgQbp6B0dYJLpApXOyvDii-k8n_CUCQ",{"id":1944,"extension":1491,"meta":1945,"name":1527,"slug":1473,"stem":1946,"__hash__":1947},"tags\u002Ftags\u002Fosx.yml",{},"tags\u002Fosx","QymfouNjzTcNrsPkrZeaPTZdKpMsdYilpn7HRI1FxQQ",{"id":1949,"extension":1491,"meta":1950,"name":1951,"slug":1952,"stem":1953,"__hash__":1954},"tags\u002Ftags\u002Fpanel-macro.yml",{},"panel macro","panel-macro","tags\u002Fpanel-macro","WrhWywY5PTfhm7n_TuxTZEWwebeWKfYiQf6n6nh19t4",{"id":1956,"extension":1491,"meta":1957,"name":1958,"slug":1959,"stem":1960,"__hash__":1961},"tags\u002Ftags\u002Fpassword-manager.yml",{},"password manager","password-manager","tags\u002Fpassword-manager","viAfKlsGbzjczJJrb8pwaB4tInjCfLzynbSm-GRQz4Y",{"id":1963,"extension":1491,"meta":1964,"name":1965,"slug":1965,"stem":1966,"__hash__":1967},"tags\u002Ftags\u002Fpdf.yml",{},"pdf","tags\u002Fpdf","UTB02hK82S5LzDB9kqZWrDRFb8SYzHfFRgCsqFwdBcE",{"id":1969,"extension":1491,"meta":1970,"name":1971,"slug":1972,"stem":1973,"__hash__":1974},"tags\u002Ftags\u002Fphp.yml",{},"PHP","php","tags\u002Fphp","Id59psmnOEw6xZ04LGSXqaCSXElgAZVfZdIWk4TTMmU",{"id":1976,"extension":1491,"meta":1977,"name":1978,"slug":1978,"stem":1979,"__hash__":1980},"tags\u002Ftags\u002Fpi-hole.yml",{},"pi-hole","tags\u002Fpi-hole","1YJ1tr1Tr23ItFg6rYXw6iKjvPJCdYb2MB_5W1FdZNw",{"id":1982,"extension":1491,"meta":1983,"name":1984,"slug":1984,"stem":1985,"__hash__":1986},"tags\u002Ftags\u002Fpixel-mania.yml",{},"pixel-mania","tags\u002Fpixel-mania","N9WX_K8mFmAndjRdRzZX1PonLHyneP4XCJe9kQlGOpY",{"id":1988,"extension":1491,"meta":1989,"name":1990,"slug":1991,"stem":1992,"__hash__":1993},"tags\u002Ftags\u002Fplaywright.yml",{},"PlayWright","playwright","tags\u002Fplaywright","fZAbd5k3k85yeGire7iJzvnRk00Wfww8OTu1h6rEuZM",{"id":1995,"extension":1491,"meta":1996,"name":1997,"slug":1997,"stem":1998,"__hash__":1999},"tags\u002Ftags\u002Fpraca.yml",{},"praca","tags\u002Fpraca","ra3_bHnZqDrux1PiJ_pW6eqfX7l-uIFUPUhPqaq5cf4",{"id":2001,"extension":1491,"meta":2002,"name":2003,"slug":2004,"stem":2005,"__hash__":2006},"tags\u002Ftags\u002Fpraca-zdalna.yml",{},"praca zdalna","praca-zdalna","tags\u002Fpraca-zdalna","HD5EOgzs-b3t5KIBRxlWQr0FuQVJ4N7eLQJV77YWcqc",{"id":2008,"extension":1491,"meta":2009,"name":2010,"slug":2010,"stem":2011,"__hash__":2012},"tags\u002Ftags\u002Fprezentacja.yml",{},"prezentacja","tags\u002Fprezentacja","eiP5x-l400TtOy-gxO3TyOqYwcD4LP65jJ--7H-jyng",{"id":2014,"extension":1491,"meta":2015,"name":2016,"slug":2016,"stem":2017,"__hash__":2018},"tags\u002Ftags\u002Fprivacy.yml",{},"privacy","tags\u002Fprivacy","Ln1AAZQ3fPOzuMJB0BWwUsjwaWTI7cFtzI6TaPrvKXc",{"id":2020,"extension":1491,"meta":2021,"name":1462,"slug":1462,"stem":2022,"__hash__":2023},"tags\u002Ftags\u002Fprogramowanie.yml",{},"tags\u002Fprogramowanie","EUO8owu6V8cJivzRtVvD12KgW4ojOCp-N7aI4euHEa0",{"id":2025,"extension":1491,"meta":2026,"name":2027,"slug":2027,"stem":2028,"__hash__":2029},"tags\u002Ftags\u002Fproxmox.yml",{},"proxmox","tags\u002Fproxmox","2AZfZmPZffxT3YuTVGHbsGvqKzpNRfot-OjFS6kkSYs",{"id":2031,"extension":1491,"meta":2032,"name":2033,"slug":2034,"stem":2035,"__hash__":2036},"tags\u002Ftags\u002Fprywatny-dns.yml",{},"prywatny DNS","prywatny-dns","tags\u002Fprywatny-dns","kq-27-SNzP2YitFANg5iLgu0kdzyufoiOCLYApAehUc",{"id":2038,"extension":1491,"meta":2039,"name":2040,"slug":2040,"stem":2041,"__hash__":2042},"tags\u002Ftags\u002Fprzekwalifikowanie.yml",{},"przekwalifikowanie","tags\u002Fprzekwalifikowanie","TqQNM6H8dfkRMTjNT8ZWyzynSMGeFjxseCt7-fZq0nA",{"id":2044,"extension":1491,"meta":2045,"name":2046,"slug":2047,"stem":2048,"__hash__":2049},"tags\u002Ftags\u002Freact.yml",{},"React","react","tags\u002Freact","nXIcvF19iFz3UIXk2jbbJKRrr1_S9NLNYH3PUX_a2C4",{"id":2051,"extension":1491,"meta":2052,"name":2053,"slug":2053,"stem":2054,"__hash__":2055},"tags\u002Ftags\u002Fredux.yml",{},"redux","tags\u002Fredux","CYtiFQKJae6MZE4Z_2qWwt7OGctPAutMzfD9f35a6-A",{"id":2057,"extension":1491,"meta":2058,"name":2059,"slug":2059,"stem":2060,"__hash__":2061},"tags\u002Ftags\u002Fretro.yml",{},"retro","tags\u002Fretro","5AjMkMU44tDn8TV2FSTzbrvxoE7rplMmkLej7E-RIYM",{"id":2063,"extension":1491,"meta":2064,"name":2065,"slug":2066,"stem":2067,"__hash__":2068},"tags\u002Ftags\u002Fretropi.yml",{},"RetroPi","retropi","tags\u002Fretropi","v_z0VjrAHiqYkzENB2DRMmo-V9VwE-8D2V_pRT-EBxw",{"id":2070,"extension":1491,"meta":2071,"name":2072,"slug":2073,"stem":2074,"__hash__":2075},"tags\u002Ftags\u002Frozwoj.yml",{},"rozwój","rozwoj","tags\u002Frozwoj","RkL4It2FQnfcyHt1gNPjQ7cLqxrpgMy9ewFnPkF5sms",{"id":2077,"extension":1491,"meta":2078,"name":2079,"slug":2080,"stem":2081,"__hash__":2082},"tags\u002Ftags\u002Frzemieslnik.yml",{},"rzemieślnik","rzemieslnik","tags\u002Frzemieslnik","fLVgsq47mga12X6gNKQ6QM5tpWdwICnLJwfSDwk1xEE",{"id":2084,"extension":1491,"meta":2085,"name":1475,"slug":1475,"stem":2086,"__hash__":2087},"tags\u002Ftags\u002Fsaas.yml",{},"tags\u002Fsaas","IJK35nx0P9hIm-I-szhYuII4LVixyUi2zgQINNh0irc",{"id":2089,"extension":1491,"meta":2090,"name":2091,"slug":2092,"stem":2093,"__hash__":2094},"tags\u002Ftags\u002Fsamodzielnosc.yml",{},"samodzielność","samodzielnosc","tags\u002Fsamodzielnosc","mu6DqJVN-dhRiXCnV4A5ewTRx_ndkWH_pu7Fdf7n6XI",{"id":2096,"extension":1491,"meta":2097,"name":2098,"slug":2098,"stem":2099,"__hash__":2100},"tags\u002Ftags\u002Fselfhosting.yml",{},"selfhosting","tags\u002Fselfhosting","ScAMu2i5h-QpOOGEuIvBN9fQn0ZmfyYfvD-561cUzKs",{"id":2102,"extension":1491,"meta":2103,"name":2104,"slug":2104,"stem":2105,"__hash__":2106},"tags\u002Ftags\u002Fsenior.yml",{},"senior","tags\u002Fsenior","DFUFihqxLSI2g34_DFYLVSXQnP79966itG8NnBs44TE",{"id":2108,"extension":1491,"meta":2109,"name":2110,"slug":2110,"stem":2111,"__hash__":2112},"tags\u002Ftags\u002Fsentry.yml",{},"sentry","tags\u002Fsentry","1GB1pnjVg6ZwTqvwK7ZE529QpP-274G7z278-psv9U8",{"id":2114,"extension":1491,"meta":2115,"name":2116,"slug":2117,"stem":2118,"__hash__":2119},"tags\u002Ftags\u002Fsieci-komputerowe.yml",{},"sieci komputerowe","sieci-komputerowe","tags\u002Fsieci-komputerowe","lziU51DXijHvzSYVgbK5r_aRCBS9KLdgU5FWjE3pD4s",{"id":2121,"extension":1491,"meta":2122,"name":2123,"slug":2124,"stem":2125,"__hash__":2126},"tags\u002Ftags\u002Fsmart-home.yml",{},"smart home","smart-home","tags\u002Fsmart-home","wjGS16vdTWjBvPIfyZ7Jjv2rSAUfgKxYQTfVmfE_oNc",{"id":2128,"extension":1491,"meta":2129,"name":2130,"slug":2131,"stem":2132,"__hash__":2133},"tags\u002Ftags\u002Fsmr.yml",{},"SMR","smr","tags\u002Fsmr","hd_86HRNRQ5vp9GFDgvFR3iXcRs57XNvESz05e-vh-o",{"id":2135,"extension":1491,"meta":2136,"name":2137,"slug":2137,"stem":2138,"__hash__":2139},"tags\u002Ftags\u002Fspotkanie.yml",{},"spotkanie","tags\u002Fspotkanie","G-4xZsmDWDaZnA1t7fWrsGY0CvA2PWBRch_ISxgV3eY",{"id":2141,"extension":1491,"meta":2142,"name":2143,"slug":2143,"stem":2144,"__hash__":2145},"tags\u002Ftags\u002Fstash.yml",{},"stash","tags\u002Fstash","x-cfxrcr_me1q-Ea4BqtRl041a1CjwZbFM76VlobkVE",{"id":2147,"extension":1491,"meta":2148,"name":2149,"slug":2150,"stem":2151,"__hash__":2152},"tags\u002Ftags\u002Fstore-management.yml",{},"store management","store-management","tags\u002Fstore-management","BDlb8jliEvzP4ByR_nwh5YcPAphegyjsvxnwheppvwM",{"id":2154,"extension":1491,"meta":2155,"name":2156,"slug":2157,"stem":2158,"__hash__":2159},"tags\u002Ftags\u002Fstream-deck.yml",{},"stream deck","stream-deck","tags\u002Fstream-deck","ETKaTcPMSGRXiF8fX9HaCChrkWvjK1Qhc8DCtKNRLFo",{"id":2161,"extension":1491,"meta":2162,"name":2163,"slug":2164,"stem":2165,"__hash__":2166},"tags\u002Ftags\u002Fstudia-podyplomowe.yml",{},"studia podyplomowe","studia-podyplomowe","tags\u002Fstudia-podyplomowe","CllbIMrpHwk7nHpdgNS5EJlfoY37AYtu6D28xcL7B8Y",{"id":2168,"extension":1491,"meta":2169,"name":2170,"slug":2170,"stem":2171,"__hash__":2172},"tags\u002Ftags\u002Fswitch.yml",{},"switch","tags\u002Fswitch","PqeuQm8ai89DcVFTdIBBYnrs6IVq0oystkF3JdV2cbQ",{"id":2174,"extension":1491,"meta":2175,"name":2176,"slug":2177,"stem":2178,"__hash__":2179},"tags\u002Ftags\u002Fszafa-rack.yml",{},"szafa rack","szafa-rack","tags\u002Fszafa-rack","Tdq-0TqjtHfOvyhnHIwrDsPzQYMI6Rkb3iJBoqgudAc",{"id":2181,"extension":1491,"meta":2182,"name":2183,"slug":2183,"stem":2184,"__hash__":2185},"tags\u002Ftags\u002Fszkolenia.yml",{},"szkolenia","tags\u002Fszkolenia","Ty9KLofCdboQngGvYkJOH1YZpBX-E3_Y1SLrdGucptY",{"id":2187,"extension":1491,"meta":2188,"name":2189,"slug":2190,"stem":2191,"__hash__":2192},"tags\u002Ftags\u002Fszkolenie-front-end.yml",{},"szkolenie front-end","szkolenie-front-end","tags\u002Fszkolenie-front-end","yv2XwBbhwF8m1vceHXglBt_lax32HDj4iqYS8ymfIpM",{"id":2194,"extension":1491,"meta":2195,"name":2196,"slug":2197,"stem":2198,"__hash__":2199},"tags\u002Ftags\u002Fszkolnictwo-zawodowe.yml",{},"szkolnictwo zawodowe","szkolnictwo-zawodowe","tags\u002Fszkolnictwo-zawodowe","wHy70cvPzW-iXNTesa8dnmsUN3GZ6RQ_08rvp2jcr-o",{"id":2201,"extension":1491,"meta":2202,"name":2203,"slug":2203,"stem":2204,"__hash__":2205},"tags\u002Ftags\u002Ftech3camp.yml",{},"tech3camp","tags\u002Ftech3camp","2xN4prsqldeVcTsCibyLj-T84k_q27SekfsQ9H3ml6w",{"id":2207,"extension":1491,"meta":2208,"name":2209,"slug":2209,"stem":2210,"__hash__":2211},"tags\u002Ftags\u002Ftestowanie.yml",{},"testowanie","tags\u002Ftestowanie","bQ7J7HLrZe6c9Me3bn_3VCbshav5tsqNTBIwd0xkRaQ",{"id":2213,"extension":1491,"meta":2214,"name":2215,"slug":2215,"stem":2216,"__hash__":2217},"tags\u002Ftags\u002Ftesty.yml",{},"testy","tags\u002Ftesty","JDNtVkIDLY5e-th779qHOQFRrQ6Ywoq8us2HXlBz9PY",{"id":2219,"extension":1491,"meta":2220,"name":2221,"slug":2222,"stem":2223,"__hash__":2224},"tags\u002Ftags\u002Ftruenas.yml",{},"TrueNas","truenas","tags\u002Ftruenas","jGviBDrcOLcc4LIDAMUINs_clt6cqQIbnmCsGjlBoEU",{"id":2226,"extension":1491,"meta":2227,"name":2228,"slug":2228,"stem":2229,"__hash__":2230},"tags\u002Ftags\u002Ftuya.yml",{},"tuya","tags\u002Ftuya","MwpPoYlxeAiebaRVNdxytmFq9k0BpiTEbiEvwh4pfq4",{"id":2232,"extension":1491,"meta":2233,"name":2234,"slug":2234,"stem":2235,"__hash__":2236},"tags\u002Ftags\u002Fublock.yml",{},"ublock","tags\u002Fublock","EPnKEvKkfWB2hbpkolTIytNQ9c12jSrnctf8CWEVbUM",{"id":2238,"extension":1491,"meta":2239,"name":2240,"slug":2241,"stem":2242,"__hash__":2243},"tags\u002Ftags\u002Fvirtual-host.yml",{},"virtual host","virtual-host","tags\u002Fvirtual-host","Ru2r4wU7txKcWDbL3hq2QGx7v8gKwTJE25BItrzjqCQ",{"id":2245,"extension":1491,"meta":2246,"name":2247,"slug":2248,"stem":2249,"__hash__":2250},"tags\u002Ftags\u002Fvoiceover.yml",{},"VoiceOver","voiceover","tags\u002Fvoiceover","7_jZqkfOk163vezQCATCpkIhdxmxfXe5dsLjgORGRWc",{"id":2252,"extension":1491,"meta":2253,"name":2254,"slug":2255,"stem":2256,"__hash__":2257},"tags\u002Ftags\u002Fvue.yml",{},"Vue","vue","tags\u002Fvue","9ztytvQnoFLSGIXCwVz0HDl1yEBgdxBtwfIb4xxED8w",{"id":2259,"extension":1491,"meta":2260,"name":2261,"slug":1476,"stem":2262,"__hash__":2263},"tags\u002Ftags\u002Fvue-js.yml",{},"vue.js","tags\u002Fvue-js","ZEglZJ4b32MxGRUCWg3ij0_Sz-YkJDI60yOFUG3Dip8",{"id":2265,"extension":1491,"meta":2266,"name":2267,"slug":2267,"stem":2268,"__hash__":2269},"tags\u002Ftags\u002Fvuejs.yml",{},"vuejs","tags\u002Fvuejs","Qz3030ujqXE_33tL5hbF8n1MGIh1jpRtdzXVrQT79jA",{"id":2271,"extension":1491,"meta":2272,"name":2273,"slug":2273,"stem":2274,"__hash__":2275},"tags\u002Ftags\u002Fvuenews.yml",{},"vuenews","tags\u002Fvuenews","5I7T-cG9aZzeR62I-tWYDruQvjkSbRxtAeDI9otWrR8",{"id":2277,"extension":1491,"meta":2278,"name":2279,"slug":2279,"stem":2280,"__hash__":2281},"tags\u002Ftags\u002Fvuetoolbox.yml",{},"vuetoolbox","tags\u002Fvuetoolbox","y5NXiZfQviI16DIkNjTxSwnLQIyrXs7OBZjVY1IyNmk",{"id":2283,"extension":1491,"meta":2284,"name":2285,"slug":2285,"stem":2286,"__hash__":2287},"tags\u002Ftags\u002Fvuex.yml",{},"vuex","tags\u002Fvuex","ksF82HLoN49mJn2cJ0DhYz_Dt6mlrJDT82Ufu6QKmKQ",{"id":2289,"extension":1491,"meta":2290,"name":2291,"slug":2292,"stem":2293,"__hash__":2294},"tags\u002Ftags\u002Fweb-development.yml",{},"web development","web-development","tags\u002Fweb-development","144N0DLmtEIX98zdSuOWIsCZYMHyxStp8_ZksWK2M7E",{"id":2296,"extension":1491,"meta":2297,"name":2298,"slug":2299,"stem":2300,"__hash__":2301},"tags\u002Ftags\u002Fwladyslawowo.yml",{},"Władysławowo","wladyslawowo","tags\u002Fwladyslawowo","LgrtfAzosbyNoEeZ6_GWMrueP29fN7fPL3N5Kp5Wm4w",{"id":2303,"extension":1491,"meta":2304,"name":2305,"slug":2306,"stem":2307,"__hash__":2308},"tags\u002Ftags\u002Fwork-life-balance.yml",{},"work-life balance","work-life-balance","tags\u002Fwork-life-balance","hXw9EMtMUVm71LSUBz1o6Ttz7xlyrsnMo-VOEfMJwr0",{"id":2310,"extension":1491,"meta":2311,"name":2312,"slug":2313,"stem":2314,"__hash__":2315},"tags\u002Ftags\u002Fxbox.yml",{},"XBOX","xbox","tags\u002Fxbox","tDsqBFEx88ZSQxV8Q78dFlkSdjNdQOwFU4jn0D2wcYQ",{"id":2317,"avatar":2318,"bio":2319,"extension":1491,"intro":2320,"links":2321,"meta":2326,"name":2327,"slug":6,"stem":2328,"__hash__":2329},"authors\u002Fauthors\u002Fmaciej-walczak.yml","\u002Fmaciej.png","Senior Front-End Developer, właściciel MacWebcoder.","Cześć! Nazywam się Maciej i programuję zawodowo od ponad 20 lat – zaczynałem od PHP, a od wielu lat specjalizuję się we frontendzie. Prowadzę własną działalność MacWebcoder i na co dzień współpracuję z Grupą Autopay jako Senior Front-End Developer. Przez kilka lat uczyłem też programowania – na kursach dla początkujących i na studiach podyplomowych. Na blogu piszę o frontendzie, moim homelabie i o tym, co myślę o pracy programisty.",[2322],{"label":2323,"url":2324,"icon":2325},"YouTube","https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCMG_PvHPcSe0TCmnIXvzB1Q","i-lucide-youtube",{},"Maciej Walczak","authors\u002Fmaciej-walczak","H6ocdci2dcMuReMxMUAmRigqeWsj129ukqYgxQoEthU",1791998573297]