docs: Reorganizacja release notes - sortowanie i wytłuszczanie

- Wszystkie release notes od v1.0.0 do v1.20.0 posortowane od najważniejszych
- Mega ważne funkcje wytłuszczone <strong>
- Dodano sekcję security w szablonie
- Stworzono przewodnik RELEASE_NOTES_GUIDE.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-01-29 15:36:11 +01:00
parent 74995f9b3e
commit e92b237fa4
3 changed files with 218 additions and 170 deletions

260
app.py
View File

@ -10254,33 +10254,31 @@ def release_notes():
'date': '29 stycznia 2026', 'date': '29 stycznia 2026',
'badges': ['new', 'improve', 'fix'], 'badges': ['new', 'improve', 'fix'],
'new': [ 'new': [
# AI # MEGA WAŻNE - AI
'NordaGPT: Upgrade silnika AI do Gemini 3 Flash Preview (najnowszy model Google)', '<strong>NordaGPT: Upgrade do Gemini 3 Flash Preview</strong> - najnowszy model Google AI',
'<strong>NordaGPT: Dwa modele do wyboru</strong> - Flash (darmowy) i Pro (płatny, lepszy)',
'NordaGPT: 7x lepsze rozumowanie, thinking mode, 78% na SWE-bench', 'NordaGPT: 7x lepsze rozumowanie, thinking mode, 78% na SWE-bench',
'NordaGPT: Dwa modele do wyboru - Flash (darmowy) i Pro (płatny, lepszy)',
'NordaGPT: Osobne klucze API dla Free tier i Paid tier', 'NordaGPT: Osobne klucze API dla Free tier i Paid tier',
'NordaGPT: Wyświetlanie szacowanego kosztu miesięcznego w panelu modelu', 'NordaGPT: Wyświetlanie szacowanego kosztu miesięcznego',
# PWA # MEGA WAŻNE - PWA
'PWA: Aplikacja mobilna - możliwość instalacji na telefonie (iOS/Android)', '<strong>PWA: Aplikacja mobilna</strong> - możliwość instalacji na telefonie (iOS/Android)',
'PWA: Web Manifest z ikonami 192px i 512px', 'PWA: Web Manifest z ikonami 192px i 512px',
'PWA: Apple Touch Icon dla urządzeń iOS', 'PWA: Apple Touch Icon dla urządzeń iOS',
# Aktualności # Aktualności
'Aktualności: Obsługa wielu kategorii dla jednego ogłoszenia', 'Aktualności: Obsługa wielu kategorii dla jednego ogłoszenia',
'Aktualności: Nowe kategorie - Wewnętrzne, Zewnętrzne, Wydarzenie, Okazja biznesowa, Partnerstwo', 'Aktualności: Nowe kategorie - Wewnętrzne, Zewnętrzne, Wydarzenie, Okazja biznesowa, Partnerstwo',
'Aktualności: Formularz z checkboxami do wyboru wielu kategorii',
# Edukacja # Edukacja
'Edukacja: Integracja wideo z portalem (modal player)', 'Edukacja: Integracja wideo z portalem (modal player)',
'Edukacja: Wideo "Wprowadzenie do Norda Biznes Partner" (30s zajawka)', 'Edukacja: Wideo "Wprowadzenie do Norda Biznes Partner"',
], ],
'improve': [ 'improve': [
'Strona główna: Nowa ikona NordaGPT w sekcji asystenta AI', 'Strona główna: Nowa ikona NordaGPT',
'Stopka: Usunięcie nieaktywnego linku "Nowi członkowie"', 'Stopka: Usunięcie nieaktywnych linków',
], ],
'fix': [ 'fix': [
'Tablica B2B: Naprawiono błąd 500 przy dodawaniu nowych ogłoszeń', 'Tablica B2B: Naprawiono błąd 500 przy dodawaniu ogłoszeń',
'Kalendarz: Naprawiono błąd 500 przy dodawaniu wydarzeń', 'Kalendarz: Naprawiono błąd 500 przy dodawaniu wydarzeń',
'Kontakty: Naprawiono nawigację w module kontaktów', 'Kontakty: Naprawiono nawigację w module',
'Aktualności: Naprawiono filtrowanie po kategorii (PostgreSQL ARRAY)',
], ],
}, },
{ {
@ -10288,41 +10286,28 @@ def release_notes():
'date': '28 stycznia 2026', 'date': '28 stycznia 2026',
'badges': ['new', 'improve', 'security'], 'badges': ['new', 'improve', 'security'],
'new': [ 'new': [
# Prywatność i Blokowanie # MEGA WAŻNE - Prywatność
'Prywatność: Ukrywanie telefonu i emaila w profilu (Ustawienia → Prywatność)', '<strong>Prywatność: Ukrywanie telefonu i emaila</strong> w profilu (Ustawienia → Prywatność)',
'<strong>Blokowanie użytkowników</strong> - możliwość blokowania kontaktów (Ustawienia → Blokady)',
'Prywatność: Preferencje kanałów kontaktu (email, telefon, portal)', 'Prywatność: Preferencje kanałów kontaktu (email, telefon, portal)',
'Prywatność: Dodatkowa notatka o preferencjach (np. godziny kontaktu)', 'Blokowanie: Bidirectional - zablokowany nie może wysłać wiadomości',
'Blokowanie: Możliwość blokowania kontaktów (Ustawienia → Blokady)', # MEGA WAŻNE - Kategorie
'Blokowanie: Bidirectional - zablokowany użytkownik nie może wysłać wiadomości', '<strong>Kategorie: Hierarchiczna struktura</strong> - 4 główne grupy branżowe',
'Blokowanie: Domena emaila w nawiasie przy duplikatach nazw (np. "Jan Kowalski (gmail)")', 'Katalog: Żółta kategoria "Do uzupełnienia" dla 27 firm',
# Kategorie 'Kategorie: Nowe podkategorie (Budownictwo ogólne, Produkcja ogólna, Usługi finansowe)',
'Kategorie: Hierarchiczna struktura (4 główne grupy: Usługi, Budownictwo, Handel, Produkcja)',
'Kategorie: Nowa podkategoria "Budownictwo ogólne" (9 firm)',
'Kategorie: Nowa podkategoria "Produkcja ogólna" (13 firm)',
'Kategorie: Nowa podkategoria "Usługi finansowe" (banki, kantory, ubezpieczenia)',
'Kategorie: Rozdzielenie "Księgowość" od "Usługi finansowe"',
'Katalog: Żółta kategoria "Do uzupełnienia" dla firm wymagających uzupełnienia danych (27 firm)',
'Katalog: Sortowanie kategorii i podkategorii malejąco po liczbie firm',
# Nowe sekcje # Nowe sekcje
'Edukacja: Nowa sekcja Platforma Edukacyjna w menu', '<strong>Edukacja: Nowa sekcja</strong> Platforma Edukacyjna w menu',
'Insights: Panel dla adminów do zbierania feedbacku z forum i czata', 'Insights: Panel dla adminów do zbierania feedbacku',
'Insights: Kategoryzacja: propozycje funkcji, błędy, wyszukiwania firm', 'Health: Monitorowanie nowych endpointów',
'Insights: Workflow statusów: nowy → przejrzany → zaplanowany → zrealizowany',
# Monitoring
'Health: Dodano monitorowanie nowych endpointów (ustawienia, wiadomości, edukacja, insights)',
], ],
'improve': [ 'improve': [
'Katalog: Tylko aktywna kategoria jest podświetlona (nieaktywne mają neutralny styl)', 'Katalog: Tylko aktywna kategoria podświetlona',
'Kategorie: Przeniesienie INPI i SEO PARTNER do "IT i Technologie"', 'Kategorie: Sortowanie malejąco po liczbie firm',
'Kategorie: Spójność sum - główne kategorie pokazują prawidłowe sumy podkategorii',
], ],
'security': [ 'security': [
'RODO: Automatyczne wykrywanie i maskowanie danych wrażliwych w czacie', '<strong>RODO: Automatyczne maskowanie danych wrażliwych</strong> w czacie (PESEL, karty, IBAN)',
'RODO: Wykrywane typy: PESEL, karty kredytowe, IBAN, hasła, dowody, paszporty', '<strong>Chat: Izolacja sesji</strong> - użytkownicy nie widzą pytań innych',
'RODO: NIP i email NIE są maskowane (dane biznesowe)', 'Admin: Anonimizacja zapytań w panelu analityki',
'Chat: Izolacja sesji - użytkownicy nie widzą pytań innych użytkowników',
'Chat: Defense-in-depth - walidacja właściciela na poziomie silnika',
'Admin: Anonimizacja zapytań w panelu analityki (tylko statystyki, nie treść)',
], ],
}, },
{ {
@ -10330,13 +10315,10 @@ def release_notes():
'date': '26 stycznia 2026', 'date': '26 stycznia 2026',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'Aktualności: Nowa sekcja dla członków (Społeczność → Aktualności)', '<strong>Aktualności: Nowa sekcja</strong> dla członków (Społeczność → Aktualności)',
'Aktualności: Panel administracyjny do zarządzania ogłoszeniami', 'Aktualności: Panel administracyjny do zarządzania ogłoszeniami',
'Aktualności: Kategorie - ogólne, wydarzenia, okazje biznesowe, od członków, partnerstwa', 'Aktualności: Kategorie, statusy publikacji, przypinanie',
'Aktualności: Statusy publikacji (szkic, opublikowane, zarchiwizowane)',
'Aktualności: Przypinanie ważnych ogłoszeń na górze listy',
'Aktualności: Linki zewnętrzne i załączniki PDF', 'Aktualności: Linki zewnętrzne i załączniki PDF',
'Aktualności: Licznik wyświetleń i informacja o autorze',
'Pierwsze ogłoszenia: Baza noclegowa ARP, Konkurs Tytani Przedsiębiorczości', 'Pierwsze ogłoszenia: Baza noclegowa ARP, Konkurs Tytani Przedsiębiorczości',
], ],
}, },
@ -10345,28 +10327,21 @@ def release_notes():
'date': '14 stycznia 2026', 'date': '14 stycznia 2026',
'badges': ['new', 'improve', 'fix'], 'badges': ['new', 'improve', 'fix'],
'new': [ 'new': [
'Raporty: Nowa sekcja dostępna z menu głównego dla zalogowanych', # MEGA WAŻNE - Bezpieczeństwo
'Raporty: Staż członkostwa w Izbie NORDA (sortowanie od najstarszego)', '<strong>GeoIP Blocking</strong> - blokowanie krajów wysokiego ryzyka (RU, CN, KP, IR, BY)',
'Raporty: Pokrycie Social Media (analiza 6 platform)', '<strong>Email: Własna domena</strong> - wysyłka z noreply@nordabiznes.pl (DKIM, SPF, DMARC)',
'Raporty: Struktura branżowa (rozkład firm wg kategorii)', # Raporty
'Email: Konfiguracja DKIM, SPF i DMARC dla nordabiznes.pl', '<strong>Raporty: Nowa sekcja</strong> - staż członkostwa, Social Media, struktura branżowa',
'Email: Wysyłka z noreply@nordabiznes.pl (Microsoft 365)', 'Profil firmy: Data przystąpienia do Izby NORDA z kartą stażu',
'Profil firmy: Data przystąpienia do Izby NORDA',
'Profil firmy: Karta "Członek Izby NORDA od" z datą i stażem',
'Integracja: API CEIDG do pobierania danych JDG', 'Integracja: API CEIDG do pobierania danych JDG',
'Bezpieczeństwo: GeoIP blocking - blokowanie krajów wysokiego ryzyka (RU, CN, KP, IR, BY, SY, VE, CU)', 'Bezpieczeństwo: Panel z oceną wszystkich mechanizmów ochrony',
'Bezpieczeństwo: Panel z listą wszystkich mechanizmów ochrony (oceny gwiazdkowe)',
'Bezpieczeństwo: Statystyki GeoIP (dzienne, miesięczne, roczne, breakdown per kraj)',
], ],
'improve': [ 'improve': [
'Dane firm: Rok założenia uzupełniony dla 71 z 111 firm (64%)', 'Dane firm: Rok założenia uzupełniony dla 71 z 111 firm (64%)',
'Dane firm: Automatyczne uzupełnianie z KRS i CEIDG',
'Import dat przystąpienia: 57 firm z historią od 1997 roku', 'Import dat przystąpienia: 57 firm z historią od 1997 roku',
], ],
'fix': [ 'fix': [
'Analityka: Polskie znaki w interfejsie', 'Analityka: Polskie znaki i pełne nazwy użytkowników',
'Analityka: Pełne nazwy użytkowników',
'Analityka: Obsługa wartości NULL przy obliczaniu czasu',
], ],
}, },
{ {
@ -10374,39 +10349,27 @@ def release_notes():
'date': '13 stycznia 2026', 'date': '13 stycznia 2026',
'badges': ['new', 'improve', 'fix'], 'badges': ['new', 'improve', 'fix'],
'new': [ 'new': [
'NordaGPT: Rozszerzony kontekst AI o rekomendacje, aktualności, kalendarz, B2B i forum', # MEGA WAŻNE - NordaGPT
'NordaGPT: Kontekst AI zawiera teraz dane KRS (osoby), social media, audyty GBP i SEO', '<strong>NordaGPT: Rozszerzony kontekst AI</strong> - rekomendacje, kalendarz, B2B, forum, KRS',
'NordaGPT: Klikalne linki URL i adresy email w odpowiedziach AI', '<strong>NordaGPT: Klikalne linki</strong> URL i email w odpowiedziach AI',
'NordaGPT: Banner na stronie głównej z szybkim dostępem do chatu', '<strong>NordaGPT: Banner na stronie głównej</strong> z szybkim dostępem do chatu',
'Kalendarz: Widok siatki miesięcznej z wydarzeniami', # Kalendarz
'Kalendarz: Banner wydarzenia na stronie głównej z listą uczestników', '<strong>Kalendarz: Widok siatki miesięcznej</strong> z Quick RSVP',
'Kalendarz: Quick RSVP - szybkie potwierdzenie udziału ze strony głównej', 'Kalendarz: Banner wydarzenia na stronie głównej z uczestnikami',
'Kalendarz: Klikalne badge uczestników (linki do profili firm)', # AI i Audyty
'KRS Audit: Nowy panel /admin/krs-audit z parsowaniem dokumentów PDF', '<strong>AI Enrichment</strong> - wzbogacanie danych firm przez AI z web search',
'KRS Audit: Progress bar dla audytu pojedynczego i wsadowego', '<strong>KRS Audit</strong> - parsowanie dokumentów PDF, progress bar',
'KRS Audit: Sortowalne kolumny i wyświetlanie wszystkich kodów PKD', '<strong>Analityka: Panel /admin/analytics</strong> - śledzenie sesji użytkowników',
'AI Enrichment: Przycisk wzbogacania danych AI na profilu firmy', # Profile
'AI Enrichment: Web search do automatycznego zbierania informacji o firmie', 'Profil firmy: Wszystkie kody PKD, dane właściciela CEIDG',
'Analityka: Panel /admin/analytics ze śledzeniem sesji użytkowników',
'Analityka: Ranking użytkowników wg aktywności (sesje, strony, kliknięcia)',
'Analityka: Edycja danych użytkowników w panelu admina',
'Profil firmy: Wszystkie kody PKD wyświetlane na stronie firmy',
'Profil firmy: Dane właściciela CEIDG dla jednoosobowych działalności',
'Profil firmy: Powiązanie kont użytkowników z osobami z KRS',
'Profil firmy: Zielone badge dla osób zweryfikowanych w KRS', 'Profil firmy: Zielone badge dla osób zweryfikowanych w KRS',
'Forum/B2B: Kategoria "test" do oznaczania testowych treści',
'Forum/B2B: Przycisk toggle do ukrywania/pokazywania testów',
], ],
'improve': [ 'improve': [
'Uczestnicy wydarzeń wyświetlani pionowo, alfabetycznie, z nazwami firm', 'Lepsze formatowanie odpowiedzi AI (Markdown)',
'Lepsze formatowanie odpowiedzi AI (listy, linki, Markdown)',
'Reorganizacja sekcji na profilu firmy',
'Banner NordaGPT minimalizowalny', 'Banner NordaGPT minimalizowalny',
], ],
'fix': [ 'fix': [
'Rate limit logowania zwiększony z 5/h do 30/min', 'Rate limit logowania i audytu SEO zwiększony',
'Rate limit audytu SEO zwiększony z 10/h do 200/h',
'AI Chat: Poprawna obsługa składni linków Markdown',
], ],
}, },
{ {
@ -10414,23 +10377,16 @@ def release_notes():
'date': '12 stycznia 2026', 'date': '12 stycznia 2026',
'badges': ['new', 'improve', 'fix'], 'badges': ['new', 'improve', 'fix'],
'new': [ 'new': [
'Audyt GBP: Sekcja edukacyjna "Jak działa wizytówka Google?" z trzema kartami', '<strong>Audyt GBP: Pełny audyt</strong> z Google Places API dla wszystkich firm',
'Audyt GBP: Przycisk "Zobacz wizytówkę Google" prowadzący do profilu w Maps', 'Audyt GBP: Sekcja edukacyjna "Jak działa wizytówka Google?"',
'Audyt GBP: Pełny audyt z Google Places API dla wszystkich 111 firm', 'Audyty: Sekcje inline na profilu firmy (SEO, GBP, Social Media, IT)',
'Audyty: Klikalne banery wyników prowadzą do szczegółowych stron audytu',
'Audyty: Sekcje audytów inline na profilu firmy (SEO, GBP, Social Media, IT)',
], ],
'improve': [ 'improve': [
'Ujednolicona 5-poziomowa skala kolorów dla wszystkich audytów', 'Ujednolicona 5-poziomowa skala kolorów dla audytów',
'Social Media: Wynik jako procent (np. 16%) zamiast liczby platform', 'Social Media: Wynik jako procent zamiast liczby platform',
'Normalizacja URL stron WWW firm (usunięcie duplikatów)',
'Spójność kolorów między profilem firmy a szczegółami audytu',
], ],
'fix': [ 'fix': [
'Audyt GBP: Kategorie Google wyświetlane po polsku (np. "Warsztat samochodowy" zamiast "Car Repair")', 'Audyt GBP: Kategorie Google po polsku',
'ZOPK: Usunięcie duplikatów interesariuszy i naprawa polskich znaków',
'ZOPK: Unique constraint na nazwę interesariusza (zapobiega duplikatom)',
'SEO: Spójność wyników między profilem firmy a szczegółami audytu',
], ],
}, },
{ {
@ -10438,30 +10394,18 @@ def release_notes():
'date': '11 stycznia 2026', 'date': '11 stycznia 2026',
'badges': ['new', 'improve'], 'badges': ['new', 'improve'],
'new': [ 'new': [
'Mapa Powiązań - interaktywna wizualizacja powiązań firm i osób (D3.js)', # MEGA WAŻNE
'Filtry mapy: węzły (firmy/osoby), powiązania (zarząd/wspólnicy/prokurenci/JDG)', '<strong>Mapa Powiązań</strong> - interaktywna wizualizacja firm i osób (D3.js)',
'Liczniki przy filtrach aktualizowane na bieżąco', '<strong>Profile osób</strong> (/osoba) - dane z KRS/CEIDG i portalu',
'Profile osób (/osoba) - dane z KRS/CEIDG i portalu', '<strong>AI Learning</strong> - uczenie chatbota z feedbacku użytkowników',
'Wyszukiwarka osób - częściowe dopasowanie imienia/nazwiska', # Inne
'Klikalne osoby w sekcji Zarząd i Wspólnicy na profilu firmy', 'Wyszukiwarka osób z częściowym dopasowaniem',
'Logo firm w wynikach wyszukiwania (klikalne)', 'Logo firm w wynikach wyszukiwania',
'AI Learning: System uczenia chatbota z feedbacku użytkowników', 'Panel AI Usage: szczegółowy widok per użytkownik',
'AI Learning: Few-shot learning z pozytywnych odpowiedzi',
'AI Learning: Przykłady startowe (seed) dla zimnego startu',
'Panel AI Usage: Szczegółowy widok użycia AI per użytkownik',
'Panel AI Usage: Klikalne nazwy użytkowników w rankingu',
'Panel Analytics: Sekcja statusu uczenia AI',
], ],
'improve': [ 'improve': [
'Mapa: fullscreen modal zamiast osobnej strony', 'Mapa: fullscreen modal, etykiety przy hover',
'Mapa: etykiety ukryte domyślnie, widoczne przy hover', 'System toastów zamiast natywnych dialogów',
'Poprawka liczenia firm vs ról (6 firm z 9 rolami)',
'Tooltip pokazuje wszystkie powiązania bez limitu',
'Ukrycie sekcji Aktualności na profilach firm (tymczasowo)',
'Zmiana nazwy ZOPK na ZOP Kaszubia (Zielony Okręg Przemysłowy Kaszubia)',
'Stylizowane modale zamiast natywnych dialogów przeglądarki',
'System toastów do komunikatów sukcesu/błędu',
'Bezpieczeństwo: Usunięcie starych haseł z dokumentacji',
], ],
}, },
{ {
@ -10469,27 +10413,17 @@ def release_notes():
'date': '10 stycznia 2026', 'date': '10 stycznia 2026',
'badges': ['new', 'improve', 'security'], 'badges': ['new', 'improve', 'security'],
'new': [ 'new': [
'Forum: Kategorie tematów (Propozycja funkcji, Błąd, Pytanie, Ogłoszenie)', # MEGA WAŻNE
'Forum: Statusy zgłoszeń (Nowy, W realizacji, Rozwiązany, Odrzucony)', '<strong>Forum: Załączniki obrazów</strong> - drag & drop, Ctrl+V, do 10 plików',
'Forum: Załączniki obrazów do tematów i odpowiedzi (JPG, PNG, GIF)', '<strong>Forum: Kategorie i statusy</strong> zgłoszeń (Propozycja, Błąd, Pytanie)',
'Forum: Upload wielu plików jednocześnie (do 10 na odpowiedź)', '<strong>Dokumentacja architektury</strong> - 19 plików, diagramy C4, Mermaid',
'Forum: Drag & drop i wklejanie ze schowka (Ctrl+V)',
'Panel admina: Statystyki i zmiana statusów tematów',
'Dokumentacja architektury systemu z diagramami Mermaid (19 plików)',
'Diagramy C4: System Context, Containers, Components, Deployment',
'Dokumentacja przepływów danych: Auth, Search, AI Chat, SEO Audit',
'Nowy README.md z kompletną dokumentacją projektu',
'Dokumentacja bezpieczeństwa (docs/SECURITY.md)',
], ],
'improve': [ 'improve': [
'Bezpieczny upload z walidacją magic bytes i usuwaniem EXIF', 'Bezpieczny upload z walidacją magic bytes',
'Responsywna siatka podglądu załączników',
'Filtry kategorii i statusów na liście tematów',
], ],
'security': [ 'security': [
'Usunięcie hardcoded credentials z kodu źródłowego', '<strong>Usunięcie hardcoded credentials</strong> z kodu źródłowego',
'Zmiana hasła PostgreSQL na produkcji', 'Zmiana hasła PostgreSQL na produkcji',
'Konfiguracja zmiennych środowiskowych w .env',
], ],
}, },
{ {
@ -10497,36 +10431,30 @@ def release_notes():
'date': '9 stycznia 2026', 'date': '9 stycznia 2026',
'badges': ['new', 'improve'], 'badges': ['new', 'improve'],
'new': [ 'new': [
'Panel Audyt GBP - przegląd kompletności profili Google Business', '<strong>Panel Audyt GBP</strong> - przegląd profili Google Business',
'Panel Audyt Social - przegląd pokrycia Social Media wszystkich firm', '<strong>Panel Audyt Social</strong> - pokrycie Social Media',
'Dodawanie użytkowników bezpośrednio w panelu admina', '<strong>Tworzenie użytkowników z AI</strong> - wklejanie tekstu/screenshotów',
'Tworzenie użytkowników z AI - wklejanie tekstu lub screenshotów z dowolnego źródła',
], ],
'improve': [ 'improve': [
'Wyświetlanie przypisanych firm przy użytkownikach', 'Nowy pasek Admin z pogrupowanymi funkcjami',
'Poprawki wyświetlania nazw użytkowników w panelu',
'Nowy pasek Admin z pogrupowanymi funkcjami (Zarządzanie, Audyty, Analityka)',
], ],
}, },
{ {
'version': 'v1.8.0', 'version': 'v1.8.0',
'date': '8 stycznia 2026', 'date': '8 stycznia 2026',
'badges': ['new', 'improve'], 'badges': ['new'],
'new': [ 'new': [
'Panel Audyt IT - kompleksowy audyt infrastruktury IT firm', '<strong>Panel Audyt IT</strong> - kompleksowy audyt infrastruktury IT firm',
'Eksport audytów IT do CSV', 'Eksport audytów IT do CSV',
], ],
'improve': [
'Poprawki w formularzach edycji audytu IT',
],
}, },
{ {
'version': 'v1.7.0', 'version': 'v1.7.0',
'date': '6 stycznia 2026', 'date': '6 stycznia 2026',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'Panel Audyt SEO - analiza wydajności stron www firm', '<strong>Panel Audyt SEO</strong> - analiza wydajności stron www firm',
'Integracja z Google PageSpeed Insights API', '<strong>Integracja z Google PageSpeed Insights API</strong>',
], ],
}, },
{ {
@ -10534,9 +10462,9 @@ def release_notes():
'date': '29 grudnia 2025', 'date': '29 grudnia 2025',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'System newsów i wzmianek medialnych o firmach', '<strong>System newsów</strong> i wzmianek medialnych o firmach',
'Panel moderacji newsów dla adminów', 'Panel moderacji newsów dla adminów',
'Integracja z Brave Search API', '<strong>Integracja z Brave Search API</strong>',
], ],
}, },
{ {
@ -10544,7 +10472,7 @@ def release_notes():
'date': '15 grudnia 2025', 'date': '15 grudnia 2025',
'badges': ['new', 'improve'], 'badges': ['new', 'improve'],
'new': [ 'new': [
'Panel Social Media - zarządzanie profilami społecznościowymi', '<strong>Panel Social Media</strong> - zarządzanie profilami społecznościowymi',
'Weryfikacja aktywności profili Social Media', 'Weryfikacja aktywności profili Social Media',
], ],
'improve': [ 'improve': [
@ -10556,9 +10484,9 @@ def release_notes():
'date': '1 grudnia 2025', 'date': '1 grudnia 2025',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'System rekomendacji między firmami', '<strong>System rekomendacji</strong> między firmami',
'Panel składek członkowskich', '<strong>Panel składek członkowskich</strong>',
'Kalendarz wydarzeń Norda Biznes', '<strong>Kalendarz wydarzeń</strong> Norda Biznes',
], ],
}, },
{ {
@ -10566,8 +10494,8 @@ def release_notes():
'date': '28 listopada 2025', 'date': '28 listopada 2025',
'badges': ['new', 'improve'], 'badges': ['new', 'improve'],
'new': [ 'new': [
'Chatbot AI z wiedzą o wszystkich firmach', '<strong>Chatbot AI (NordaGPT)</strong> z wiedzą o wszystkich firmach',
'Wyszukiwarka firm z synonimami i fuzzy matching', '<strong>Wyszukiwarka firm</strong> z synonimami i fuzzy matching',
], ],
'improve': [ 'improve': [
'Ulepszony SearchService z PostgreSQL FTS', 'Ulepszony SearchService z PostgreSQL FTS',
@ -10578,7 +10506,7 @@ def release_notes():
'date': '25 listopada 2025', 'date': '25 listopada 2025',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'System wiadomości prywatnych między użytkownikami', '<strong>System wiadomości prywatnych</strong> między użytkownikami',
'Powiadomienia o nowych wiadomościach', 'Powiadomienia o nowych wiadomościach',
], ],
}, },
@ -10587,7 +10515,7 @@ def release_notes():
'date': '24 listopada 2025', 'date': '24 listopada 2025',
'badges': ['new', 'improve'], 'badges': ['new', 'improve'],
'new': [ 'new': [
'Rejestracja i logowanie użytkowników', '<strong>Rejestracja i logowanie</strong> użytkowników',
'Profile użytkowników powiązane z firmami', 'Profile użytkowników powiązane z firmami',
], ],
'improve': [ 'improve': [
@ -10599,8 +10527,8 @@ def release_notes():
'date': '23 listopada 2025', 'date': '23 listopada 2025',
'badges': ['new'], 'badges': ['new'],
'new': [ 'new': [
'Oficjalny start platformy Norda Biznes Partner', '<strong>Oficjalny start platformy Norda Biznes Partner</strong>',
'Katalog 111 firm członkowskich', '<strong>Katalog 111 firm członkowskich</strong>',
'Wyszukiwarka firm po nazwie, kategorii, usługach', 'Wyszukiwarka firm po nazwie, kategorii, usługach',
'Profile firm z pełnymi danymi kontaktowymi', 'Profile firm z pełnymi danymi kontaktowymi',
], ],

108
docs/RELEASE_NOTES_GUIDE.md Normal file
View File

@ -0,0 +1,108 @@
# Przewodnik po Release Notes - NordaBiz
## Struktura Release Notes
Release notes są zdefiniowane w pliku `app.py` w funkcji `release_notes()` jako lista słowników.
```python
{
'version': 'v1.XX.0',
'date': 'DD miesiąca RRRR',
'badges': ['new', 'improve', 'fix', 'security'],
'new': [...], # Nowości
'improve': [...], # Ulepszenia
'fix': [...], # Naprawione błędy
'security': [...], # Bezpieczeństwo (opcjonalne)
}
```
## Zasady tworzenia wpisów
### 1. Sortowanie od najważniejszych
Wpisy w każdej sekcji (`new`, `improve`, `fix`, `security`) sortujemy:
- **Na górze:** Najważniejsze zmiany (mega ważne)
- **Na dole:** Mniej istotne szczegóły
### 2. Wytłuszczanie mega ważnych zmian
Używamy HTML `<strong>` dla najważniejszych funkcjonalności:
```python
'new': [
'<strong>NordaGPT: Upgrade do Gemini 3</strong> - najnowszy model AI',
'<strong>PWA: Aplikacja mobilna</strong> - instalacja na iOS/Android',
'Aktualności: Obsługa wielu kategorii', # mniej ważne - bez bold
]
```
### 3. Kategorie zmian
| Badge | Ikona | Opis |
|-------|-------|------|
| `new` | ✨ | Nowe funkcjonalności |
| `improve` | ⚡ | Ulepszenia istniejących funkcji |
| `fix` | 🔧 | Naprawione błędy |
| `security` | 🔒 | Zmiany bezpieczeństwa |
### 4. Format wpisu
```
'<strong>Moduł: Funkcja główna</strong> - krótki opis'
'Moduł: Funkcja drugorzędna - szczegóły'
```
## Przykład dobrze sformatowanego release
```python
{
'version': 'v1.20.0',
'date': '29 stycznia 2026',
'badges': ['new', 'improve', 'fix'],
'new': [
# MEGA WAŻNE - na górze, z <strong>
'<strong>NordaGPT: Upgrade do Gemini 3 Flash Preview</strong> - najnowszy model Google AI',
'<strong>NordaGPT: Dwa modele do wyboru</strong> - Flash (darmowy) i Pro (płatny)',
'<strong>PWA: Aplikacja mobilna</strong> - możliwość instalacji na telefonie',
# Mniej ważne - niżej, bez bold
'NordaGPT: Wyświetlanie szacowanego kosztu miesięcznego',
'Aktualności: Obsługa wielu kategorii',
],
'improve': [
'Strona główna: Nowa ikona NordaGPT',
],
'fix': [
'Tablica B2B: Naprawiono błąd 500',
],
},
```
## Checklist przed dodaniem release
- [ ] Wersja zwiększona (major.minor.patch)
- [ ] Data w formacie "DD miesiąca RRRR"
- [ ] Wpisy posortowane od najważniejszych
- [ ] Mega ważne zmiany wytłuszczone `<strong>`
- [ ] Odpowiednie badges (`new`, `improve`, `fix`, `security`)
- [ ] Składnia Python poprawna (`python3 -m py_compile app.py`)
## Lokalizacja plików
- **Release notes:** `app.py` → funkcja `release_notes()` (około linii 10250)
- **Szablon HTML:** `templates/release_notes.html`
- **Strona:** https://nordabiznes.pl/release-notes
## Deploy po zmianach
```bash
# 1. Weryfikacja składni
python3 -m py_compile app.py
# 2. Commit
git add app.py
git commit -m "docs: Release notes vX.XX.0"
# 3. Push i deploy
git push origin master && git push inpi master
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && sudo -u www-data git pull && sudo systemctl restart nordabiznes"
```

View File

@ -135,6 +135,7 @@
.change-category.new h4::before { content: '✨'; } .change-category.new h4::before { content: '✨'; }
.change-category.fix h4::before { content: '🔧'; } .change-category.fix h4::before { content: '🔧'; }
.change-category.improve h4::before { content: '⚡'; } .change-category.improve h4::before { content: '⚡'; }
.change-category.security h4::before { content: '🔒'; }
.change-category.beta h4::before { content: '🧪'; } .change-category.beta h4::before { content: '🧪'; }
.change-list { .change-list {
@ -276,7 +277,7 @@
<h4>Nowości</h4> <h4>Nowości</h4>
<ul class="change-list"> <ul class="change-list">
{% for item in release.new %} {% for item in release.new %}
<li>{{ item }}</li> <li>{{ item|safe }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
@ -287,7 +288,7 @@
<h4>Ulepszenia</h4> <h4>Ulepszenia</h4>
<ul class="change-list"> <ul class="change-list">
{% for item in release.improve %} {% for item in release.improve %}
<li>{{ item }}</li> <li>{{ item|safe }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
@ -298,7 +299,18 @@
<h4>Naprawione</h4> <h4>Naprawione</h4>
<ul class="change-list"> <ul class="change-list">
{% for item in release.fix %} {% for item in release.fix %}
<li>{{ item }}</li> <li>{{ item|safe }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if release.security %}
<div class="change-category security">
<h4>Bezpieczeństwo</h4>
<ul class="change-list">
{% for item in release.security %}
<li>{{ item|safe }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
@ -309,7 +321,7 @@
<h4>W fazie testów (BETA)</h4> <h4>W fazie testów (BETA)</h4>
<ul class="change-list"> <ul class="change-list">
{% for item in release.beta %} {% for item in release.beta %}
<li>{{ item }}</li> <li>{{ item|safe }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>