O projekcie
Projekt własny, zbudowany w całości samodzielnie — od pomysłu i modelu danych po działający serwis online. Celem było uporządkowanie procesu szukania pracy i zautomatyzowanie tej części, którą zwykle robi się ręcznie.
Jak to działa
Wklejasz link do ogłoszenia, a system sam zbiera stanowisko, firmę, wynagrodzenie, lokalizację i wymagania. Oferta staje się kartą na tablicy kanban, której etapy konfigurujesz pod siebie.
- Ciekawe → Wysłane CV → Rekruter odpisał → Rozmowa → Oferta
- Stare oferty można zarchiwizować i w razie potrzeby przywrócić
- Statystyki: ile aplikacji, ile odpowiedzi, ile rozmów, ile ofert
Asystent AI
AI nie jest tu okienkiem czatu — to narzędzie przypisane do konkretnej oferty.
- Analiza umiejętności
- Porównuje CV z wymaganiami ogłoszenia: co się pokrywa, czego brakuje i które wymagania już pokrywa twoje doświadczenie.
- List motywacyjny
- Generuje list pod konkretną ofertę w wybranym tonie. Tekst można poprawić i poprosić o nową wersję uwzględniającą zmiany.
- Dopasowane CV
- Tworzy wersję CV pod ogłoszenie, uwypuklając istotne doświadczenie, ocenia zgodność z systemami ATS i eksportuje do Worda.
- Przygotowanie do rozmowy
- Generuje prawdopodobne pytania na podstawie ogłoszenia i twojego doświadczenia. Notatki po rozmowach są zapisywane i brane pod uwagę przy kolejnych przygotowaniach.
Decyzje techniczne
Kluczowe technologie wybrałem pod konkretne problemy produktu, a nie z przyzwyczajenia.
- PostgreSQL + pgvector
- Żeby system rozumiał, że „REST APIs” w CV i „REST API design” w ogłoszeniu znaczą to samo, tekst zamieniany jest na reprezentację wektorową. Zamiast osobnej bazy wektorowej (Pinecone, Weaviate) trzymam wektory obok głównych danych: jedna baza, jedna kopia zapasowa, mniej infrastruktury.
- Redis
- Wygenerowanie dopasowanego CV zajmuje 10–15 sekund i kosztuje tokeny. Wyniki są cache'owane pod hashem danych wejściowych, więc identyczne powtórzone zapytanie wraca natychmiast — a gdy CV albo oferta się zmienią, hash też się zmienia, więc cache'u nie trzeba czyścić ręcznie.
- Spring AI
- Claude odpowiada za trudniejszą pracę z tekstem, OpenAI za embeddingi. Jeden wspólny interfejs oznacza, że model można wymienić na tańszy lub lepszy bez przepisywania logiki aplikacji.
- Apache Tika
- CV przychodzą w PDF i Wordzie. Tika wyciąga tekst z obu formatów jednym narzędziem, zamiast dwóch osobnych bibliotek.
- Testcontainers
- 372 testy automatyczne. Testy integracyjne działają na prawdziwym PostgreSQL w Dockerze, a nie na uproszczonej namiastce — wolniej, ale sprawdzają realne zachowanie systemu.
Frontend
React 19 + TypeScript + Vite. Przeciąganie kart obsługuje dnd-kit (react-beautiful-dnd nie jest już rozwijany). TanStack Query cache'uje dane z serwera i daje optymistyczne aktualizacje: karta przenosi się do innej kolumny od razu, a jeśli serwer zwróci błąd, zmiana się cofa. Interfejs zbudowany na shadcn/ui i Tailwind CSS.
Infrastruktura
Backend na Railway, frontend na Vercelu, PostgreSQL na Neonie, Redis na Upstashu. Nowe wersje wdrażają się automatycznie po pushu.