- Add linkifyText() function to convert URLs to anchor tags
- Apply linkification only to assistant messages (safe XSS handling)
- Add CSS styling for links: blue color, underline, hover effect
- Links open in new tab with noopener noreferrer
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Import Person, CompanyPerson, CompanySocialMedia, GBPAudit models
- Add company people (zarząd, wspólnicy, prokurenci) grouped by company
- Add social media profiles (platform + followers) grouped by company
- Add latest GBP audit scores (completeness, reviews, rating)
- Update system prompt with Stage 3 data descriptions
- Add new prompts for people lookup and GBP audit queries
- Update suggestion chips: "Kto jest prezesem?", "Google opinie?", "Fanów FB?"
AI chat now has access to:
- 80 companies + services + competencies
- Recommendations, News (Stage 1)
- Calendar events, B2B classifieds, Forum topics (Stage 2)
- KRS people, Social Media, GBP audits (Stage 3)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Import Classified, NordaEvent, ForumTopic models
- Add upcoming events (next 60 days) to AI context
- Add active B2B classifieds (non-test) to AI context
- Add recent forum topics (non-test) to AI context
- Update system prompt with new data source descriptions
- Add JSON serialization for all Stage 2 data
- Update suggestion chips: "Kiedy następne spotkanie?", "Kto szuka usług IT?"
AI chat now has access to:
- 80 companies + services + competencies
- Recommendations, News (Stage 1)
- Calendar events, B2B classifieds, Forum topics (Stage 2)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add CompanyRecommendation and ZOPKNews imports to nordabiz_chat.py
- Fetch approved recommendations (last 20) in conversation context
- Fetch approved news from last 30 days (last 10) in context
- Serialize recommendations and news to JSON in AI prompt
- Update system prompt with data format descriptions
- Update chat template header description
- Add new suggestion chips: "Kto poleca firmę..." and "Co słychać..."
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add is_test field to Classified model
- Add test-item styling (opacity + gray border + badge)
- Add yellow toggle button with localStorage persistence
- Add script to mark existing classifieds as test
- Yellow 'Ukryj testowe' button in filters bar
- Hides all test-topic cards when clicked
- Persists preference in localStorage
- Updates topic count when toggled
- Add 'test' to ForumTopic.CATEGORIES with Polish label 'Testowy'
- Add gray styling for test topics (badge + card opacity)
- Add scripts to list and mark test topics
- Click 'Zapisz się' button to register immediately
- Counter updates visually before redirect
- Then redirects to event details page
- Shows loading state during request
- event.html: Powrót, wziąć udział, zapisało się, Wezmę udział
- index.html: Następny, Zarządzaj, wydarzeń, uczestników
- admin.html: Zarządzanie wydarzeniami, wydarzeń
- Show next upcoming event banner on main page (after login)
- Display event title, date, time, location
- Show attendee count with Polish grammar
- Button changes to "Jesteś zapisany/a" when registered
- Orange gradient design to attract attention
- Responsive layout for mobile
Replaces WhatsApp polls for event attendance tracking.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add source and source_note fields to NordaEvent model
- Create import_calendar_2026.py for NORDA calendar events
- Create import_excel_members_2026_01_13.py for new members
- Add .private/ to .gitignore (confidential materials)
Imported 26 events from Kalendarz Izby NORDA 2026 (Artur Wiertel)
Imported 31 new member companies from Excel
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive GOOGLE_TYPES_PL dictionary with 200+ type translations
- Update _check_categories() to use Polish translations
- Fallback to formatted English if translation not available
- Categories like "car_repair" now display as "Warsztat samochodowy"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New features:
- GBP audit: Educational section explaining Google Business Profile
- GBP audit: Direct link to Google Maps business listing
- GBP audit: Full audit with Places API for 40 companies
- Clickable audit banners linking to detail pages
- Inline audit sections on company profile
Improvements:
- Unified 5-level color scale for all audits
- Social Media score as percentage
- URL normalization for company websites
Fixes:
- ZOPK stakeholder duplicates removed
- Unique constraint to prevent future duplicates
- SEO score consistency between views
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Explains the relationship between:
- Google Search Knowledge Panel
- Google Maps business listing
- Google Business Profile management
Helps business owners understand that both views show the same data
and how to manage their profile at business.google.com
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added UniqueConstraint on 'name' column
- Constraint already applied to production database
- Prevents duplicate stakeholder entries in the future
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Template now uses google_place_id to generate Maps URL if google_maps_url is empty
- gbp_audit_service.py now copies google_maps_url from website_analysis
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds 'Zobacz wizytowke Google' button in header-actions section
that links directly to the company's Google Business Profile.
Button only shows when google_maps_url is available.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated CSS class definitions in all 4 audit templates to use
the same 5-level color scale as inline styles:
- .score-excellent: #10b981 (green, 90-100%)
- .score-good: #84cc16 (lime, 70-89%)
- .score-average: #f59e0b (amber, 50-69%)
- .score-needs-work: #f97316 (orange, 30-49%)
- .score-poor: #ef4444 (red, 0-29%)
This ensures consistency between company profile banners
and detailed audit page score circles/text.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed Social Media audit banner to show percentage score (e.g., 16%)
instead of platform count, matching the detailed audit page
- Fixed SEO score inconsistency by sorting website_analysis query by
seo_audited_at desc (same as seo_audit_dashboard)
- Both audit sections on company profile now show same values as
their detailed pages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- GBP Audit banner links to /audit/gbp/<slug>
- SEO Audit banner links to /audit/seo/<slug>
- Social Media banner links to /audit/social/<slug>
- IT Audit banner links to /audit/it/<slug>
- Added hover effects and chevron icon for visual feedback
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add normalize_social_url() function to database.py to prevent
www vs non-www duplicates in social media records
- Update update_social_media.py to normalize URLs before insert
- Update social_media_audit.py to normalize URLs before insert
- Add inline GBP Audit section to company profile
- Add inline Social Media Audit section to company profile
- Add inline IT Audit section to company profile
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix XSS: innerHTML → textContent for modal messages
- Fix XSS: Safe DOM element creation for toast notifications
- Add project_id validation in admin_zopk_news_add
- Add URL protocol validation (allow only http/https)
- Hide exception details from API responses (log instead)
- Add rate limiting (60/min) on public ZOPK routes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update navigation menu labels
- Update page titles and headings
- Update modal texts and notifications
- Keep internal class names (ZOPKNews, etc.) unchanged
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add company logo display in search results cards
- Make logo clickable (links to company profile)
- Temporarily hide "Aktualności i wydarzenia" section on company profiles
- Add scripts for KRS PDF download/parsing and CEIDG API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Search people by imiona/nazwisko with partial match (ILIKE)
- Display person cards with avatar, name, company count
- Show "Znaleziono X firm i Y osób"
- People section appears above companies if matches found
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New /osoba/<id> route for person detail page
- Shows company roles with links to company pages
- Displays portal data (email, phone) if user has account
- Tooltip shows all company connections (no "4 wiecej" limit)
- Click on person node navigates to profile instead of filtering
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- API: Count unique company_ids instead of all roles
- Tooltip: Show "X firmami (Y ról)" to distinguish companies from roles
- Bogdan Łaga has 6 unique companies with 9 roles (was showing 9 companies)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- API endpoint for connections graph visualization
- Include Person/CompanyPerson data in company profile
- Support for Zarząd, Wspólnicy, Prokurenci, JDG relationships
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fullscreen modal z panelem filtrów (zamiast osobnej strony)
- Filtry węzłów: Firmy, Osoby (checkboxy)
- Filtry powiązań: Zarząd, Wspólnicy, Prokurenci, JDG (checkboxy)
- Liczniki przy każdym filtrze (aktualizowane na bieżąco)
- Wyszukiwarka z autocomplete
- Etykiety ukryte domyślnie, widoczne przy hover
- D3.js v7 do wizualizacji grafu
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>