Commit Graph

261 Commits

Author SHA1 Message Date
f174f4d4da feat: Link Users to Persons (KRS data)
- 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>
2026-01-13 15:07:02 +01:00
1207a188f5 feat: Make person badge clickable (links to company profile)
- 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>
2026-01-13 15:03:11 +01:00
6593236547 fix: Use correct endpoint company_detail_by_slug
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 15:00:55 +01:00
158c305f09 feat: Clickable attendee badges in calendar events
- 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>
2026-01-13 14:57:11 +01:00
709c20c48e fix: AI response precision and list formatting
- 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>
2026-01-13 14:55:06 +01:00
d3f773c403 feat: Improve AI response formatting and NordaGPT minimize
- 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>
2026-01-13 14:51:45 +01:00
91e42dd668 fix: Make entire NordaGPT banner clickable with hover effect
- 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>
2026-01-13 14:41:50 +01:00
e87c0556f8 fix: Use correct API endpoints for NordaGPT chat
- 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>
2026-01-13 14:40:42 +01:00
f84f821f3c feat: Add NordaGPT chat banner on homepage
- 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>
2026-01-13 14:38:56 +01:00
3bcff9a2d3 feat: Add SEO audits (PageSpeed) to AI chat context
- 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>
2026-01-13 14:33:12 +01:00
1894272670 fix: Handle Markdown link syntax in AI chat responses
- 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>
2026-01-13 14:19:18 +01:00
c0fa157c09 feat: Add links to AI chat context (GBP, social media, company profiles)
- 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>
2026-01-13 14:05:00 +01:00
83b52a1b24 feat: Add clickable email addresses and fix URL trailing punctuation in AI chat
- 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>
2026-01-13 13:41:23 +01:00
a5c8e9b585 feat(chat): Make URLs in AI responses clickable
- 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>
2026-01-13 13:36:55 +01:00
0050cd1fdf feat(chat): Add KRS people, social media, and GBP audits to AI context (Stage 3)
- 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>
2026-01-13 13:32:23 +01:00
44407cf32e feat(chat): Add calendar, B2B board, and forum to AI context (Stage 2)
- 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>
2026-01-13 13:25:47 +01:00
819273bb58 feat(chat): Add recommendations and news to AI chat context
- 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>
2026-01-13 13:19:23 +01:00
ffc6d8219f feat: Add toggle button to hide/show test items on B2B board
- 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
2026-01-13 13:08:11 +01:00
e7d32b6b06 feat: Add toggle button to hide/show test topics on forum
- Yellow 'Ukryj testowe' button in filters bar
- Hides all test-topic cards when clicked
- Persists preference in localStorage
- Updates topic count when toggled
2026-01-13 11:53:00 +01:00
08d6c0b069 feat: Add 'test' category for forum topics to separate test content
- 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
2026-01-13 11:48:08 +01:00
8c1f5da5f2 feat: Display attendees vertically, alphabetically, with company names 2026-01-13 11:39:16 +01:00
f3a9a6da1d feat: Add quick RSVP from homepage banner
- Click 'Zapisz się' button to register immediately
- Counter updates visually before redirect
- Then redirects to event details page
- Shows loading state during request
2026-01-13 11:12:36 +01:00
dfed9ca941 feat: Make entire event banner clickable
- Changed banner from div to anchor tag
- Added hover effect (lift + brightness)
- Easier to click for accessibility
2026-01-13 11:07:28 +01:00
85ce81a0ba fix: Remove nested style tags from index.html extra_css block
base.html already wraps extra_css in <style> tags, so adding them
in child templates causes invalid nested <style> which breaks CSS parsing
2026-01-13 11:04:35 +01:00
6bdce817db fix: Improve event banner title link visibility
- Add arrow indicator after title
- Use transform animation on hover instead of underline
2026-01-13 11:00:42 +01:00
0c141a3f40 feat: Make event banner title clickable
Link to event detail page from homepage banner title
2026-01-13 10:59:16 +01:00
1a1e5f6cf1 fix: Add Polish diacritics to calendar templates
- 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ń
2026-01-13 10:57:08 +01:00
7340337ec5 feat: Add event banner on homepage - "Kto weźmie udział?"
- 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>
2026-01-13 10:40:04 +01:00
2a4408327b feat: Add monthly grid view for calendar
- Add view toggle (List/Calendar) to calendar toolbar
- Implement monthly grid view with CSS Grid layout
- Add month navigation (previous/next)
- Color-coded event types (meeting, networking, webinar, other)
- Highlight today's date and weekends
- Polish month names
- Responsive design for mobile

URL params: ?view=grid&year=2026&month=1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 10:28:15 +01:00
9eae623d3e feat: Add source tracking to events + import scripts
- 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>
2026-01-13 10:22:24 +01:00
6688b717cf docs: Update release notes - 80 companies audited
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 12:20:56 +01:00
22ff4d901a docs: Add Polish category translation to release notes v1.14.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 11:46:03 +01:00
66fe43081e fix: Add Polish characters to release notes v1.11.0-v1.14.0
- Fix missing Polish diacritics (ą, ę, ó, ś, ć, ł, ż, ź)
- Affected versions: v1.11.0, v1.12.0, v1.13.0, v1.14.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 11:40:38 +01:00
c4d6f12840 fix: Translate Google Place types to Polish in GBP audit
- 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>
2026-01-12 10:22:39 +01:00
f28ea804d2 docs: Add release notes v1.14.0 - Audit improvements
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>
2026-01-12 10:05:49 +01:00
df9ac2a1e5 feat: Add educational section about Google Business Profile to GBP audit page
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>
2026-01-12 10:01:52 +01:00
c3d86c996a fix: Add unique constraint on ZOPKStakeholder.name to prevent duplicates
- 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>
2026-01-12 09:52:33 +01:00
6f17ef5dfd fix: Generate Google Maps URL from place_id when google_maps_url is missing
- 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>
2026-01-11 23:41:44 +01:00
772d4e7453 feat: Add link to Google Business Profile from GBP audit page
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>
2026-01-11 23:37:48 +01:00
b06db9cb60 fix: Update CSS classes to match unified color scale
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>
2026-01-11 23:28:30 +01:00
18939afc7e feat: Unified 5-level color scale for all audits
Implemented consistent color scale across all audit types:
- 90-100%: Green (#10b981) - Doskonaly
- 70-89%: Lime (#84cc16) - Dobry
- 50-69%: Amber (#f59e0b) - Przecietny
- 30-49%: Orange (#f97316) - Wymaga poprawy
- 0-29%: Red (#ef4444) - Slaby

Updated files:
- company_detail.html: All 4 audit banners (SEO, GBP, Social, IT)
- seo_audit.html: Score circle colors
- gbp_audit.html: Score circle colors
- social_audit.html: Score circle colors
- it_audit.html: Score circle colors

This ensures visual consistency between company profile cards
and detailed audit pages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 23:24:06 +01:00
337994ed3a fix: Social Media score as percentage, SEO score consistency
- 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>
2026-01-11 23:18:50 +01:00
1fd056255d feat: Make audit score banners clickable links to detailed pages
- 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>
2026-01-11 23:14:40 +01:00
986360f7d5 feat: Add URL normalization and inline audit sections
- 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>
2026-01-11 23:07:03 +01:00
91fea3ba2c security: Fix critical vulnerabilities in ZOP Kaszubia module
- 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>
2026-01-11 21:07:13 +01:00
9a527febf3 fix: Use direct color values for action buttons (--danger was undefined) 2026-01-11 15:56:46 +01:00
bf7cb6a76b fix: Add table wrapper for horizontal scroll - show Odrzuć button 2026-01-11 15:52:34 +01:00
26e6658e6d fix: Ensure Odrzuć button is visible in ZOP Kaszubia news table 2026-01-11 15:49:30 +01:00
c9bde4f67d docs: Update release notes - ZOP Kaszubia rename 2026-01-11 15:45:18 +01:00
200987b295 refactor: Rename ZOPK to ZOP Kaszubia in user-facing text
- 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>
2026-01-11 15:41:18 +01:00