- Add person_id column to users table
- Template shows person profile link when person_id exists
- Add script to match and link users to persons by name
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Person with company: both badges link to company profile
- Person without company: non-clickable badge
- Added hover effects for person badge
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Person badge: blue background with user icon
- Company badge: red/pink background, clickable link to company profile
- Hover effects on company badge
- Applied system-wide to all calendar events
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add explicit instruction to give EXACT number requested
- Change list format to single-line items (prevents numbering reset)
- Show correct vs incorrect format examples in prompt
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add comprehensive formatting instructions to AI system prompt
- Update linkifyText() and linkifyNordaGPT() to parse markdown:
- **bold** to <strong>
- Newlines to <br>
- Numbered lists (1. 2. 3.) to <ol>
- Bullet lists (- *) to <ul>
- Add CSS styles for AI response lists
- Fix NordaGPT minimize: banner now pulses and shows active state
- Banner button changes to "Wznów chat" when minimized
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Entire banner is now clickable (onclick on div)
- Added hover effect (translateY, shadow, brightness)
- Changed input/button to spans for cleaner click handling
- Fixed title element ID reference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Step 1: POST /api/chat/start to create conversation
- Step 2: POST /api/chat/<id>/message to send messages
- Fixed response field from 'response' to 'message'
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Purple-themed banner similar to event banner style
- Click to expand to fullscreen chat modal
- Minimize button returns to banner (shows "Chat aktywny")
- Close button resets chat
- Uses existing /api/chat endpoint
- Typing indicator animation
- Link/email auto-linking in responses
- Escape key minimizes, click outside minimizes
- Only visible for authenticated users
Also includes SEO audits in AI context (from previous work)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Import CompanyWebsiteAnalysis model
- Query PageSpeed scores: SEO, performance, accessibility, best practices
- Add SEO audits description to system prompt
- Include website URLs and profile links
- AI can now answer questions about website SEO scores
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Parse [text](url) Markdown links before plain URL conversion
- Use placeholder approach for cross-browser compatibility
- Prevents double-linkification of URLs in Markdown format
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- GBP audits: added maps_url (Google Maps) and profile_url
- Social Media: added url field for each platform
- Companies: added profile link to nordabiznes.pl
- Updated AI instructions to always include links in responses
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Email addresses now become mailto: links
- URLs properly strip trailing punctuation (comma, period, etc.)
- Both link types handle trailing punctuation gracefully
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>