Jeszcze kilka lat temu zarządzanie software house'em o kilkunastoosobowym zespole opierało się na arkuszach kalkulacyjnych, rozproszonych narzędziach i ręcznym przepisywaniu danych między systemami. Fakturowanie wymagało logowania się do osobnego serwisu, śledzenie czasu dostarczanego przez firmy kontrahentów odbywało się w innym narzędziu, a raportowanie wyników finansowych oznaczało godziny spędzone na ręcznym zbieraniu danych. W pewnym momencie stało się jasne, że dalszy rozwój firmy wymaga jednego, spójnego systemu, który połączy wszystkie procesy w jednym miejscu.
W jcd.pl postanowiliśmy nie szukać gotowego rozwiązania, a zbudować własny system CRM od podstaw -- dopasowany dokładnie do tego, jak pracujemy. Efektem jest platforma, która dziś zarządza projektami, finansami, zespołem, hostingami i monitoringiem stron, a do tego wykorzystuje sztuczną inteligencję do automatyzacji raportów. W tym artykule opisujemy jak to zrobiliśmy, jakie technologie wykorzystaliśmy i co zyskaliśmy.
Własny framework administracyjny -- Windu Admin Bundle
Zanim powstał CRM, musieliśmy rozwiązać fundamentalny problem: potrzebowaliśmy solidnej bazy, na której można szybko budować panele administracyjne -- nie tylko dla siebie, ale również dla klientów. Tak narodził się
Windu Admin Bundle, nasz autorski framework oparty na Symfony, dystrybuowany jako prywatna paczka Composer.
Windu to nie kolejny generator CRUD-ów. To kompletny zestaw narzędzi, który wykorzystujemy w każdym projekcie:
- system uwierzytelniania z polityką silnych haseł (wymuszanie zmiany co 3 miesiące, historia ostatnich 10 haseł),
- dynamiczny system menu konfigurowany w YAML, z kontrolą dostępu opartą na rolach,
- gotowe formularze, szablony Twig i komponenty UI oparte na Bootstrap 5,
- wielojęzyczność i system zarządzania stronami CMS,
- rozbudowany system uprawnień z trzema poziomami dostępu.
Dzięki temu, że Windu jest osobną paczką z własnym repozytorium, każda poprawka lub nowa funkcja automatycznie trafia do wszystkich projektów, które go wykorzystują. CRM jest jednym z nich -- ale zdecydowanie najbardziej rozbudowanym.
Architektura systemu
System został zbudowany w oparciu o
Symfony 7.4 i
PHP 8.3+ z bazą danych MySQL obsługiwaną przez
Doctrine ORM 3. To solidny, sprawdzony stack, który pozwala na szybki rozwój bez kompromisów w kwestii wydajności.
Architektura opiera się na kilku warstwach:
- warstwa encji -- ponad 15 encji Doctrine opisujących projekty, klientów, faktury, wpisy czasowe, koszty, stawki godzinowe, hostingi, komentarze i raporty kontrahentów zewnętrznych,
- warstwa serwisów -- wyspecjalizowane klasy odpowiedzialne za logikę biznesową: ClockifyService, InvoiceService, MonthService, AiSummaryService, UptimeService i inne,
- warstwa kontrolerów -- 12 kontrolerów administracyjnych obsługujących poszczególne moduły systemu,
- warstwa szablonów -- interfejs użytkownika oparty na Twig z dynamicznymi wykresami Chart.js.
Jednym z ciekawszych wyzwań architektonicznych było rozwiązanie zależności cyklicznych między trzema kluczowymi serwisami (ClockifyService, MonthService, ProjectService), co osiągnęliśmy za pomocą wstrzykiwania zależności przez settery -- wzorzec, który pozwala uniknąć problemów z kontenerem DI Symfony przy zachowaniu czytelnej struktury kodu.
Trzy role, trzy perspektywy
System rozróżnia trzy typy użytkowników, z których każdy widzi panel dopasowany do swoich potrzeb:
- kontrahent (ROLE_VENDOR) -- widzi dashboard z podsumowaniem czasu dostarczonego przez swoją firmę do JCD, kalendarz raportów dziennych, własne projekty i statystyki,
- project manager (ROLE_PM) -- dodatkowo zarządza projektami, klientami, hostingami, fakturowaniem i widzi statusy projektów,
- CEO (ROLE_CEO) -- pełen dostęp do budżetu, statystyk ogólnych, rentowności projektów i kontrahentów zewnętrznych, danych Clockify, faktur i wszystkich modułów analitycznych.
Menu boczne dynamicznie dostosowuje się do roli zalogowanego użytkownika, wyświetlając tylko te moduły, do których ma on dostęp. Dzięki temu każdy użytkownik widzi dokładnie to, czego potrzebuje -- bez szumu informacyjnego.
Dashboard -- centrum dowodzenia firmy
Dashboard to pierwsze, co widzi każdy użytkownik po zalogowaniu. Na jednym ekranie prezentuje najważniejsze informacje o bieżącej działalności firmy.
Górna sekcja to sześć kart z kluczowymi wskaźnikami:
- prognoza przychodu -- szacunek na bieżący miesiąc obliczany na podstawie zarejestrowanego czasu i stawek,
- uzupełnione raporty -- ile z wymaganych raportów dziennych zostało już wypełnionych,
- dni robocze -- liczba dni roboczych w bieżącym miesiącu (z uwzględnieniem świąt i weekendów),
- czas niebilowalny -- procentowy udział czasu poświęconego na zadania wewnętrzne,
- status uptime -- na żywo, z migającym alertem jeśli któraś z monitorowanych stron nie działa,
- ostatni projekt -- nad czym aktualnie realizowane są działania (na podstawie aktywnego timera Clockify).
Poniżej dashboard wyświetla sekcję wolno działających stron (te z czasem odpowiedzi powyżej 1000ms), podsumowanie działań z ostatnich 7 dni z listą zadań pogrupowanych po dniach, kalendarz raportów miesięcznych oraz trzy interaktywne wykresy: zarejestrowany czas vs. budżet, przychody miesięczne i procent czasu niebillowalnego.
Integracja z Clockify -- automatyczne śledzenie czasu dostarczanego do JCD
Jednym z filarów systemu jest głęboka integracja z Clockify, popularnym narzędziem do rejestrowania czasu. Synchronizacja działa w dwóch trybach:
- pełna synchronizacja -- uruchamiana cyklicznie, pobiera wszystkie projekty, użytkowników i wpisy czasowe z API Clockify,
- szybka synchronizacja -- pobiera tylko ostatnie wpisy, co pozwala na częstsze odświeżanie bez obciążania API.
System nie tylko importuje dane, ale również przetwarza je w kontekście biznesowym. Każdy wpis czasowy jest powiązany z projektem i kontrahentem w CRM, co pozwala na automatyczne obliczanie kosztów współpracy (czas x stawka godzinowa), przychodów projektowych, rentowności poszczególnych projektów i kontrahentów zewnętrznych, a także podziału na czas bilowalny i niebilowalny.
Stawki godzinowe firm kontrahentów zmieniają się w czasie -- system przechowuje pełną historię stawek z datami obowiązywania i automatycznie dobiera właściwą stawkę do każdego wpisu na podstawie daty jego wykonania. Obsługiwane są różne modele współpracy i rozliczeń, dzięki czemu CRM pozostaje elastyczny niezależnie od formy świadczenia usług.
Fakturowanie z integracją Fakturownia
Moduł fakturowania łączy CRM z serwisem Fakturownia poprzez API, automatyzując cały obieg dokumentów:
- synchronizacja klientów -- dane kontrahentów są pobierane z Fakturowni i łączone z projektami w CRM,
- synchronizacja faktur -- faktury wystawione w Fakturowni automatycznie pojawiają się w systemie z pełnymi danymi (kwoty netto, brutto, VAT, status płatności),
- wystawianie faktur -- z poziomu widoku budżetu można jednym kliknięciem wygenerować fakturę za dany etap projektu,
- wysyłka z załącznikami -- faktury mogą być wysyłane z raportami czasowymi w formacie CSV lub XLSX,
- śledzenie płatności -- system automatycznie aktualizuje statusy płatności.
Widok fakturowania prezentuje bieżący miesiąc z listą etapów projektowych gotowych do zafakturowania, wraz z obliczonymi kwotami na podstawie rzeczywiście zarejestrowanego czasu.
Sztuczna inteligencja w codziennej pracy
Jednym z elementów, który wyróżnia nasz CRM, jest praktyczne wykorzystanie sztucznej inteligencji w dwóch kluczowych obszarach.
Automatyczne podsumowania projektów -- system cyklicznie generuje zwięzłe, kilkuzdaniowe podsumowania prac wykonanych w ramach każdego etapu projektu. Analizuje wpisy czasowe z Clockify (opisy zadań, czas trwania, przypisani kontrahenci zewnętrzni) i na ich podstawie tworzy czytelne streszczenie w języku polskim. Podsumowania te są wykorzystywane przy wystawianiu faktur -- klient otrzymuje nie tylko kwotę, ale również krótki opis wykonanych prac.
System inteligentnie zarządza generowaniem podsumowań: dla bieżącego miesiąca generuje je tylko za pełne tygodnie (aby nie tworzyć niekompletnych opisów), a dla miesięcy wstecz -- jednorazowo za cały okres. Podsumowania są przechowywane w bazie danych i regenerowane nie częściej niż co 7 dni.
Automatyczne wypełnianie raportów dziennych -- kontrahent może jednym kliknięciem wygenerować raport z danego dnia. System pobiera jego wpisy z Clockify, grupuje je po projektach i prosi AI o stworzenie zwięzłego opisu wykonanych zadań. To oszczędza czas każdemu współpracującemu z nami kontrahentowi zewnętrznemu.
Inteligentne dopasowywanie płatności
Moduł płatności to jeden z najbardziej zaawansowanych elementów systemu. Pozwala na import wyciągów bankowych z mBanku (format CSV) i automatyczne dopasowanie przelewów do faktur w systemie.
Algorytm wykorzystuje trzy strategie dopasowywania, stosowane w kolejności od najbardziej do najmniej precyzyjnej:
- dopasowanie po numerze faktury -- ekstrakcja numerów faktur z tytułów przelewów za pomocą wyrażeń regularnych, w tym obsługa wielu faktur w jednym przelewie,
- dopasowanie po nazwie firmy -- porównanie nazwy nadawcy przelewu z nazwami klientów w systemie z 60-procentowym progiem podobieństwa, z automatycznym usuwaniem przyrostków prawnych (sp. z o.o., S.A.),
- dopasowanie po numerze NIP -- wyciąganie 10-cyfrowych numerów identyfikacji podatkowej z opisów przelewów.
Dzięki temu większość przelewów jest automatycznie dopasowywana do odpowiednich faktur, a osoba odpowiedzialna za finanse musi jedynie zatwierdzić sugestie systemu.
Budżet i rentowność -- pełna kontrola finansów
Widok budżetu to prawdopodobnie najczęściej odwiedzana strona w całym systemie. Prezentuje finansowy obraz firmy z perspektywy miesięcznej, z podziałem na poszczególne projekty.
Dla każdego miesiąca system wyświetla:
- listę aktywnych projektów z podziałem na typy (Time & Material, Fixed Price, Opieka),
- rozliczenie każdego projektu: zarejestrowany czas x stawka = wartość,
- procent realizacji estymacji (ile z zaplanowanego czasu już wykorzystano),
- kwoty do zafakturowania i status fakturowania,
- łączny przychód i zysk miesiąca.
System inteligentnie zarządza cache'owaniem: zyski z minionych miesięcy są obliczane raz i zapisywane w bazie, natomiast bieżący miesiąc jest zawsze przeliczany na żywo. Dzięki temu widok budżetu ładuje się szybko nawet przy dużej liczbie projektów i wpisów czasowych.
Statystyki i analityka
Moduł statystyk oferuje trzy poziomy analizy, dostępne wyłącznie dla CEO:
Statystyki ogólne -- miesięczny przegląd przychodów, kosztów, zysku, średniej stawki godzinowej i procentu czasu niebillowalnego. Pozwala szybko ocenić kondycję finansową firmy.
Rentowność projektów -- analiza marży na poszczególnych projektach w horyzoncie 12 miesięcy. System uwzględnia nie tylko bezpośredni przychód z projektu, ale również koszt współpracy z firmami kontrahentów (czas x ich indywidualna stawka) i stosuje współczynnik podatkowy do obliczenia realnego zysku.
Rentowność kontrahentów zewnętrznych -- 8-miesięczna analiza pokazująca dla każdego kontrahenta: przychód, koszt, zysk i marżę. System oblicza średnie tylko z miesięcy, w których kontrahent był aktywny, co daje rzetelny obraz efektywności współpracy niezależnie od przerw czy zmian w zaangażowaniu.
Zarządzanie hostingami i automatyzacja odnowień
Dla software house'u obsługującego kilkadziesiąt stron internetowych zarządzanie hostingami to istotny proces, przy którym łatwo o pomyłkę przy ręcznej obsłudze. Nasz CRM automatyzuje cały cykl życia usługi hostingowej:
- katalog usług -- każdy hosting ma przypisanego klienta, domenę, serwer, kwotę roczną i datę ważności,
- automatyczne proformy -- system generuje proformy na odnowienie i wysyła je do klientów mailowo,
- przypomnienia -- jeśli klient nie opłacił proformy, można wysłać automatyczne przypomnienie (z kontrolą częstotliwości -- nie częściej niż co 7 dni),
- fakturowanie po wpłacie -- gdy klient zapłaci, jednym kliknięciem generowana jest faktura VAT, proforma jest oznaczana jako opłacona, a data ważności hostingu przedłużana o rok,
- mapowanie serwerów -- system automatycznie sprawdza DNS domen i mapuje je na wewnętrzne nazwy serwerów.
Monitoring uptime -- nie tylko czy strona działa
Moduł monitoringu uptime wykracza poza proste sprawdzanie dostępności stron. System oferuje kilka unikalnych funkcji:
- inteligentna strategia prób -- jeśli strona jest oznaczona jako działająca, system próbuje trzech progów czasowych (10s, 60s, 300s) zanim oznaczy ją jako niedostępną, co eliminuje fałszywe alarmy przy krótkotrwałych problemach z siecią,
- detekcja zmian treści -- oprócz sprawdzania statusu HTTP, system oblicza hash zawartości strony i porównuje go z poprzednim wynikiem. Jeśli treść zmieniła się o więcej niż 25%, wyświetla ostrzeżenie -- co może oznaczać defacement lub nieautoryzowaną modyfikację,
- monitoring certyfikatów SSL -- automatyczne sprawdzanie ważności certyfikatów z alertami na 14 dni przed wygaśnięciem,
- powiadomienia wielokanałowe -- email i SMS przy wykryciu awarii, z inteligentnym zarządzaniem powiadomieniami (bez spamu przy przedłużających się problemach),
- wizualizacja 24-godzinna -- dashboard wyświetla siatkę statusów z ostatnich 24 godzin, gdzie wysokość słupka odpowiada czasowi odpowiedzi serwera.
Zarządzanie projektami
Moduł projektów łączy dane z Clockify, Fakturowni i wewnętrznych procesów w jednym widoku. Każdy projekt ma przypisanego klienta, project managera, typ rozliczenia i listę etapów.
System obsługuje cztery modele rozliczeń:
- Time & Material -- rozliczenie na podstawie rzeczywiście zarejestrowanego czasu,
- Fixed Price -- stała cena za etap projektu,
- Opieka -- stałe miesięczne rozliczenie za bieżące wsparcie,
- Projekt nierozliczany -- projekty wewnętrzne firmy.
Każdy projekt składa się z etapów, które mogą być niezależnie fakturowane. Etap zawiera estymację czasową, stawkę, kwotę, przypisane wpisy czasowe z Clockify i opcjonalne podsumowanie AI. Kolorowe znaczniki w widoku listy projektów pokazują status poszczególnych miesięcy -- od zielonego (zafakturowane) przez pomarańczowy (w trakcie) po czerwony (przekroczony budżet).
Raporty dzienne i efektywność współpracy
Każdy kontrahent ma obowiązek wypełniać krótki raport dzienny opisujący wykonane zadania. System śledzi ich uzupełnianie na kalendarzu miesięcznym -- zielone pola oznaczają dni z raportem, co pozwala managerom szybko zidentyfikować braki.
Widok efektywności kontrahenta pokazuje w skali miesięcznej:
- liczbę godzin dostarczonych przez firmę kontrahenta do JCD vs. estymacja na miesiąc,
- progress bar realizacji,
- podział na projekty bilowalne i niebilowalne.
To narzędzie służy nie tyle do kontroli, co do planowania -- pozwala ocenić obciążenie po stronie współpracujących firm i lepiej rozdzielać zadania.
Automatyzacja za pomocą komend konsolowych
System wykorzystuje cztery zaplanowane komendy uruchamiane cyklicznie przez cron:
- command:update -- co godzinę synchronizuje dane z Clockify i Fakturowni (projekty, użytkownicy, wpisy czasowe, klienci, faktury),
- command:update_recent_clockify -- częstsza, lekka synchronizacja tylko ostatnich wpisów,
- command:update_ai_summaries -- codziennie aktualizuje podsumowania AI dla etapów projektów,
- command:uptime-check -- co kilka minut sprawdza dostępność monitorowanych stron z ochroną przed równoczesnym uruchomieniem wielu instancji.
Dzięki automatyzacji dane w systemie są zawsze aktualne, a zespół nie musi ręcznie uruchamiać synchronizacji ani pamiętać o generowaniu raportów.
Co zyskaliśmy
Wdrożenie własnego CRM-u miało wymierny wpływ na codzienne funkcjonowanie firmy:
- oszczędność czasu na fakturowaniu -- proces, który wcześniej zajmował kilka godzin miesięcznie, teraz sprowadza się do kilku kliknięć w widoku budżetu,
- pełna widoczność finansów -- CEO ma natychmiastowy dostęp do rentowności każdego projektu i kontrahenta zewnętrznego, bez czekania na raporty księgowe,
- eliminacja ręcznego przepisywania -- dane płyną automatycznie z Clockify przez CRM do Fakturowni,
- szybsze reagowanie na problemy -- monitoring uptime wykrywa awarie w ciągu minut, a nie dopiero wtedy, gdy zgłosi je klient,
- lepsza komunikacja z klientami -- AI generuje czytelne podsumowania prac, które trafiają do klientów razem z fakturami,
- świadome podejmowanie decyzji -- statystyki rentowności pozwalają identyfikować nierentowne projekty i podejmować decyzje o renegocjacji stawek.
System jest rozwijany organicznie -- nowe funkcje pojawiają się w odpowiedzi na realne potrzeby zespołu, a nie z góry założonej roadmapy. To podejście sprawia, że każdy moduł rozwiązuje konkretny problem i jest faktycznie używany na co dzień.
Podsumowanie
Budowa własnego CRM-u to nie decyzja, którą podejmuje się z dnia na dzień. Wymaga głębokiego zrozumienia własnych procesów, kompetencji technicznych i cierpliwości w iteracyjnym rozwoju. Ale efekt -- system idealnie dopasowany do sposobu pracy firmy, integrujący wszystkie narzędzia w jedno spójne środowisko -- jest wart tego wysiłku.
W jcd.pl od lat pomagamy firmom automatyzować procesy i budować narzędzia dopasowane do ich potrzeb. Jeśli Twoja firma dojrzewa do momentu, w którym gotowe rozwiązania przestają wystarczać i potrzebujesz systemu, który naprawdę rozumie Twój biznes -- chętnie porozmawiamy o tym, jak to zrobić.
Autor: JCD
Od przeszło dekady konsekwentnie przekształcamy zaawansowane idee w funkcjonalne aplikacje oraz internetowe platformy usługowe. Nasza działalność koncentruje się na głębokim zrozumieniu natury przedsiębiorstwa oraz kluczowych wymagań, które są fundamentem dla każdego przedsięwzięcia.
Stale łączymy metody kreatywne z systematycznym, badawczym podejściem, przekonani, że jedynie przez dogłębną analizę i zrozumienie specyfiki wyzwań, jesteśmy w stanie w pełni współpracować z naszymi klientami w celu kreowania innowacyjnych rozwiązań. Te rozwiązania nie tylko ulepszają doświadczenie użytkowników, ale również zapewniają naszym klientom strategiczną przewagę na rynku. Nasze procesy projektowe są zatem oparte na aktywnym słuchaniu, szczegółowej analizie i ciągłym dialogu z klientami. W ten sposób nieustannie pracujemy na rzecz tworzenia nie tylko technologii, ale także wartości, które wyznaczają nowe standardy w cyfrowym krajobrazie biznesu.