MARCIN KINDERMAN
( CASE STUDY 08 — ©26 · META )

Zbudowane
vibe-codingiem
Built by
vibe-coding

Meta-case AI × Design Claude (Cowork) 2026
Strona, na której to czytasz, i prezentacja AI-driven Liquid UI powstały w dialogu z AI — bez jednej linii kodu napisanej ręcznie. Ale „bez kodu” nie znaczy „bez pracy”: to case o tym, co naprawdę robi projektant, gdy koduje za niego model — i instruktaż, jak zrobić to samo. The site you're reading and the AI-driven Liquid UI presentation were built in a dialogue with AI — without a single line of hand-written code. But “no code” doesn't mean “no work”: this is a case about what a designer actually does when the model does the coding — plus a how-to so you can do the same.
3
dni od decku do wdrożeniadays from deck to deploy
0
linii kodu napisanych ręcznielines of code written by hand
30+9
slajdów + podstronslides + pages
352MB
źródeł przerobionych na 26 MBof sources distilled to 26 MB
2
języki (PL/EN)languages (PL/EN)
~40
iteracji i poprawekiterations and fixes

Jak do tego doszłoHow it came about

Zaczęło się od prezentacji. Miałem deck „Vibe-coding finansów” z Mobile Trends Conference i dwa dni do meetupu I DESIGN × Mobile Trends. Poprosiłem Claude'a o recenzję — dostałem listę literówek, ocenę dramaturgii i dwa brakujące slajdy. Potem poszliśmy dalej: pełny redesign w duchu „liquid glass”, z natywnymi, edytowalnymi diagramami zamiast wygenerowanych obrazków. Plik schudł ze 100 do 17 MB. I wtedy przyszła myśl, która uruchomiła resztę: skoro opowiadam o interfejsach, które generują się same — moja prezentacja nie może być PDF-em w załączniku. Musi żyć w przeglądarce. It started with a presentation. I had my “Vibe-coding finance” deck from Mobile Trends Conference and two days until the I DESIGN × Mobile Trends meetup. I asked Claude for a review — I got a list of typos, a dramaturgy assessment and two missing slides. Then we went further: a full “liquid glass” redesign with native, editable diagrams instead of generated images. The file slimmed from 100 to 17 MB. And then came the thought that triggered everything else: if I talk about interfaces that generate themselves — my deck can't be a PDF attachment. It has to live in the browser.

Dalej potoczyła się kula śnieżna. Wskazałem dwie strony-referencje: hirotos.com (szwajcarski minimalizm strony głównej) i noth.in (edytorialne case studies) — Claude obejrzał je w mojej własnej przeglądarce i nazwał wzorce, z których złożyliśmy design system. Potem: moje portfolio PDF i 352-megabajtowy Keynote zamieniły się w siedem case studies z wideo-demami, doszły zdjęcia z gali WaysConf i sceny MTC, QR dla publiczności, obsługa klikera… aż po hosting i analitykę. Łącznie: kilka wieczorów pracy w dialogu — i ani jednej linii kodu napisanej ręcznie. Then the snowball rolled. I pointed at two reference sites: hirotos.com (Swiss-minimal homepage) and noth.in (editorial case studies) — Claude browsed them in my own browser and named the patterns we forged into a design system. Then my portfolio PDF and a 352-megabyte Keynote turned into seven case studies with video demos; WaysConf gala and MTC stage photos joined in, a QR code for the audience, presenter-clicker support… all the way to hosting and analytics. In total: a few evenings of dialogue — and not a single line of hand-written code.

Ewolucja: deck przed i poEvolution: the deck before and after

Stary slajd tytułowy — szablon korporacyjny
Nowy slajd tytułowy — liquid glass
Stary slajd treściowy
Nowy slajd treściowy — szklane karty
Po lewej: deck z marca (szablon korporacyjny, robiony „na szybko”). Po prawej: redesign zbudowany od zera skryptem — ciemny „sandwich”, szklane karty, natywne diagramy. Ta sama treść, inna liga. Wersję webową oglądasz tutaj.Left: the March deck (corporate template, made “quickly”). Right: the redesign rebuilt from scratch by script — dark “sandwich”, glass cards, native diagrams. Same content, different league. The web version lives here.

Podział pracy — kto co robiłDivision of labour — who did what

JA — PROJEKTANTME — THE DESIGNER
Kierunek artystycznyArt directionwskazałem strony-referencje (hirotos.com, noth.in) i nazwałem, co w nich ceniępicked reference sites (hirotos.com, noth.in) and named what I value in them
Wszystkie decyzjeEvery decisionpaleta, języki, pozycjonowanie, co wyciąć ze slajdów, gdzie ma wisieć QRpalette, languages, positioning, what to cut from the deck, where the QR lives
Materiał źródłowySource materialportfolio PDF, plik Keynote (352 MB!), zdjęcia z gal i konferencji, stare prezentacjeportfolio PDF, a 352 MB Keynote file, award and conference photos, old decks
Testy w realuReal-world testingtelefon, kliker, szeroki monitor — każdy zrzut ekranu wracał jako konkretna poprawkaphone, clicker, wide monitor — every screenshot came back as a concrete fix
Weryfikacja faktówFact-checkingAI z pełnym przekonaniem wpisało zły rok nagrody — wyłapałem, poprawiliśmy wszędziethe AI confidently wrote the wrong award year — I caught it, we fixed it everywhere
CLAUDE — WYKONAWCACLAUDE — THE BUILDER
Cały kodAll the codeHTML/CSS/JS bez frameworków: strona, prezentacja ze scroll-snapem, fizyka „płynnych klocków”, obsługa klikeraframework-free HTML/CSS/JS: the site, the snap presentation, the “liquid tiles” physics, clicker support
Archeologia materiałówMaterial archaeologywyciągnęło oryginały z wnętrza Keynote'a i PDF-ów, skompresowało dema wideo z 96 MB do 3 MBdug originals out of Keynote and PDF internals, compressed video demos from 96 MB to 3 MB
DiagnostykaDiagnosticsczarny embed YouTube (wyłączony przez właściciela), uparty cache, kolizje na mobile — każde „nie działa” rozłożone na przyczynya black YouTube embed (owner-disabled), stubborn caches, mobile collisions — every “it's broken” traced to root causes
Tłumaczenie i wdrożenieTranslation and deploymentpełna wersja EN, RODO-baner dla analityki, nagłówki bezpieczeństwa, instrukcja pod SiteGrounda full EN version, a GDPR consent banner for analytics, security headers, a SiteGround playbook

Proces w sześciu krokachThe process in six steps

01
DeckDeck
Przebudowa prezentacji PPT (recenzja, nowe slajdy, redesign „liquid glass”, 100→17 MB).Rebuilding the PPT deck (review, new slides, “liquid glass” redesign, 100→17 MB).
02
ReferencjeReferences
Claude obejrzał wskazane strony w mojej przeglądarce i nazwał wzorce — z tego powstał design system.Claude browsed my reference sites in my own browser and named the patterns — the design system grew from that.
03
TreściContent
Case studies zbudowane z moich materiałów: portfolio PDF, Keynote, prezentacje z UX Poland.Case studies mined from my materials: the portfolio PDF, Keynote, UX Poland decks.
04
InterakcjeInteractions
Płynne klocki z fizyką, budowanie interfejsu drag & dropem, kliker, QR — teza wystąpienia do dotknięcia.Liquid tiles with physics, drag & drop interface building, clicker, QR — the talk's thesis made touchable.
05
WdrożenieDeploy
SiteGround zamiast WordPressa, .htaccess, RODO + Google Analytics (Claude sam wyklikał ID w moim panelu).SiteGround replacing WordPress, .htaccess, GDPR + Google Analytics (Claude click-found the ID in my own panel).
06
QA
Testy na żywej stronie: wąskie okno, telefon, konsola, GA Realtime — i runda poprawek mobile.Live-site testing: narrow window, phone, console, GA Realtime — and a round of mobile fixes.

Za kulisami: archeologia materiałówBehind the scenes: material archaeology

Arkusz roboczy: identyfikacja 14 filmów wyciągniętych z pliku Keynote
Prawdziwy artefakt z sesji: arkusz, którym Claude identyfikował 14 filmów znalezionych we wnętrzu mojego Keynote'aA real session artefact: the sheet Claude used to identify 14 videos found inside my Keynote file

Najlepsze treści nie leżały na wierzchu. Plik Keynote to w środku zwykły ZIP — po rozpakowaniu wypadło z niego 635 plików: oryginalne zdjęcia w pełnej rozdzielczości, dema produktów, których PDF-owe portfolio tylko linkowało do YouTube'a, nawet wektorowe logo. Claude renderował arkusze kontaktowe, ja wskazywałem, co jest czym — i tak dema z Meksyku (47 MB) i OnePlace (96 MB) trafiły na stronę jako 2–3-megabajtowe wideo. Podobnie z PDF-em: zamiast zrzutów stron, pdfimages wyciągnęło osadzone oryginały — w tym moje zdjęcie w rozdzielczości 2380×3332 ze strony kontaktowej. The best content wasn't lying on the surface. A Keynote file is a plain ZIP inside — unpacking it spilled out 635 files: full-resolution originals, product demos my PDF portfolio only linked on YouTube, even a vector logo. Claude rendered contact sheets, I identified what was what — and that's how the Mexico (47 MB) and OnePlace (96 MB) demos landed on the site as 2–3 MB videos. Same with the PDF: instead of page screenshots, pdfimages pulled out the embedded originals — including my 2380×3332 photo from the contact page.

Hosting: z WordPressa na czyste plikiHosting: from WordPress to plain files

Stara strona stała na WordPressie u SiteGround. Nowa to czyste pliki statyczne — bez bazy, panelu i wtyczek, czyli bez tego wszystkiego, co się zwykle hakuje i psuje. Podmiana zajęła kwadrans w menedżerze plików hostingu, według zasady, którą polecam każdemu: The old site ran WordPress on SiteGround. The new one is plain static files — no database, no admin panel, no plugins, i.e. none of the things that usually get hacked or break. The swap took fifteen minutes in the host's file manager, following a rule I'd recommend to anyone:

Przenieś, nie kasujMove, don't deletecały WordPress wylądował w folderze obok — rollback w minutę, gdyby coś poszło nie takthe whole WordPress moved to a folder aside — a one-minute rollback if anything went wrong
.htaccesswymuszony https i www, krótkie aliasy (np. /liquid-ui), autorska strona 404 i nagłówki bezpieczeństwa (CSP, HSTS, X-Frame-Options)forced https and www, short aliases (e.g. /liquid-ui), a custom 404 and security headers (CSP, HSTS, X-Frame-Options)
Cache pod kontroląCache under controlwersjonowanie zasobów (site.css?v=N) — każda poprawka dociera od razu, zamiast czekać tydzień w pamięci przeglądarekasset versioning (site.css?v=N) — every fix lands immediately instead of waiting a week in browser caches
EFEKTTHE RESULT
26 MB całości, ~1,5 MB na wizytę26 MB total, ~1.5 MB per visitwideo dogrywa się dopiero przy scrollu (lazy loading + preload=metadata)video loads only on scroll (lazy loading + preload=metadata)
Minimalna powierzchnia atakuMinimal attack surfacenie ma logowania ani SQL-a — nie ma czego włamać; zostają dobre hasła i 2FA na hostinguno login, no SQL — nothing to break into; what remains is good passwords and 2FA on the host
EdytowalnośćEditabilitykażdy tekst to czytelny HTML — poprawię go w notatniku albo… kolejną rozmową z AIevery text is readable HTML — editable in a text editor or… in the next AI conversation
SiteGround — Web Hosting. Crafted for easy site management.
PEŁNA JAWNOŚĆFULL DISCLOSURE

Z SiteGround korzystam sam — to na nim stoi strona, którą właśnie czytasz — i z czystym sumieniem polecam. Uczciwie: baner obok to link afiliacyjny. Jeśli kupisz przez niego hosting, zapłacisz dokładnie tyle samo, a mnie wesprzesz w drobny sposób — zwróci mi się koszt utrzymania tej strony. I use SiteGround myself — the site you're reading runs on it — and I recommend it with a clear conscience. Honestly: the banner is an affiliate link. If you buy hosting through it, you pay exactly the same, and you support me in a small way — it pays back the cost of keeping this site online.

Analityka bez nadużyćAnalytics without the creep factor

Chciałem wiedzieć, które projekty was ciekawią — bez śledzenia kogokolwiek na siłę. Google Analytics 4 ładuje się więc dopiero po kliknięciu „Zgadzam się” w banerze; „Nie teraz” oznacza dokładnie zero skryptów Google'a. Do tego anonimizacja IP, jawnie odmówione sygnały reklamowe i polityka bezpieczeństwa (CSP), która wpuszcza wyłącznie trzy domeny Google — żaden inny obcy kod nie ma prawa się wykonać. I wanted to know which projects interest you — without force-tracking anyone. So Google Analytics 4 loads only after you click “Accept” in the banner; “Not now” means exactly zero Google scripts. Add IP anonymisation, explicitly denied advertising signals, and a security policy (CSP) that allowlists just three Google domains — no other third-party code is allowed to run.

Mój ulubiony moment całego projektu: zamiast dyktować mi instrukcję, Claude sam wszedł do panelu Google Analytics w mojej przeglądarce, znalazł istniejącą usługę z czasów WordPressa, wyjął z niej Measurement ID i wpisał go w kod. A po wdrożeniu — wszedł na stronę, kliknął zgodę na banerze i pokazał mi raport czasu rzeczywistego z dwoma użytkownikami z Polski: nim i mną. Test przeszedł sam siebie. My favourite moment of the whole project: instead of dictating instructions, Claude walked into my Google Analytics panel in my own browser, found the WordPress-era property, pulled the Measurement ID and wired it into the code. After deployment it visited the site, accepted the consent banner and showed me the realtime report with two users from Poland: itself and me. The test passed itself.

Czego się nauczyłemWhat I learned

Pokazuj, nie opisujShow, don't describedwa linki-referencje zrobiły więcej niż sto przymiotników w promptachtwo reference links did more than a hundred adjectives in prompts
Zrzut ekranu to najlepszy promptA screenshot is the best promptjedno zdjęcie z iPhone'a naprawiło więcej niż trzy opisy słowneone iPhone photo fixed more than three verbal descriptions
Pliki, nie wklejkiFiles, not pastesobrazy wklejone w czat to tylko podgląd — materiały wrzucaj do wspólnego folderuimages pasted into chat are just previews — drop materials into the shared folder
Nie ufaj faktom bez weryfikacjiDon't trust facts unverifieddaty, nazwiska i liczby sprawdzaj osobiście — pewny ton nie znaczy „prawda”check dates, names and numbers yourself — a confident tone doesn't mean “true”
Nie akceptuj „powinno działać”Don't accept “should work”wymagaj testu na żywym adresie i prawdziwym urządzeniu — my znaleźliśmy tak każdy poważny błąddemand tests on the live URL and a real device — that's how every serious bug here was found
Projektant nie znikaThe designer doesn't disappeardecyzje, smak, fakty i odpowiedzialność zostały po mojej stronie — dokładnie jak w tezie prezentacjidecisions, taste, facts and accountability stayed with me — exactly as the talk argues

Zrób to sam — instruktażDo it yourself — the how-to

1. Zbierz materiały (portfolio, CV, zdjęcia) w jednym folderze i podepnij go do Claude'a (tryb Cowork lub Claude Code).
2. Znajdź 2–3 strony, które kochasz — i nazwij, co w nich lubisz.
3. Wystartuj promptem (do pobrania obok) albo zainstaluj skill — poprowadzi AI przez cały proces: od design systemu po wdrożenie.
4. Iteruj małymi krokami: jedna strona → feedback → reszta.
5. Testuj na telefonie i żywym adresie. Poprawki zgłaszaj zrzutami ekranu.
1. Gather your materials (portfolio, CV, photos) in one folder and connect it to Claude (Cowork or Claude Code).
2. Find 2–3 sites you love — and name what you love about them.
3. Start with the prompt (download alongside) or install the skill — it walks the AI through the whole process, design system to deployment.
4. Iterate in small steps: one page → feedback → the rest.
5. Test on a phone and the live URL. Report fixes with screenshots.

Nie potrzebujesz umieć programować — potrzebujesz umieć chcieć konkretnie: wiedzieć, jak ma być, poznać po wyniku, że jeszcze nie jest, i nazwać różnicę. To jest dokładnie warsztat projektanta. Kod okazał się najłatwiejszą częścią tego projektu. You don't need to know how to code — you need to know how to want precisely: to know how it should be, to recognise it isn't yet, and to name the difference. That is exactly a designer's craft. The code turned out to be the easiest part of this project.

DO POBRANIADOWNLOADS

Zabierz mój warsztat ze sobąTake my toolkit with you

Dwa pliki, które destylują wszystko powyżej — proces, pułapki i gotowe otwarcie rozmowy. Bierz, używaj, przerabiaj. Jeśli zbudujesz na tym swoją stronę, daj znać — chętnie zobaczę. Two files distilling everything above — the process, the pitfalls and a ready-made conversation opener. Take them, use them, remix them. If you build your site on top, let me know — I'd love to see it.

Instalacja skilla: Claude → Ustawienia → Capabilities → Skills. Plik .skill to zwykły zip z instrukcją SKILL.md w środku — możesz najpierw zajrzeć, co instalujesz (i tak właśnie należy robić z każdym skillem z internetu).Installing the skill: Claude → Settings → Capabilities → Skills. A .skill file is a plain zip with a SKILL.md inside — peek before you install (as you should with any skill from the internet).