Archiwum
Wszystkie zarchiwizowane wpisy.
-
Tydzień, w którym zaplecze zaczęło mówić
Paweł G.6 min czytaniaPrzez pół roku budowałem rzeczy dla audytorium liczącego mniej więcej zero osób. W dwóch tygodniach maja sześć części systemu przestało być prywatne — i każda zaczęła mówić do kogoś innego.
-
Bot dostaje ręce. Wirtualny zespół przestaje być metaforą w momencie, gdy ktoś coś zapisze
Paweł G.6 min czytaniaDo tygodnia temu bot tylko czytał. Teraz pisze — i to do drugiego produktu, nie do tego, w którym mieszka. Linia między asystentem a członkiem zespołu właśnie się przesunęła.
-
Mały słownik DDD: pojęcia, które wracają w tych wpisach
Paweł G.3 min czytaniaDDD po ludzku — kontekst, agregat, zdarzenie domenowe, Result. Krótkie definicje pojęć, które przewijają się przez cały blog. Wracaj tu, gdy coś zabrzmi obco.
-
Bot na Discordzie jako prawa ręka: buduję wirtualny zespół jednoosobowej firmy
Paweł G.4 min czytaniaJestem jedną osobą, ale chcę pracować jak zespół. Buduję bota, który ma być mózgiem firmy — i celowo nie jest przywiązany do Discorda. Oto stan na dziś.
-
Apka w końcu zaczęła wyglądać jak własna dokumentacja
Paweł G.5 min czytaniaW maju 2026 ekran powitalny mówił starym imieniem produktu, renderował systemowym fontem i odbijał logo gumową animacją — wszystko wbrew temu, co od miesięcy stało w brand booku.
-
Siedem repozytoriów, jedna głowa. Co naprawdę robię w typowym tygodniu
Paweł G.6 min czytaniaJedna osoba, siedem repozytoriów, pięć dni roboczych. Brzmi jak chaos. W praktyce to system, w którym każde repo ma jedną robotę i jedno miejsce, w którym ją komuś innemu oddaje.
-
Kto widzi treść — decyduje twórca, nie serwer. Jak naprawiałem pętlę, która karała nowych
Paweł G.6 min czytaniaNowy użytkownik miał niski poziom zaufania, więc serwer pokazywał mu mniej ogłoszeń. Mniej ogłoszeń = mniej interakcji = niskie zaufanie na dłużej. Pętla ukryta w pozornie sensownej regule.
-
Skrót, który niszczy model finansowy — i dlaczego go nie wziąłem
Paweł G.4 min czytaniaMogłem skrócić start drugiego produktu o miesiąc. Trzeba było tylko jednej fikcyjnej spółki na każdego użytkownika. Im dłużej o tym myślałem, tym mniej chciałem ten skrót brać.
-
Numer SIM = osoba. A kto jest osobą w spółdzielni mieszkaniowej?
Paweł G.6 min czytaniaCała platforma stoi na zasadzie: jeden polski numer telefonu = jeden konkretny człowiek. Świetnie dla mieszkańca. Rozsypuje się w weekend, gdy spróbujesz tym uwierzytelnić spółdzielnię.
-
Mapa w dwanaście kroków, w dwie doby. Tak naprawdę wygląda nowa funkcja w aplikacji
Paweł G.5 min czytaniaWtorek rano: w aplikacji nie ma żadnej mapy. Środa wieczorem: pełen tab z rysowaniem zasięgu, połączeniem z trzema typami treści i testami wizualnymi. Pomiędzy — dwanaście commitów.
-
Token, który był w bibliotece od początku. Każdy ekran wpisywał swoje 150 milisekund
Paweł G.4 min czytaniaAplikacja ma osobny tryb dla seniorów — 25% naszych przyszłych użytkowników. Animacje powinny być wolniejsze. Token mówił 350 ms. Każdy ekran z osobna wpisywał 150.
-
Zbudowałem narzędzie do robienia narzędzi. Skasowałem je osiem tygodni później
Paweł G.6 min czytaniaPiszę na tym blogu, żeby nie przekombinowywać produktu. A potem przekombinowałem własne zaplecze: maszynę do generowania konfiguracji, której nie potrzebowałem. Cargo cult u jednej osoby.
-
Z programisty w przedsiębiorcę: zmiana, której się nie spodziewałem
Paweł G.4 min czytaniaPrzez lata mierzyłem swoją pracę jakością kodu. Budowanie własnej firmy zmusiło mnie do zupełnie innego pytania — i to była trudniejsza zmiana niż każdy framework.
-
Startup i korporacja: dwie szkoły, które mnie ukształtowały
Paweł G.4 min czytaniaNajpierw startupy, potem świadomie korporacja. Co wziąłem z każdego świata — i czemu to bank, a nie startup, nauczył mnie myśleć o firmie.
-
Płaciłem stawkę seniora za pracę sekretarki
Paweł G.5 min czytaniaMój zespół AI ma kilka modeli o bardzo różnej cenie. Długo używałem najdroższego do wszystkiego — także do zadań bez krzty myślenia. To był po prostu źle rozstawiony zespół.
-
Zacząłem traktować swój sposób pracy z AI jak osobny projekt
Paweł G.6 min czytaniaW każdym repo powtarzałem ten sam zestaw zasad dla AI. Wyciągnąłem go do osobnego miejsca — nie po to, żeby sprzedać, tylko żeby przestać wymyślać koło na nowo.
-
Zaplanowałem 80 godzin sprzątania. Większość roboty zniknęła sama
Paweł G.3 min czytaniaOsiem punktów, osiemdziesiąt godzin czyszczenia biblioteki. Gdy w końcu po nie sięgnąłem, prawie nic nie zostało do zrobienia — i to zmieniło sposób, w jaki planuję pracę z AI.
-
Biblioteka, którą odłożyłem na półkę, obudziła się sama
Paweł G.6 min czytaniaWłasną bibliotekę zostawiłem w spokoju na cztery miesiące. W styczniu odżyła — nie dlatego, że tak zaplanowałem, tylko dlatego, że produkt potrzebował zmienić jedno słowo w kontrakcie.
-
Buduję siedem projektów naraz. Po co?
Paweł G.4 min czytaniaWiększość founderów buduje jeden produkt. Ja buduję siedem — bo celem nie jest siedem rzeczy, tylko jeden system do prowadzenia firmy. O tym jest ten blog.
-
Jedno słowo odstraszało klientów instytucjonalnych
Paweł G.2 min czytaniaGrudzień 2025: funkcja się nie zmieniła, zmienił się tylko jej tytuł. 'Alerty' brzmiały jak sytuacja kryzysowa. 'Ogłoszenia' brzmiały jak platforma sąsiedzka.
-
Jak wybrałem model zarabiania zanim miałem pierwszego klienta
Paweł G.3 min czytaniaGrudzień 2025: opłata za wystawienie zamiast prowizji od transakcji. Decyzja podjęta bez danych rynkowych — i dlaczego to był właściwy moment.
-
Commit w Wigilię: dwa managery, które się nie słuchały
Paweł G.3 min czytania24 grudnia 2025: bug z wylogowaniem na mobilce. Po wylogowaniu użytkownik wciąż był zalogowany — bo dwa systemy zarządzały sesją i jeden ignorował drugi.
-
Droższa infrastruktura z powodów sprzedażowych
Paweł G.3 min czytaniaGrudzień 2025: wybrałem polskie centrum danych, choć jest droższe. Decyzja infrastrukturalna motywowana nie techniką, ale tym, co mówi klientowi.
-
Moderacja: zacząłem od AI na każdy post, skończyłem na trzech czwartych bez wielkiego modelu
Paweł G.3 min czytaniaGrudzień 2025: pierwszy projekt moderacji zakładał, że każda treść przejdzie przez AI. To kosztowało zbyt dużo i było zbyt wolne. System zaufania okazał się lepszy.
-
Czemu wybrałem numer telefonu zamiast emaila
Paweł G.2 min czytaniaGrudzień 2025: rejestracja przez email to standard. Dla polskiego rynku lokalnego — to zły standard. Każda polska karta SIM wymaga od 2016 roku podania PESEL.
-
Jeden człowiek, wiele ról — architektura multi-actor
Paweł G.3 min czytaniaListopad 2025: ta sama osoba jest usługodawcą, klientem i moderatorem jednocześnie. Jak zamodelować tożsamość, gdy role nie są wzajemnie wykluczające.
-
Pierwsze ogłoszenia — zero użytkowników
Paweł G.3 min czytaniaListopad 2025: pierwsze zlecenia sąsiedzkie i ogłoszenia społeczności gotowe. Pierwsza funkcja biznesowa w systemie — przy zerze prawdziwych użytkowników.
-
Generous Start: czemu ufam użytkownikom bardziej niż powinienem
Paweł G.3 min czytaniaListopad 2025: system weryfikacji adresu mógłby blokować każdego, kto nie przeszedł pełnej weryfikacji. Zamiast tego — ufam na wejście i weryfikuję stopniowo.
-
TERYT, czyli polska państwowa baza adresów
Paweł G.4 min czytaniaListopad 2025: weryfikacja adresu w juz-ide opiera się na TERYT — państwowym rejestrze jednostek podziału terytorialnego. Co to jest, dlaczego to wybrałem i jak to działa.
-
Test jako specyfikacja, nie weryfikacja
Paweł G.2 min czytaniaListopad 2025: Nowe podejście do testów w juz-ide. Specyfikacja-first — najpierw dokument reguły, potem implementacja i test razem.
-
Logi audytu poza główną operacją
Paweł G.3 min czytaniaListopad 2025: RODO wymaga śledzenia dostępu do danych osobowych. Dlaczego log audytu trafia do osobnej kolejki — i co by się stało, gdyby nie trafiał.
-
Kiedy agregat staje się dwoma
Paweł G.3 min czytaniaListopad 2025: jeden obiekt domenowy robił zbyt dużo. Jak rozdzielenie go na dwa poprawiło model — i dlaczego granica powinna odpowiadać granicy zmiany.
-
Geo-auth v1: dwa tygodnie do pierwszej wersji systemu weryfikacji
Paweł G.2 min czytania7 listopada 2025: system weryfikacji adresu zamieszkania — v1 gotowa. Co się zmieniło od startu, ile zajęło i co oznacza 'gotowe' bez użytkowników.
-
Najcenniejszy dokument decyzyjny to ten z odpowiedzią NIE
Paweł G.3 min czytaniaPaździernik 2025: odrzuciłem pomysł, który wyglądał jak uproszczenie. Zapis tego 'nie' okazał się ważniejszy niż większość zapisanych 'tak'.
-
Geo-auth: czy naprawdę mieszkasz, gdzie mówisz?
Paweł G.3 min czytaniaPaździernik 2025: rdzeń juz-ide — weryfikacja adresu zamieszkania. Dlaczego to jest problem architektoniczny, nie tylko product.
-
Kolejki jako architektura, nie optymalizacja
Paweł G.3 min czytaniaPaździernik 2025: pierwsze kolejki zadań w juz-ide. Dlaczego nie wszystko powinno dziać się w tej samej chwili — i co to zmienia w sposobie myślenia o aplikacji.
-
AI na $100 miesięcznie dla tysiąca użytkowników
Paweł G.3 min czytaniaPaździernik 2025: jak zaprojektowałem integrację AI z budżetem $100/miesiąc i jednym developerem — zamiast pytać 'jak wdrożyć AI', zapytałem 'za ile'.
-
Pięć dni na jedno zabezpieczenie przeglądarki
Paweł G.3 min czytaniaBezpieczeństwo, które większość pomija. Październik 2025: mechanizm blokujący złośliwe skrypty w przeglądarce — i dlaczego wdrożenie go zajęło pięć dni.
-
362 tysiące linii w jednym commicie
Paweł G.7 min czytaniaPaździernik 2025: system autoryzacji juz-ide zamknięty w jednym, absurdalnie dużym commicie. Co poszło dobrze, co poszło źle, i co z tego wynika dla pracy solo.
-
Wrzesień 2025: miesiąc, w którym kasowałem kod
Paweł G.2 min czytaniaTrzy projekty, jeden miesiąc, ten sam wzorzec: AI generuje tysiące linii, człowiek kasuje. To nie jest anty-AI — to o dyscyplinie.
-
Testy, które zawsze przechodzą
Paweł G.3 min czytaniaWrzesień 2025: odkryłem w bibliotece kod, który udawał szybki. Raporty wyglądały świetnie — liczby były sfabrykowane.
-
Aplikacja mobilna zaczyna istnieć
Paweł G.3 min czytaniaSierpień–wrzesień 2025: dlaczego zacząłem od backendu, kiedy zdecydowałem się na Neo-Brutalist UI, i jak to jest budować dwie aplikacje na raz w pojedynkę.
-
Siedemdziesiąt procent kodu do wyrzucenia
Paweł G.3 min czytaniaDwa repozytoria, 290 i 265 linii każde, i prawie identyczna struktura. Wrzesień 2025: jak jedna abstrakcja usunęła 70% duplikacji.
-
PII jako wartość, nie jako string
Paweł G.3 min czytaniaEmail to nie kawałek tekstu. Imię to nie string. Sierpień 2025: jak dane osobowe stały się typami domenowymi, i dlaczego RODO pomogło pisać lepszy kod.
-
Autoryzacja, która nie pyta o rolę
Paweł G.3 min czytaniaPrzez lata sprawdzałem: 'czy to admin?'. Sierpień 2025 to zmieniło — system autoryzacji, który pyta wyłącznie o akcję i obiekt.
-
Od 21 kontekstów do 6: lekcja o over-engineeringu
Paweł G.5 min czytaniaZaplanowałem 21 kontekstów dla aplikacji z zerem użytkowników. Oto dlaczego zredukowałem plan do 6 i czego nauczył mnie over-engineering w solo-startupie.
-
Jak zmieniałem szyfrowanie: naprawiłem błąd, który wrócił kilka tygodni później
Paweł G.3 min czytaniaZastane zabezpieczenie okazało się przestarzałe. Wymieniłem je. Myślałem, że to zamknięty temat — nie był.
-
Fundament: dlaczego pierwszy tydzień spędziłem na rzeczach niewidocznych
Paweł G.5 min czytaniaTrzy prototypy umarły tak samo: szybki start, chaos po miesiącu, przepisywanie od zera. Dlatego pierwszy tydzień poświęciłem na fundamenty, których żaden użytkownik nie zobaczy.
-
Jeden schemat zamiast trzech: jak przestałem opisywać to samo w kółko
Paweł G.3 min czytaniaW zwykłym NestJS to samo pole API opisujesz trzy razy. Opowiadam, czemu w juz-ide wybrałem jedno źródło prawdy — i co mnie to kosztowało.
-
Osiemnastu agentów AI w jeden wieczór. Następnego ranka zostało dziewięciu
Paweł G.3 min czytaniaW jeden wieczór wrzuciłem do repo 18 agentów AI jako wirtualny zespół. Następnego ranka połowę przeniosłem do „fazy drugiej”. Co z tego zostało.
-
Skąd u mnie DDD: historia samouka
Paweł G.4 min czytaniaZacząłem jako samouk od frontendu. Potem projekt z DDD uderzył jak ściana. Dziś nie buduję inaczej — i piszę własną bibliotekę. Oto jak do tego doszło.
-
Własna biblioteka DDD: build, buy czy wydziel-własne?
Paweł G.4 min czytaniaZamiast kupić gotowy framework albo pisać od zera, wydzieliłem prywatną bibliotekę DDD. Czy to sens dla solo foundera, czy kolejny over-engineering?
-
Świadoma pauza: zatrzymałem produkt, żeby zbudować bibliotekę
Paweł G.4 min czytaniaDwa tygodnie po starcie produktu zatrzymałem go na prawie dwa miesiące i zbudowałem osobną bibliotekę. Brzmi jak prokrastynacja. Była najlepszą decyzją tamtego lata.
-
Dwa miesiące ciszy w git
Paweł G.3 min czytania16 maja: jeden commit-drobiazg. Potem 60 dni nic. 16 lipca: powrót. Build-in-public ma też puste miejsca na wykresie aktywności.
-
pgvector czy PostGIS: pierwsza decyzja architektoniczna której nie ma w ADR
Paweł G.4 min czytaniaTego samego dnia co basic setup zmieniłem jeden wiersz w konfiguracji bazy danych. Mała zmiana, duży sygnał o tym, co tak naprawdę buduję.
-
Od zera do działającego stacku w cztery dni
Paweł G.3 min czytaniaPoniedziałek: jeden plik README. Piątek: 29 plików, Docker, CI-ready stack. Co wrzucić w pierwszy realny commit, a co odpuścić.