# Plan: Wydarzenia zewnętrzne w kalendarzu + AI matching **Status:** KONCEPT (do zatwierdzenia) **Data:** 2026-03-19 **Kontekst:** Mail od ARP (Broker Eksportowy) z wydarzeniami dla MŚP, przekazany przez biuro Nordy (Magda Klóska). Współpraca z KIG (feedy RSS). --- ## Problem Biuro Nordy regularnie dostaje maile z wartościowymi wydarzeniami od partnerów (ARP, KIG, urzędy, inne izby). Targi, seminaria, szkolenia, webinary — treści istotne dla firm członkowskich. Dziś giną w skrzynkach mailowych. ## Rozwiązanie Jeden kalendarz z wyraźnym podziałem na wydarzenia Nordy i zewnętrzne, z filtrowaniem, systemem zainteresowań i AI-dopasowaniem. --- ## Faza 1: Wydarzenia zewnętrzne w kalendarzu ### Model danych Rozszerzenie `NordaEvent` o 3 pola: | Pole | Typ | Opis | |------|-----|------| | `is_external` | Boolean (default False) | Czy wydarzenie pochodzi z zewnątrz | | `external_url` | String(1000) | Link do rejestracji u organizatora | | `external_source` | String(255) | Nazwa źródła (np. "Agencja Rozwoju Pomorza") | ### Wyróżnienie wizualne **Widok siatki (grid):** - Nowy kolor dla zewnętrznych — szary lub jasnopomarańczowy, wyraźnie "cichszy" od kolorów wydarzeń Nordy **Widok listy:** - Badge "ZEWNĘTRZNE" (szary) przy tytule - Nazwa źródła pod tytułem (np. "Źródło: Agencja Rozwoju Pomorza") - Lekko wyciszona oprawa wizualna **Legenda kalendarza** — rozszerzona o nowy typ ### Filtrowanie Toggle u góry strony kalendarza: "Pokaż wydarzenia zewnętrzne" (domyślnie włączony). Jedno kliknięcie — zewnętrzne znikają, zostają tylko wydarzenia Nordy. Ustawienie zapamiętywane w localStorage. ### "Jestem zainteresowany" zamiast "Zapisz się" | Aspekt | Wydarzenia Nordy | Wydarzenia zewnętrzne | |--------|-----------------|----------------------| | Przycisk | "Zapisz się" (zielony) | "Jestem zainteresowany/a" (szary/niebieski) | | Znaczenie | Deklaracja udziału | Wyrażenie zainteresowania, bez zobowiązań | | Lista osób | "Uczestnicy (12)" | "Zainteresowani (3)" | | Limit miejsc | Tak (max_attendees) | Nie | | Rejestracja | Na portalu | Link zewnętrzny | | Wartość | Wiem kto idze | Widzę kto się interesuje — mogę się dogadać | Technicznie: ta sama tabela `event_attendees`. Dla zewnętrznych eventów `status='confirmed'` oznacza "zainteresowany". Rozróżnienie na poziomie UI. ### Strona szczegółów wydarzenia zewnętrznego Podobna do obecnej, z kluczowymi różnicami: 1. **Banner "Wydarzenie zewnętrzne"** z nazwą źródła/organizatora 2. **Lokalizacja z linkiem do Google Maps** — obecny kalendarz już to robi automatycznie (auto-link jeśli adres nie jest "Online" ani "do ustalenia"). Dla zewnętrznych wydarzeń to szczególnie ważne — użytkownik od razu widzi jak daleko to jest. 3. **Prominentny przycisk "Przejdź do rejestracji →"** — link do strony organizatora, wyróżniony wizualnie (duży, kolorowy), widoczny bez scrollowania 4. **Dane kontaktowe organizatora** — email, telefon (jeśli dostępne) — wyświetlane wprost na stronie wydarzenia, bez konieczności przechodzenia na zewnętrzną stronę 5. **Koszt uczestnictwa** — jeśli znany (np. "bezpłatne", "35 000 PLN brutto z dofinansowaniem 85%") 6. **Sekcja "Zainteresowani"** zamiast "Uczestnicy" 7. **Eksport ICS** — opcjonalny (data i miejsce są znane) ### Automatyczne wyciąganie danych ze stron zewnętrznych **Zweryfikowano (2026-03-19):** Strony brokereksportowy.pl pozwalają na automatyczną ekstrakcję: - Tytuł, data, godzina - Pełny adres (np. "Olivia Centre, Al. Grunwaldzka 472D, 80-309 Gdańsk") - Sposób rejestracji (formularz, email, telefon, deadline) - Koszt / dofinansowanie - Organizator **Możliwy workflow admina:** 1. Admin wkleja URL zewnętrznego wydarzenia 2. System (AI) automatycznie wyciąga: tytuł, datę, lokalizację, opis, dane rejestracji, koszt 3. Admin weryfikuje i zatwierdza — ewentualnie poprawia 4. Oszczędność: z 5-10 minut ręcznego przepisywania → 30 sekund ### Formularz admina Rozszerzenie istniejącego formularza o: - Checkbox "Wydarzenie zewnętrzne" — po zaznaczeniu: - Pole "URL źródła" (link do strony wydarzenia) + przycisk "Pobierz dane" (AI) - Pole "Link do rejestracji" (może być inny niż URL źródła) - Pole "Źródło / Organizator zewnętrzny" - Pole "Koszt uczestnictwa" (opcjonalne, tekst) - Pole "Kontakt do organizatora" (email, telefon) - Ukryty limit miejsc (nieistotny dla zewnętrznych) --- ## Faza 2: AI matching wydarzeń do profili firm ### Dane do matchingu (już w systemie) | Dane w profilu firmy | Użycie | |---------------------|--------| | Kategoria (IT, Construction, Services...) | Główny filtr branżowy | | Opis firmy | Szczegółowe dopasowanie tematyczne | | Usługi | Dopasowanie do typu wydarzenia | | Słowa kluczowe | Precyzyjny matching | | Zainteresowania PEJ (widoczność ZOPK) | Dopasowanie do wydarzeń obronnych/energetycznych | ### Mechanizm 1. **Przy dodaniu wydarzenia** — Gemini generuje "profil wydarzenia": branże, słowa kluczowe, typ firmy docelowej 2. **Matching** — porównanie profilu wydarzenia z profilami firm (kategoria + opis + usługi) 3. **Wynik** — lista par (wydarzenie → firma, score) przechowywana w bazie 4. **Koszt** — jedno wywołanie Gemini per wydarzenie (nie per logowanie) ### Gdzie pokazywać sugestie | Miejsce | Co widać | |---------|---------| | Kalendarz — sekcja "Sugerowane dla Ciebie" u góry | 2-3 najbardziej dopasowane wydarzenia | | Profil firmy (widok właściciela) | "Nadchodzące wydarzenia powiązane z Twoją branżą" | | Powiadomienie (bell icon) | "Nowe wydarzenie może Cię zainteresować" | ### Wyjaśnienie dopasowania Przy każdej sugestii krótki tekst: "Pasuje do: Construction, Local Content" — użytkownik rozumie logikę. --- ## Faza 3: Sugestie i powiadomienia - Powiadomienia przy nowych wydarzeniach dopasowanych do profilu - "3 firmy z Twojej branży są zainteresowane tym wydarzeniem" - Agregacja zainteresowań w profilu użytkownika/firmy --- ## Powiązanie z KIG Dwukierunkowy przepływ: - **Nordabiznes → KIG:** Feedy RSS z wydarzeniami Nordy (Faza osobna, patrz PLAN_KIG_RSS) - **KIG → Nordabiznes:** Gdy KIG i inne izby uruchomią RSS, możemy automatycznie importować ich wydarzenia jako zewnętrzne --- ## Kolejność wdrożenia 1. **Faza 1** — wydarzenia zewnętrzne + filtr + "jestem zainteresowany" + auto-ekstrakcja z URL 2. **Faza 2** — AI matching do profili firm 3. **Faza 3** — powiadomienia i sugestie w UI Każda faza jest niezależna i daje wartość sama w sobie. --- ## Przykładowe źródła wydarzeń zewnętrznych - Agencja Rozwoju Pomorza (brokereksportowy.pl) - Krajowa Izba Gospodarcza (kig.pl) - Urząd Miasta Wejherowo - Inne izby gospodarcze (via RSS w przyszłości) - PARP, NCBiR, inne agencje rządowe