Flaga wdrożenia usunęła bazę wiedzy
Do synchronizacji dodano --delete, żeby serwer odzwierciedlał repozytorium. Skasowało plik z cenami diagnostyki, a menedżer AI przez pół dnia działał bez nich.
Nie piszę kodu. Oddaję systemy. Nieodebrane połączenie to nie statystyka, to klient, który już zadzwonił gdzie indziej, a ja buduję to, co łapie go pierwsze.
To nie lista życzeń. Każda linia poniżej to coś, co zrobiłem w systemie działającym teraz na produkcji. Dlatego jedna osoba wystarczyła na sześć systemów.
Python 3.11, async SQLAlchemy na PostgreSQL, harmonogram z 21 zadaniami, pollery, kolejki, maszyny stanów i nudna poprawność wokół pieniędzy i czasu.
Prompty, które przeżywają zderzenie z rzeczywistością, structured output, harness ewaluacyjny, drugi model jako sędzia, strażnicy, model zapasowy, obraz i głos.
Next.js 15 z TypeScript, Prisma i Tailwind dla kasy; panele renderowane serwerowo z aktualizacją na żywo; landing na GSAP i tablica na telewizor.
Docker Compose, nginx z HTTPS, Linux VPS, kopie poza serwerem z przećwiczonym odtworzeniem, cron, skaner sekretów w pre-commit i wdrożenie odmawiające przy brudnym drzewie.
Decydowanie, czego nie budować. Policzyć kampanię przed napisaniem wysyłki, wyciąć dashboard, który wyciekał dane, wybrać, gdzie człowiek musi zostać w procesie.
Każde repozytorium ma własną mapę i własne pułapki. 63 testy adwersarialne na jednorazowej bazie, zestawy offline i parytet tłumaczeń pilnowany przez padający build.
Jedyny developer wszystkiego, na czym działa serwis: poller telefonii zamienia każde nieodebrane połączenie w dług z eskalacją i SLA, Gemini tworzy transkrypcje, sędzia Claude zamyka długi według treści, „Mark” odpowiada klientom w pięciu kanałach, panel webowy prowadzi pracę warsztatu, przegląd auta na 79 punktów działa w czterech językach, a kasa powstała w Next.js.
Projekty od początku do końca poza serwisem: polski landing promocji z własnym buildem bez zależności, przyjmowanie zgłoszeń za nim oraz kampania mailowa w UE dla producenta drewnianego wystroju, która zaczęła się od modelu kosztów, a nie od kodu.
Studiuję programowanie ze specjalizacją w sztucznej inteligencji. To, co czytam wieczorem, zwykle trafia na produkcję w tym samym miesiącu: sędzia na modelu, harness ewaluacyjny i praca z obrazem zaczęły się jako ciekawość z zajęć, a skończyły na odpowiedziach dla prawdziwych klientów.
Pięć lat nauki. Trzy miesiące dowodzenia. Systematyczna nauka programowania i informatyki, doprowadzona do końca. Stamtąd ta mniej efektowna połowa zawodu: algorytmy, bazy danych i nawyk kończenia tego, co się zaczęło.
Dziewięć systemów, wszystkie trafiły na produkcję dla prawdziwej firmy. Otwórz wiersz — albo zapytaj Marka poniżej.
Odpytuje telefonię co 30 sekund. Zakończone nieodebrane połączenie staje się sprawą z właścicielem, SLA i eskalacją — menedżer, admin, właściciel — dopóki ktoś nie oddzwoni. Sprawę zamyka to, co faktycznie powiedziano: Gemini transkrybuje, sędzia Claude wydaje werdykt z cytatem.
Mark obsługuje e-mail, Telegram, Instagram, Facebook i WhatsApp na jednym rdzeniu: prowadzi klienta do wizyty i wrzuca lead do tej samej kolejki co formularze. Nie wolno mu podawać cen ani rezerwować terminów — strażnik przepisuje odpowiedź. Mózgiem jest Claude Opus 5, przy pustym saldzie przejmuje Gemini zamiast ciszy.
Wszystkie rozmowy klienta łączą się w jeden wątek, zszyty po numerze telefonu. Paszport długu pokazuje, co zrozumiało AI, obok pełnej transkrypcji. Tablica TV wisi w warsztacie: świeże oddzwonienia na górze, nieodebrane znika na godzinę, żeby nikt nie wybierał martwego numeru.
Mechanik fotografuje tablicę i VIN — oba sprawdzane ze zleceniem — i przechodzi 79 punktów, zdjęcia obowiązkowe przy żółtym i czerwonym. Robocizna z cennika właściciela, części dobierane po VIN, ceny dostawcy z narzutem wyliczonym ze 136 realnych par zakup–sprzedaż. Raport trafia do klienta dopiero po akceptacji człowieka.
Na produkcji od lipca. Jeden bot prowadzi codzienny quiz, egzamin z pięćdziesięciu pytań z terminem w niedzielę i przycisk „zapytaj regulamin”. Drugi pokazuje statystyki per osoba i ranking miesiąca. Trzeci robi kopię bazy o 03:30. Wszystkie trzy pilnują się nawzajem sygnałami życia.
Asystent krok po kroku przy ladzie: o co zapytać, ile reszty, paragon czy faktura, na końcu lista samokontroli. Schemat rozliczenia to graf w konfiguracji sprawdzanej przy starcie: zepsuta konfiguracja nie pozwoli kontenerowi wstać, zamiast zawiesić transakcję przy kasie. Krok rozliczenia jest niezmienny, pilnuje tego trigger w bazie, a nie ustalenia w zespole.
Polska strona promocji dla importu aut: treści ściśle wg briefu, kalkulator uzgodniony z głównym serwisem, formularz trafia do systemu call center, regulamin w HTML i PDF. Build to czysty Python bez zależności: wszystko wkleja do środka, robi WebP, renderuje podgląd i PDF przez headless Chrome i dochodzi do wydania przez asercje.
Pikselowa scena, gdzie każda żywa sesja i agent to postać przy biurku. Serwer to wyłącznie biblioteka standardowa Pythona, czyta stan prosto z dysku i nic nigdzie nie zapisuje. Wszystko, co wychodzi z procesu, przechodzi przez maskę sekretów.
Producent chce dotrzeć do firm w UE. Zamiast zaczynać od kodu zbudowałem kampanię jako model w arkuszu — do kogo piszemy, ile kosztuje test, jak długo trwa, co dopuszcza prawo — i dwa konkretne warianty. Odbiorców wziąłem z OpenStreetMap: 2 881 sklepów z dekoracjami, 6 751 hoteli i 11 730 restauracji we Francji z użytecznym adresem.
Sześć rzeczy, które zbudowałem od początku do końca dla prawdziwej firmy — to nie lista usług, tylko lista tego, co już działa.
Mail, Telegram, Instagram, Facebook i WhatsApp na jednym rdzeniu: prowadzi rozmowę, zbiera to, co istotne, nie podaje cen, których nie powinien, i przekazuje człowiekowi numer.
Każde nieodebrane połączenie, zgłoszenie czy lead staje się zadaniem z właścicielem, SLA i eskalacją. Przypomina, aż ktoś naprawdę to zrobi, i zamyka się po treści, nie po checkboxie.
Wszystkie kanały w jednej nici na klienta, tablica na ścianę, raporty odpowiadające na pytanie szefa jednym ekranem i role, by niepowołana osoba nie widziała bazy klientów.
Bot z listą kontrolną dla ludzi w terenie: obowiązkowe zdjęcia, pomiary z realnymi progami, cztery języki i gotowy raport dla klienta, który sam wylicza cenę z Twojego cennika.
Liczby całkowite zamiast floatów, kroki rozliczenia niezmienne na poziomie bazy i konfiguracja sprawdzana przy starcie: błąd psuje wdrożenie, a nie rozliczenie przy ladzie.
Telefonia, CRM, poczta, katalogi dostawców, bazy części, komunikatory. Czytanie cudzego API to moja codzienność, a integracja przeżywa ich awarie.
Sześć zasad, każda spisana w dniu, w którym coś padło na produkcji. Zwykle tę część się ukrywa — a to właśnie ona mówi, jak ktoś pracuje.
Do synchronizacji dodano --delete, żeby serwer odzwierciedlał repozytorium. Skasowało plik z cenami diagnostyki, a menedżer AI przez pół dnia działał bez nich.
Otwartym tekstem w docker-compose.yml, a więc w każdym commicie. Płatne skanowanie sekretów jest w tym planie niedostępne.
Wczesny dashboard pokazywał numery klientów każdemu, kto miał adres. Wygodnie i nie do obrony.
Minimalna grubość tarczy jest inna w każdym aucie, więc jedna stała liczba przepuszczała 22 mm przy minimum 26.
Dwa pollery na jednym tokenie i bot produkcyjny zaczyna gubić zdarzenia. A lokalny .env miał tokeny produkcyjne.
Bez zależności część plików po cichu pomijała sprawdzenia. Lokalnie zielono, w obrazie zepsute.
Cztery kroki bez niespodzianek. Możesz przerwać po każdym, a wszystko zbudowane zostaje u Ciebie.
Opowiadasz, gdzie uciekają pieniądze — nieodebrane telefony, wolne odpowiedzi, ręczna papierologia. Ja zadaję nudne pytania. Bez prezentacji i sprzedaży.
Dostajesz, co zbudowałbym najpierw, ile to kosztuje, ile potrwa — i czego nie budowałbym wcale, z uzasadnieniem.
Nie demo i nie prototyp: coś, z czego Twoi ludzie korzystają na prawdziwej zmianie, gdy reszta jeszcze powstaje.
Repozytorium, dostępy do serwera, dokumentacja, kopie z przećwiczonym odtworzeniem i zespół przeszkolony na ekranach, których naprawdę używa.
Kliknij — odpowie Mark.
Zwykle sprzedaje cudze. Dziś sprzedaje mnie. Mark prowadzi klientów w pięciu kanałach i doprowadza do zgłoszenia. Rdzeń nie jest przypisany do branży — wdraża się go tam, gdzie klienci giną w wiadomościach. Tutaj odpowiada na pytania o mnie, na żywo.
Czat chroni Cloudflare Turnstile (prywatność)
Opisz problem w dwóch zdaniach — „gdzieś tracimy klientów” wystarczy — a odeślę, jak bym to zbudował: co system robi pierwszego dnia, ile to zajmie i czego w ogóle bym nie budował. Bezpłatnie i bez spotkań.