Commit Graph

480 Commits

Author SHA1 Message Date
e7483269a0 security(chat): Izolacja sesji czata i anonimizacja danych
ZMIANY BEZPIECZEŃSTWA:

1. Defense in depth w NordaBizChatEngine:
   - send_message() - wymaga user_id i weryfikuje właściciela rozmowy
   - get_conversation_history() - opcjonalna walidacja user_id
   - Logowanie prób nieautoryzowanego dostępu

2. Anonimizacja w panelu admina:
   - Usunięto wyświetlanie treści zapytań użytkowników
   - Zastąpiono statystykami: długość, kategoria tematyczna
   - Zachowano AI responses (publiczne dane firm)

3. Ochrona prywatności:
   - Użytkownicy NIE mogą zobaczyć zapytań innych użytkowników
   - Admini widzą tylko zanonimizowane statystyki
   - Audit logging dla prób nieautoryzowanego dostępu

Odblokowuje zadanie #10 (Baza wiedzy Norda GPT).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 21:56:35 +01:00
e2ceba4310 feat(privacy): Dodanie preferencji kanałów kontaktu
Użytkownicy mogą teraz wskazać preferowane kanały komunikacji:
- Email, telefon, wiadomości w portalu (toggle)
- Dodatkowa notatka (np. najlepsze godziny kontaktu)

Migracja: 031_add_contact_preferences.sql

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 21:06:15 +01:00
c09a622463 feat(categories): Hierarchiczny filtr kategorii w UI
- Główne kategorie jako wyróżnione przyciski
- Podkategorie z mniejszym fontem
- filterCategoryGroup() - filtruje po grupie (główna + podkategorie)
- Nowe style: category-main, category-sub, category-group
- Zachowano kompatybilność wsteczną z płaską strukturą

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 21:02:04 +01:00
4b38f8953c feat(categories): Hierarchiczna struktura kategorii
- Dodanie parent_id do tabeli categories
- Model Category z relacją parent/subcategories
- 4 główne grupy: Usługi, Budownictwo, Handel, Produkcja
- Skrypt assign_category_parents.py do przypisania podkategorii
- Migracja 030_add_category_hierarchy.sql

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:51:15 +01:00
1fb938feb3 feat(blocks): System blokowania użytkowników
- Nowa tabela user_blocks do przechowywania blokad
- Model UserBlock w database.py
- Sprawdzanie blokad przed wysłaniem wiadomości (messages_send, messages_reply)
- UI zarządzania blokadami w /settings/blocks
- Nawigacja między ustawieniami (prywatność, blokady, 2FA)
- Blokada działa w obie strony

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:44:38 +01:00
6affb0d4dc feat(privacy): Respektowanie ustawień prywatności w widokach
- person_detail.html: ukrycie email/phone jeśli użytkownik wyłączył
- messages/compose.html: ukrycie emaila w dropdown i info o odbiorcy
- Kompatybilność wsteczna: NULL traktowane jako widoczne (True)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:38:19 +01:00
66f6c1d60e feat(privacy): Ustawienia prywatności użytkownika
- Nowe pola: privacy_show_phone, privacy_show_email w tabeli users
- Nowy route /settings/privacy z UI do zarządzania prywatnością
- Link "Ustawienia" w menu użytkownika
- Toggle switches do włączania/wyłączania widoczności danych
- Migracja SQL: 028_add_user_privacy_settings.sql

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:35:50 +01:00
9f286d1790 feat(education): Dodanie Platformy Edukacyjnej
- Nowy blueprint /edukacja z materiałami szkoleniowymi
- Link "Edukacja" w menu (tylko dla zalogowanych)
- Strona placeholder z listą przyszłych materiałów
- Dostęp wymaga logowania (@login_required)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:31:04 +01:00
7d4dffa5b5 style(branding): Korekta nazwy na "Norda Biznes Partner"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:27:15 +01:00
2d42b85bf1 style(branding): Zmiana "Norda Biznes Hub" → "Norda Partner" wszędzie
- Meta description
- Default title w base.html
- Nagłówek nawigacji dla niezalogowanych
- Stopka strony

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:26:26 +01:00
92aded7194 refactor(landing): Norda Partner branding + reorganizacja layoutu
- Zmiana tytułu strony na "Norda Partner - Strefa Partnera"
- Usunięcie zbędnego przycisku "Norda Partner" z hero
- Przeniesienie sekcji "Gotowy na networking?" wyżej (po hero)
- Zachowanie linku "Strefa Gościa" → norda-biznes.info

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:20:17 +01:00
b6bbb32483 feat(ui): Norda Partner, Strefa Gościa, uproszczenie forum
- Landing page: przycisk "Norda Partner" + kontakt Izby (email, WhatsApp)
- Landing page: link "Strefa Gościa" → norda-biznes.info
- Menu "Więcej": dodano "Strefa Gościa (Izba)" dla zalogowanych
- Forum: ukryto filtry kategorii/statusów (uproszczenie UX)
- README: zmiana "AI Assistant" → "NordaGPT"
- Skrypt import firmy testowej "Kaszubia 2030"
- .gitignore: wykluczenie notatek ze spotkań (MEETING_*.md)

Zmiany na podstawie spotkania 2026-01-28 i uwag Artura Wiertla.
Wzór nawigacji: Vaillant.pl (Klienci indywidualni / Profesjonaliści)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 20:11:35 +01:00
bc1657b900 fix(notifications): Dodanie CSRF meta tag dla AJAX
Powiadomienia nie działały bo brak tokena CSRF w head.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:25:43 +01:00
af90a595ae fix(nav): Ukrycie 'Norda Biznes Hub' dla zalogowanych użytkowników
Tekst nachodzi na elementy menu gdy jest dużo pozycji nawigacji.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:22:43 +01:00
030507a658 style(landing): Większy odstęp przed sekcją 'Jak to działa?'
Dodanie margin-top dla lepszego oddzielenia od przycisków CTA.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:18:10 +01:00
d9538742de style(landing): Wyśrodkowanie hero + akcent kolorystyczny
- Wyśrodkowanie nagłówka i podtytułu
- Niebieski akcent na słowie "więcej"
- Italic na podtytule

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:16:44 +01:00
3da2430e59 fix(landing): Nowy nagłówek hero 'Razem tworzymy więcej'
Zmiana z "Znajdź partnera biznesowego" na bardziej
społecznościowy przekaz podkreślający networking.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:14:11 +01:00
c4c601eb77 feat(landing): Nowy nagłówek hero 'Znajdź partnera biznesowego'
Zorientowany na akcję użytkownika zamiast powtarzania nazwy

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:07:52 +01:00
26608506f4 fix(branding): Usunięcie redundantnego 'Norda Biznes Hub' z hero
Nazwa jest już w headerze - nie trzeba jej powtarzać

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:03:48 +01:00
b4669267fe fix(branding): Czarny kolor tekstu 'Norda Biznes Hub' w headerze
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:02:08 +01:00
3ed267efc8 fix(branding): Wyśrodkowanie 'Norda Biznes Hub' w nawigacji
- Tekst wyciągnięty jako osobny element
- Position absolute + transform dla centrowania

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:01:03 +01:00
5568566a0d fix(branding): Większy odstęp logo-tekst w headerze
gap: spacing-sm → spacing-md (8px → 16px)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 17:59:36 +01:00
a71138e054 fix(branding): Usunięcie logo z hero - redundantne z headerem
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 17:57:35 +01:00
6e31e2bdc3 feat(branding): Logo Norda na landing, login i rejestracji
- Landing page: białe logo w sekcji hero (filter CSS)
- Login: logo nad formularzem
- Rejestracja: logo nad formularzem

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 17:54:45 +01:00
4a03638c74 feat(branding): Dodanie oficjalnego logo Izby Norda
- Logo w headerze (zastąpienie generycznej ikony SVG)
- Logo w footerze (nad nazwą "Norda Biznes Hub")
- Logo pobrane lokalnie do static/img/ dla wydajności

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 17:51:39 +01:00
9f47d7b5c9 feat(release-notes): Add 'Notify' button for admins
- Admin can send notifications about any release to all users
- Button visible only for logged-in admins
- Extracts first 3 highlights from 'new' section
- Shows confirmation dialog before sending
- Visual feedback: disabled during send, green when done

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 14:26:51 +01:00
ce7c78bda9 feat(notifications): Add notifications for releases and announcements
- notify_all_users_release(): Notify all users about new system version
- notify_all_users_announcement(): Notify all users about new announcement
- Auto-send notifications when admin publishes an announcement
- New admin endpoint POST /admin/notify-release for manual release notifications
- Category-specific icons for announcement notifications

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 14:22:44 +01:00
2a749e09d3 fix(chat): Normalize person names to Title Case for link matching
- DB stores names in UPPERCASE (e.g. 'MICHAŁ BOGDAN ROSZMAN')
- AI generates Title Case (e.g. 'Michał Bogdan Roszman')
- Post-processing now converts to title() before matching

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 14:10:53 +01:00
05d8e3f6ec feat(chat): Add post-processing for automatic markdown links
- Call _postprocess_links() on AI response before returning
- Ensures companies and people are linked even when AI doesn't format them
- Fixes inconsistent link generation by Gemini AI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 14:04:53 +01:00
827a4df1e2 feat: Endpoint testowy /test-error-500 dla weryfikacji powiadomień
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 13:00:39 +01:00
acae42869c refactor: Powiadomienia email przez Microsoft Graph zamiast SMTP
- Używa istniejącego email_service.py z Microsoft Graph API
- Ładniejszy HTML email z dark theme
- Usunięto niepotrzebne importy smtplib/MIMEText

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:59:55 +01:00
3584bba717 feat: Powiadomienia email o błędach 500
- Dodano send_error_notification() - wysyła email przy błędzie 500
- Szczegóły: URL, ścieżka, user, IP, traceback
- Konfiguracja: ERROR_NOTIFY_EMAIL, SMTP_HOST, SMTP_PORT
- Domyślnie: maciej.pienczyn@inpi.pl

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:55:41 +01:00
8823e5c961 fix: Błąd 500 na /company/<id> - now() → now
TypeError: 'datetime.datetime' object is not callable
Przyczyna: now jest obiektem datetime, nie funkcją

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:40:22 +01:00
09084aa18a feat(chat): Klikalne linki do osób + wzmocnione instrukcje AI
- Dodano person_id i profile URL do kontekstu osób w chatbocie
- Zaktualizowano system prompt: OBOWIĄZKOWE linki dla firm i osób
- Dodano CSS dla linków do osób (zielony badge)
- Rozszerzono JavaScript o wykrywanie linków /osoba/

Kolory badge:
- 🏢 Firmy: pomarańczowy (#c2410c)
- 👤 Osoby: zielony (#047857)
- 🔗 Zewnętrzne: niebieski (#1d4ed8)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:34:19 +01:00
95ac4c79e4 fix(chat): Ukrycie footera i blokada scroll body
- Dodano overflow: hidden na html i body
- Ukrycie footer na stronie chatu (display: none)
- max-height na main dla pewności
- height: 100% na container

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:23:47 +01:00
7d7755ed0a fix(chat): Pełna poprawka layoutu - styl ChatGPT/Claude
- Nadpisanie .container dla chatu (100% szerokości)
- Main z flex i overflow: hidden
- chat-main z height: 100% i max-height: 100%
- scrollToBottom z requestAnimationFrame dla pewności
- Struktura jak w ChatGPT/Claude

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:21:08 +01:00
11e8fb7dd2 fix(chat): Poprawka scrollowania - scrollIntoView zamiast scrollTop
- Użycie scrollIntoView({ block: 'end' }) na ostatniej wiadomości
- Lepsze zachowanie - scroll do widocznego elementu
- Smooth scroll dla lepszego UX

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:19:24 +01:00
c33f6e4195 fix(chat): Poprawka layoutu - input area zawsze na dole
- Dodano flex-shrink: 0 do .chat-header i .chat-input-area
- Dodano overflow: hidden do .chat-main
- Dodano min-height: 0 do .chat-messages (kluczowe dla flexbox overflow)
- Teraz header i input zawsze widoczne, tylko wiadomości się scrollują

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:17:17 +01:00
64a8d49efa style(chat): Rozróżnienie kolorów linków firm vs zewnętrznych
- Linki do firm (nordabiznes.pl/company/): pomarańczowe badge'y
- Linki zewnętrzne (www, social, maps): niebieskie badge'y
- JavaScript wykrywa typ linku po URL i dodaje klasę CSS
- Hover effect z cieniem i lekkim uniesieniem

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:15:01 +01:00
3d6768cddd style(chat): Kolorowe badge'y dla linków firm w odpowiedziach AI
- Linki jako zaokrąglone badge'y z kolorowym tłem
- 4 kolory w rotacji: pomarańczowy, zielony, żółty, różowy
- Delikatny hover effect (ciemniejsze tło)
- Padding i border-radius dla lepszej widoczności
- Białe tło dla linków w wiadomościach użytkownika

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:13:31 +01:00
f7c86e6f1a feat(chat): Klikalne linki do firm i osób w odpowiedziach AI
Backend (nordabiz_chat.py):
- Dodano instrukcję w system prompt wymagającą linków markdown
- Nazwy firm: [Firma](URL) - klikalne linki do profilu
- Nazwy osób: **Imię Nazwisko** (link do firmy)

Frontend (chat.html):
- Nowe style dla linków w wiadomościach
- Fioletowy kolor (#7c3aed) dla linków AI
- Hover effect z podkreśleniem
- Oddzielne style dla linków w wiadomościach użytkownika

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:11:33 +01:00
648648c7f9 style(chat): Zmiana sidebara na jasną kolorystykę
- Tło sidebar: #1e1e2e → #f5f7fa (jasny szary)
- Tekst: biały → #374151 (ciemnoszary)
- Border: #2d2d3d → #e5e7eb (jasny)
- Hover/active: białe tło z subtelnym cieniem
- Lepszy kontrast i czytelność

Inspiracja: kolorystyka z wideo demo NordaGPT

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 12:06:29 +01:00
394e51b3ba feat(chat): Dodaj przycisk pomocy wideo w NordaGPT
- Przycisk ▶️ w headerze chatu obok badge'a modelu
- Modal z 40-sekundowym tutorialem wideo z polskim narratorem
- Poster (miniaturka) wideo
- Sekcja "Szybkie wskazówki" pod odtwarzaczem
- Responsywny design dla mobile

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 11:50:04 +01:00
daf24256fc fix(health): Dodaj trailing slash do /raporty w health check
Naprawia ostrzeżenie HTTP 308 w Health Check Dashboard.
Flask blueprint z url_prefix='/raporty' wymaga trailing slash.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 10:50:30 +01:00
049b54f467 feat(nav): Add Aktualności to main navigation bar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 10:41:41 +01:00
5ff86d06a8 feat(nav): Reorganize navigation based on Jacek's feedback
New structure:
- Firmy | NordaGPT | Kalendarz | B2B | Forum | Więcej ▾

"Więcej" dropdown contains:
- Aktualności
- ZOP Kaszubia
- Kontakty zewnętrzne
- Raporty
- Mapa Powiązań

Most used features now directly visible in main nav.

Ref: forum post /forum/18 by Jacek Pomieczyński

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 10:36:59 +01:00
b89ff11c36 docs: Add refactoring status and deployment plan
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 10:11:25 +01:00
66856a697d refactor(phase1): Extract blueprints for reports, contacts, classifieds, calendar
Phase 1 of app.py refactoring - reducing from ~14,455 to ~13,699 lines.

New structure:
- blueprints/reports/ - 4 routes (/raporty/*)
- blueprints/community/contacts/ - 6 routes (/kontakty/*)
- blueprints/community/classifieds/ - 4 routes (/tablica/*)
- blueprints/community/calendar/ - 3 routes (/kalendarz/*)
- utils/ - decorators, helpers, notifications, analytics
- extensions.py - Flask extensions (csrf, login_manager, limiter)
- config.py - environment configurations

Updated templates with blueprint-prefixed url_for() calls.

⚠️ DO NOT DEPLOY before presentation on 2026-01-30 19:00

Tested on DEV: all endpoints working correctly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 10:10:45 +01:00
819b8d9c13 fix(contacts): Ukrywanie widoku kart przy przełączeniu na tabelę
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 08:59:57 +01:00
1fe927dc17 fix(contacts): Naprawa API ai-parse - kompatybilność pól z frontend
- Obsługa pola 'text' z frontendu (oprócz 'content')
- Zmiana nazw pól odpowiedzi: ai_response→analysis, proposed_contacts→contacts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 08:57:03 +01:00