Commit Graph

430 Commits

Author SHA1 Message Date
59c50e0267 fix: Handle None values in SEO audit result extraction
Bug: When page fetch fails (SSL error), result['onpage'] is None.
Using dict.get('key', {}) returns None when key exists with None value.

Fix: Use 'or {}' pattern to handle both missing keys and None values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:20:19 +01:00
d722fdb71e feat: Add detailed progress modal for AI enrichment
- New modal with animated progress bar and percentage
- Step-by-step log showing:
  - Initialization
  - Data collection
  - AI prompt preparation
  - Gemini API call
  - Response parsing
  - Results summary (services, USPs, tags, etc.)
- Cancel button with AbortController support
- Success/error states with appropriate icons
- Footer with "Close" and "Refresh page" buttons

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:12:04 +01:00
35d53665e3 feat: Add AI enrichment button on company profile
- Add "Wzbogac dane AI" button visible to all users
- Button enabled only for admins and company owners
- New API endpoint POST /api/company/<id>/enrich-ai
- Integrates with Gemini AI to generate:
  - Business summary
  - Services list
  - Target market
  - Unique selling points
  - Company values
  - Certifications
  - Industry tags
- Rate limited to 5 requests/hour per user
- Results saved to CompanyAIInsights table

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:07:52 +01:00
a916b297c7 feat: Add progress bar for batch SEO audit
- Progress section with bar and percentage
- Real-time log showing each company being processed
- Score display with color indicators (🟢🟡🔴)
- Cancel button to stop audit mid-process
- Summary at the end with success/failed/skipped counts
- 500ms delay between requests to avoid API overload

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:55:17 +01:00
0d2b26031d fix: Extract all PKD codes from KRS PDF (not just main one)
- Rewrite PKD extraction to find all codes in the section
- Primary regex finds PKD section first, then extracts codes
- Fallback regex for edge cases
- Deduplicate PKD codes (same code may appear in different 'wpis')
- Clean up multi-line descriptions
- LENAP now shows 33 PKD codes (was showing only 1)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:51:31 +01:00
5ded53a2c0 feat: Display all PKD codes on company detail page
- Show all PKD codes from KRS audit (not just main one)
- Primary PKD highlighted with 'GŁÓWNY' badge
- Secondary PKDs listed below with descriptions
- Fallback to CEIDG data if no KRS audit data
- Shows source (eKRS or CEIDG) and total count

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:46:35 +01:00
4e4b3f4ef0 feat: Add sortable columns and PKD display in KRS Audit panel
- All columns now sortable (click header to sort asc/desc)
- PKD codes displayed with primary code highlighted (★)
- Show first 2 PKD codes, click '+N more' for tooltip with all
- Backend returns full PKD codes list instead of just count

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:28:09 +01:00
bd23238c1a fix: Increase rate limit and add missing fields to KRS audit API
- Increase rate limit from 20/hour to 200/hour for batch operations
- Add nip, regon, liczba_udzialow, prokurenci_count to API response

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:16:16 +01:00
b26dafa0f1 fix: Fix company name selector in batch audit 2026-01-13 17:12:55 +01:00
492a7ea0eb feat: Improve batch KRS audit with detailed progress
- Process companies one by one with real-time progress
- Show detailed info for each company:
  - NIP, REGON
  - Kapitał, udziały
  - Zarząd, wspólnicy, prokurenci
  - PKD count
- Add data-company-id attribute to table rows
- Style improvements for log entries

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:11:06 +01:00
a2f9025aad feat: Add progress bar with stages for single KRS audit
Shows visual progress:
- Wyszukiwanie pliku PDF
- Pobieranie danych z PDF
- Parsowanie odpisu KRS
- Zapisywanie do bazy
- Wyniki z szczegółami

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:07:37 +01:00
fa8645dc26 fix: Handle date objects in JSON serialization for KRS audit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:05:14 +01:00
3069a232ca fix: Convert Decimal to float for JSONB serialization in KRS audit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:01:02 +01:00
a909af4754 fix: Add missing Path import for KRS audit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:57:58 +01:00
f323b9a90d fix: Add KRS Audit link to admin menu
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:50:51 +01:00
de52e6991c feat: Add KRS Audit panel with full PDF parsing
- New admin panel /admin/krs-audit for KRS data extraction
- Full PDF parser extracting: company data, capital, shares, PKD codes,
  management board, shareholders, procurators, financial reports
- API endpoints for single/batch audits and PDF download
- Company profile shows "Odpis PDF" button and last audit date
- Database migration for krs_audits, company_pkd, company_financial_reports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:46:54 +01:00
11c49ad937 refactor: Reorder company profile sections
Move sections to new order:
1. Zarząd i Wspólnicy (people info first)
2. Właściciel JDG
3. Informacje prawne i biznesowe
4. Dane kontaktowe (contact info last)
5. Social Media

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:20:51 +01:00
abe1cd38a1 feat: Add PKD codes and CEIDG owner data to company profiles
- Add pkd_code, pkd_description columns for business activity classification
- Add business_start_date column from CEIDG
- Add owner_first_name, owner_last_name for JDG companies
- Create import script scripts/import_ceidg_to_db.py
- Add PKD card display in company profile template
- Add owner section for JDG companies without KRS
- Track SQL migrations in git (database/migrations/*.sql)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:07:03 +01:00
93695209d0 feat: Green badge for verified persons, blue for unverified
- Verified (has person_id): green background, clickable
- Unverified (no person_id): blue background, not clickable

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 15:09:51 +01:00
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