- Dodano modal "Dodaj z AI" z parsowaniem tekstu/obrazów przez Gemini
- API endpoints: /api/contacts/ai-parse, /api/contacts/bulk-create
- Nowy widok grupowania kontaktów po organizacji (domyślny)
- Widok tabeli dla kompaktowego przeglądu
- Przełącznik widoków z zapamiętywaniem preferencji
- Drag & drop dla zdjęć wizytówek
- Docker: PostgreSQL 16 (zgodność z produkcją)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nowy model ExternalContact z pełnymi danymi kontaktowymi, social media, related_links (JSONB)
- Migracja SQL 020_external_contacts.sql z full-text search
- Routes: /kontakty (lista), /kontakty/dodaj, /kontakty/<id>, /kontakty/<id>/edytuj
- Szablony: lista z filtrami, karta szczegółów, formularz CRUD
- Nawigacja: link "Kontakty zewnętrzne" w dropdown Społeczność
- Poprawka: aktualizacja liczby firm z 80 na 111
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nowa tabela announcement_reads do śledzenia kto przeczytał
- Avatary użytkowników z inicjałami (tooltip z nazwiskiem)
- Statystyki: liczba i procent użytkowników którzy przeczytali
- Progress bar wizualizujący zasięg ogłoszenia
- Automatyczny zapis odczytu przy otwarciu ogłoszenia
Autor: Maciej Pienczyn
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Feedback od testera: sekcja wyjaśniająca flow powinna być widoczna
wcześniej, przed szczegółowymi kartami funkcji.
Nowa kolejność:
1. Hero (nagłówek + statystyki + CTA)
2. "Jak to działa?" (1→2→3) ← przeniesione wyżej
3. Karty funkcji (Pełny katalog, AI Asystent, Filtry)
4. "Do czego użyjesz tego portalu?"
5. Bottom CTA
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Dodano position: relative i z-index: 50 do .chat-header, aby elementy
dropdown menu użytkownika (z-index: 200) były wyświetlane nad paskiem NordaGPT.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano przycisk 'Sugestie z bazy wiedzy' na stronie Timeline
- Modal z listą sugestii milestone z bazy wiedzy:
- Statystyki (total facts, w timeline, do dodania)
- Karty sugestii z edytowalnym tytułem i kategorią
- Przyciski Dodaj/Pomiń dla każdej sugestii
- Toast notifications dla feedbacku
- Auto-refresh timeline po dodaniu sugestii
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Backend zwraca teraz pełne dane zweryfikowanych faktów (nie tylko count)
- Nowy modal pokazuje listę zweryfikowanych faktów z:
- Tekstem faktu i typem
- Procentem podobieństwa do wzorca
- Fragmentem wzorca który dopasował
- Możliwość cofnięcia weryfikacji dla pojedynczych faktów
- Statystyki: zweryfikowane / wzorce użyte / cofnięte
- Stylizowane karty z animacjami
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nowa funkcja find_similar_to_verified_facts() w zopk_knowledge_service.py
używa pg_trgm do wyszukiwania podobnych faktów
- Nowa funkcja auto_verify_similar_to_verified() automatycznie weryfikuje
fakty podobne do już zweryfikowanych (próg 80% podobieństwa)
- Nowy endpoint POST /api/zopk/knowledge/auto-verify/similar
- Nowy endpoint GET /api/zopk/knowledge/suggest-similar-facts
- Przycisk "Ucz się z weryfikacji" na dashboardzie bazy wiedzy ZOPK
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Funkcja renderVerificationStats używała nieistniejącego klucza data.verification
- API zwraca dane w strukturze: data.entities, data.facts, data.chunks
- Naprawiono mapowanie danych do właściwej struktury
- Obliczanie 'oczekuje' jako total - verified
- Dodano skrypt cron do automatycznej ekstrakcji wiedzy (scripts/cron_extract_knowledge.py)
- Dodano panel deduplikacji faktów (/admin/zopk/knowledge/fact-duplicates)
- Dodano API i funkcje auto-weryfikacji encji i faktów
- Dodano panel Timeline ZOPK (/admin/zopk/timeline) z CRUD
- Rozszerzono dashboard bazy wiedzy o statystyki weryfikacji i przyciski auto-weryfikacji
- Dodano migrację 016_zopk_milestones.sql dla tabeli kamieni milowych
- Naprawiono duplikat modelu ZOPKMilestone w database.py
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Problem: JS oczekiwał facts_subject + facts_object, API zwraca facts
Rozwiązanie: Zmiana JS na ${p.transfers.facts || 0}
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Problem: D3.js ładowane przez base.html PO bloku extra_js,
więc initGraph() była wywoływana gdy D3 jeszcze nie istniało.
Rozwiązanie: użycie window.addEventListener('load', ...)
zamiast natychmiastowego sprawdzenia typeof d3.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano endpoint /admin/zopk/knowledge/graph z wizualizacją D3.js
- Dodano API endpoint /api/zopk/knowledge/graph/data
- Graf współwystępowania encji z kolorami według typu
- Rozmiar węzłów proporcjonalny do liczby wzmianek
- Filtry: typ encji, minimalna liczba współwystąpień
- Tooltips z informacjami o encjach
- Zoom i drag-and-drop interakcje
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Nowe funkcje w zopk_knowledge_service.py:
- find_duplicate_entities() - wyszukiwanie podobnych encji (pg_trgm)
- merge_entities() - łączenie encji z transferem relacji
- get_entity_merge_preview() - podgląd przed połączeniem
Nowe endpointy w app.py:
- GET /admin/zopk/knowledge/duplicates - panel zarządzania duplikatami
- POST /api/zopk/knowledge/duplicates/preview - podgląd merge
- POST /api/zopk/knowledge/duplicates/merge - wykonanie merge
Nowy szablon:
- templates/admin/zopk_knowledge_duplicates.html - UI z kartami encji
Dodatkowo:
- Aktualizacja CLAUDE.md z procedurą wdrażania
- Skrypt scripts/run_migration.py do uruchamiania migracji SQL
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Priorytet 1 - Panel admina bazy wiedzy ZOPK:
- /admin/zopk/knowledge - dashboard ze statystykami
- /admin/zopk/knowledge/chunks - lista chunks z filtrowaniem
- /admin/zopk/knowledge/facts - lista faktów z typami
- /admin/zopk/knowledge/entities - lista encji z mentions
- CRUD operacje: weryfikacja, usuwanie
Priorytet 2 - Poprawa jakości odpowiedzi NordaGPT:
- Linki markdown do źródeł w kontekście ZOPK
- Ulepszone formatowanie (bold, listy, nagłówki)
- Sekcja "Źródła" na końcu odpowiedzi
- Instrukcje w system prompt dla lepszej prezentacji
Priorytet 3 - Timeline ZOPK:
- Model ZOPKMilestone w database.py
- Migracja 016_zopk_milestones.sql z sample data
- Sekcja "Roadmapa ZOPK" na stronie /zopk
- Pionowa oś czasu z markerami lat
- Statusy: completed, in_progress, planned, delayed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Dodano Server-Sent Events (SSE) dla śledzenia postępu w czasie rzeczywistym:
- Scraping treści artykułów
- Ekstrakcja wiedzy przez Gemini AI
- Generowanie embeddingów
Funkcje:
- Modal z paskiem postępu i statystykami
- Live log operacji z kolorowaniem statusów
- Podsumowanie na zakończenie (sukces/błędy/czas)
- Możliwość zamknięcia modalu po zakończeniu
Zmiany techniczne:
- 3 nowe SSE endpointy (/stream)
- ProgressUpdate dataclass w scraperze
- Callback pattern w batch_scrape, batch_extract, generate_chunk_embeddings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Scraping: domyślnie 1, max 100
- Ekstrakcja: domyślnie 1, max 100
- Embeddingi: domyślnie 1, max 500
- Usunięto stałe liczby z etykiet przycisków
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano white-space: pre-line do modala
- Wyrównano kolumny wartości
- Dodano separatory sekcji
- Usunięto zbędne emoji w nagłówkach
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano przyciski: Scrapuj treść, Ekstraktuj wiedzę, Generuj embeddingi
- Dodano przycisk Statystyki z podglądem bazy wiedzy
- Przyciski widoczne w panelu /admin/zopk/news
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Obrazki newsów (lub zielony placeholder z ikoną)
- Większy padding i promień zaokrąglenia kart
- Dłuższe opisy (250 znaków zamiast 200)
- Data w formacie DD.MM.YYYY w jednej linii ze źródłem
- Hover z efektem podniesienia (translateY)
- Responsive: obrazki na pełną szerokość na mobile
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano pasek statystyk newsów (łącznie, dzień, tydzień, miesiąc)
- Zwiększono limit wyświetlanych newsów z 10 do 25
- Usunięto przycisk "Zobacz wszystkie" - pełny widok od razu
- Przycisk "Starsze aktualności" pojawia się gdy jest więcej niż 25
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Były dwa elementy z tym samym ID - JavaScript znajdował pierwszy
(poza modalem) zamiast właściwego wewnątrz modala.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nowa funkcja reevaluate_low_score_news() szuka newsów z 1-2★
zawierających Via Pomerania, NORDA, S6, Droga Czerwona, etc.
- Nowy endpoint POST /admin/zopk/news/reevaluate-low-scores
- Przycisk w UI "Re-ewaluuj niskie oceny" z szczegółowym raportem
- Automatyczne auto-approve jeśli nowa ocena >= 3★
Problem: Artykuły o Via Pomerania miały 1★ bo były ocenione
przed dodaniem tego tematu do promptu AI.
Rozwiązanie: Re-ewaluacja nowym promptem podniesie ich oceny.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Zamiana auto-odświeżania na przycisk OK
- Dodanie sekcji szczegółowych statystyk (12 metryk)
- Dodanie listy artykułów odrzuconych przez AI
- Śledzenie czasu przetwarzania
- API zwraca nowe pola: sent_to_ai, ai_rejected_articles, processing_time
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows:
- Current model: gemini-2.5-flash-lite
- Prompt version: v2 (2026-01-15)
- New topics: +7 infrastructure projects
Tooltip lists: Via Pomerania, S6, Droga Czerwona, etc.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changes:
- Lower auto-approve threshold from 4★ to 3★ (verified 2026-01-15)
- Add detailed progress bar for ZOPK search process
- Add auto-approved articles list with star ratings
- Document ZOPK topics (ZOP Kaszubia) in CLAUDE.md
- Add 8-second countdown before auto-refresh
Technical:
- zopk_news_service.py: Changed score threshold from >=4 to >=3
- Templates: New CSS for progress phases and results display
- CLAUDE.md: Added "ZOP Kaszubia News" section with topic guidelines
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
429 (Too Many Requests) means the endpoint is working correctly
and is protected by rate limiting - this is expected behavior
for /register endpoint.
- Add 429 to acceptable status codes (200, 302, 304, 429)
- Update legend to explain 429 means protection is working
- Apply to all health check endpoints
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /admin/health route with visual status indicators
- Create health_dashboard.html with category-based endpoint cards
- Color-coded status: green (OK), yellow (warning), red (error)
- Show response times with color indicators (fast/medium/slow)
- Add HTTP status code legend
- Auto-refresh every 2 minutes
- Add link in admin navigation menu
- Categories: public pages, auth, API, admin panel, company profiles
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Verify all software versions via SSH (NORDABIZ-01, R11-REVPROXY-01, Proxmox)
- Remove Redis (not used), Gunicorn (app runs directly via python)
- Add PostgreSQL version dynamic fetch from database
- Add Docker version for R11-REVPROXY-01
- Update all package versions to verified values
- Handle unknown versions (Fortigate) with yellow "nieznana" badge
- Add comment with verification date (2026-01-14)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /admin/status route with real-time system metrics (CPU, RAM, disk)
- Add /api/admin/status API endpoint for auto-refresh
- Add technology stack section showing all platform technologies
- Add auto-refresh (5 min) to GeoIP stats in security dashboard
- Add "Status systemu" link to admin navigation menu
- Fix /health/full endpoint list (remove non-existent endpoints)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New 'Mechanisms' tab listing all security features with star ratings (5★=critical)
- New 'GeoIP' tab with blocking statistics (daily/monthly/yearly/total)
- Country breakdown with flags for blocked connections
- Status indicators for each security mechanism
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed branding across the application:
- email_service.py: Updated footers in password reset and welcome emails
- base.html: Updated meta description and footer text
- landing.html: Updated page title
New tagline: "Platforma Networkingu Regionalnej Izby Przedsiębiorców Norda Biznes"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add INPI logo with link to inpi.pl
- Change copyright to INPI as creator
- Update contact email to maciej.pienczyn@inpi.pl
- Add WhatsApp contact link
- Make phone and email clickable (tel:/mailto:)
- Add CSS styles for footer creator section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>