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>
- Added proper Polish characters (ą, ę, ó, ł, ś, ć, ż, ź, ń)
- Improved header contrast with darker gradient and text-shadow
- Added meta charset UTF-8 for proper encoding
- Fixed warning box text color for better readability
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously showed "InPi Notifications" which was confusing.
Now emails will display as "Norda Biznes Hub <noreply@inpi.pl>"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add EmailLog model to database.py for tracking sent emails
- Modify email_service.py to log all sent emails to database
- Track email type (welcome, password_reset, notification)
- Record sender, recipient, subject, status, timestamps
- Supports monitoring email delivery success/failure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Company.category is a relationship, not a column
- Use Company.category_id for grouping and filtering
- Load category names via separate query to Category table
Fixes 500 error on /raporty/struktura-branzowa
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add .label('category') to SQLAlchemy query for proper Row attribute access
- Change filter_by to filter() for better NULL handling
Fixes 500 error on /raporty/struktura-branzowa
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>
- Changed all "Chat AI" labels to "NordaGPT" in navigation menus
- Updated dashboard quick links
- NordaGPT is now the official product name for AI assistant
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added regex to convert [text](url) markdown links to <a> tags
- Updated raw URL regex with lookbehind/lookahead to avoid duplicate links
- Links now display as clickable text instead of raw markdown syntax
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed AI model from Gemini 2.0 Flash to Gemini 2.5 Flash-Lite
- Added info button next to model badge in chat header
- Created modal with technical specs and development history timeline
- Benefits: 8x longer responses (65k tokens), 4x daily limit (1000 RPD)
- Model remains FREE (Free Tier)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Endpointy /api/chat/start i /api/chat/{id}/message
wymagały tokenu CSRF, co blokowało żądania z JavaScript.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Zamiast otwierać modal, kliknięcie w banner NordaGPT
przenosi bezpośrednio do strony /chat z historią rozmów.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Element emptyState może nie istnieć po załadowaniu poprzedniej rozmowy.
Dodano sprawdzenie if (emptyState) przed ustawieniem style.display.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano API /api/chat/conversations (lista konwersacji użytkownika)
- Dodano API DELETE /api/chat/<id>/delete (usuwanie konwersacji)
- Przebudowano chat.html z sidebarem historii (styl ChatGPT)
- Sidebar z listą konwersacji, przyciski "Nowa rozmowa" i usuwania
- Responsywny design dla mobile (toggle sidebar)
- Integracja ze stylem NordaGPT (purple gradient header)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Zmieniono company.category na company.category.name
(category to relacja do obiektu Category, nie string)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Zmieniono url_for('company_detail', slug=...) na
url_for('company_detail', company_id=...) we wszystkich raportach.
Route company_detail wymaga company_id, nie slug.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano link Raporty w menu nawigacyjnym (dla zalogowanych)
- Utworzono 3 raporty generowane w czasie rzeczywistym:
- Staż członkostwa w Izbie NORDA
- Pokrycie Social Media (6 platform)
- Struktura branżowa (kategorie firm)
- Dodano dokumentację strategii monetyzacji 3-tier pricing
- Release notes v1.18.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed card color from blue to green (#10b981)
- Added "Źródło: Izba NORDA" text below years count
- Consistent styling with other legal info cards
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Data przystąpienia do Izby NORDA (member_since)
- Karta "Członek Izby NORDA od" z datą i stażem w latach
- Import 57 firm z historią od 1997 roku
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Nowa kolumna member_since w tabeli companies
- Karta "Członek Izby NORDA od" na profilu firmy (niebieski kolor #3b82f6)
- Wyświetlanie liczby lat w Izbie
- Import 57 dat przystąpienia z pliku Excel od Artura
- Skrypt import_member_since.py do importu dat
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Frontend was reading data.data.seo_score but API returns
data.seo_audit.pagespeed.seo_score. Fixed path to show
actual scores instead of dashes in batch audit progress.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Batch SEO audit was stopping after 10 companies due to
restrictive rate limit. Increased to 200/hour to allow
full batch processing of all companies.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Search Brave API for company news and web results
- Fetch company website content with BeautifulSoup
- Combine all sources (database, Brave, website) in AI prompt
- Return source usage info in API response
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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>