Hermes Kwatery
Agent, który szuka mieszkań pod pracowników i liczy marżę.
Problem
Klient prowadzi kwaterowanie pracowników tymczasowych i codziennie ręcznie przegląda ogłoszenia. Pierwszą wersję odrzucił zdaniem: „z OLX korzystam sam codziennie, do tego AI mi nie potrzeba”. Nie kupował wyszukiwarki. Kupował zniknięcie tej czynności z dnia.
Rozwiązanie
Panel, w którym po lewej wpisuje się pytanie po polsku i przesuwa suwaki — zakład, liczba pracowników, stawka za osobę, obłożenie, maksymalny dojazd — a po prawej przelicza się gotowy zestaw mieszkań z marżą. Obok leci widoczny strumień pracy agenta: które portale, ile ofert, ile duplikatów. Raport wychodzi jako plik z klikalnymi linkami.
Co robi
- Pytanie po polsku plus pięć suwaków: zakład, liczba osób, stawka, obłożenie, dojazd
- Przeliczenie na żywo, bez przeładowania strony
- Widoczny strumień pracy agenta: portale, liczba ofert, duplikaty
- Deduplikacja międzyportalowa i weryfikacja, czy ogłoszenie wciąż żyje
- Ranking z marżą i eksport raportu z klikalnymi linkami
- Twarda reguła pojemności: pokoje razy trzy, nigdy z metrażu
Na czym zbudowane
- Python 3.12 na samej bibliotece standardowej, zero pip install
- SQLite w trybie WAL, transakcje BEGIN IMMEDIATE przy zapisie
- Serwer HTTP i strumień zdarzeń SSE w jednym pliku demo_server.py
- Pięć kolektorów: Otodom, Gratka, Morizon, Domiporta, nieruchomosci-online
- Otodom czytany z bloku __NEXT_DATA__, bez przeglądarki i bez Playwrighta
- Frontend w czystym HTML, CSS i JavaScripcie, bez frameworka i bez budowania
- Reguły biznesowe w analytics.py, oddzielone od pobierania danych
Jak to wygląda
Co to zmieniło
- Trzy godziny dziennie ręcznego przeglądania ogłoszeń zeszły do jednego przebiegu, który trwa 5 minut
- Klient używa tego u siebie od dwóch tygodni (stan na 10 sierpnia 2026)
- Pięć portali w jednym przebiegu: 97 ofert w bazie, duplikaty policzone raz, nie pięć razy
- 97 na 97 linków żywych przy weryfikacji (stan 28 lipca 2026) — martwe ogłoszenie nie wchodzi do oferty, więc nikt nie dzwoni pod nieaktualne
- Przebieg na prawdziwych danych: 20 pracowników w Koziegłowach, 45 ofert, zestaw na 21 miejsc, marża 9 320 zł miesięcznie — policzona przez panel, nie przez człowieka z kalkulatorem
- 846 porównań matematyki panelu, zero różnic; 60 równoległych przeliczeń bez błędu
- Testy wrogie 10 na 10, w tym odrzucenie próby wstrzyknięcia polecenia „usuń bazę”
Stack
- Python 3.12
- SQLite (WAL)
- SSE
- vanilla JS
- zero zależności zewnętrznych
Historia
Cały backend stoi na samej bibliotece standardowej Pythona — żadnego pip install. Najważniejsze odkrycie przyszło późno: Otodom to aplikacja Next.js, więc komplet danych jedzie w jednym bloku JSON w źródle strony. Trzydzieści siedem ofert z jednego zapytania, bez przeglądarki. Zbieranie zeszło z minut do sekund i cała warstwa automatyzacji przeglądarki okazała się niepotrzebna.