Parses emoji-sectioned text (ZARZĄD, WSPÓLNICY, DANE REJESTROWE,
DANE FINANSOWE, PROFIL) into card-based layout with icons, lists,
and highlighted key-value pairs. Plain text gets newline conversion.
HTML from Quill editor passes through unchanged.
Affects 45 companies with emoji format, 63 with plain text.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pinned conversations show red pushpin. On hover, pin button fades
to gray to indicate "unpin" action. Unpinned items show red on
hover to indicate "pin" action.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The generic .conversation-item svg rule was overriding the pin icon
color with gray. Added specific selector with !important to ensure
the pushpin displays in dark navy (#1e3050).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Pin icon changed to classic pushpin in navy blue (matching theme)
- Conversation titles now show up to 2 lines instead of truncating
- Sidebar is resizable via drag handle (200-500px range)
- Sidebar is collapsible with toggle button (state persisted)
- Width preference saved to localStorage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Users can now pin favorite conversations (shown at top with section header)
and rename them with inline editing. Adds is_pinned, pinned_at, custom_name
columns to ai_chat_conversations table.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Panel ZOPK accessible via admin bar. Stats (0 Projekty, 7
Interesariusze, 203 Aktualności, 0 Materiały) removed — raw
numbers without context confuse users. News stats bar also hidden.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hide: knowledge stats (facts/entities/chunks), fact types chart,
top entities, key investments, knowledge timeline, knowledge graph.
These are dev/admin tools available in /admin/zopk.
Also hide empty "Projekty strategiczne" section when no projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Purple -> navy blue (#1a365d) for professional look.
Source links have hover states. Contact cards show LinkedIn
profiles and PEJ office phone/email.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
YouTube iframes blocked by CSP, pej.pl blocks hotlinking.
Videos now show as clickable thumbnail cards with play button.
Infographics downloaded to static/images/pej/.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two YouTube videos (virtual tour, project overview) and two
infographics from pej.pl (reactor components, construction timeline).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
localStorage-based tracking. Clicked articles get dimmed with
green left border and "przeczytane" badge. Counter shows how
many articles on current page have been read.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Supplier registration (dostawcy@pej.pl, pz.pej.pl, PPJ),
PEJ leadership contacts, official project websites,
social media links, and news portals.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
.contains() generates LIKE which fails on PG arrays.
Use .op('@>')(pg_array(...)) pattern matching existing codebase.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The codebase uses SessionLocal() with try/finally pattern,
not db_session. Import error broke all blueprint registration.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Main NAV: replace Kaszubia/Więcej with "Projekty" dropdown (Kaszubia, PEJ).
Remove Social (beta) and Korzyści from main NAV (already in admin bar).
Add "Narzędzia" dropdown to admin bar (Kontakty, Raporty, Mapa Powiązań).
Admin nav reduced from 13 to 10 items.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 tasks across 4 chunks: backend routes, templates, nav
reorganization, and verification/deploy. Includes fixes from
spec and plan reviews (field names, endpoint aliases, diacritics).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hybrid "lens" approach — PEJ section filters existing ZOPK data
by nuclear project IDs, adding dedicated routes, templates, and
CSV export without new database tables.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Email clients (Gmail, Outlook, Apple Mail) don't support CSS
linear-gradient(), causing white text on white background — company
name, header title, and CTA button were invisible.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Keep AI-generated descriptions visible but remove clickability until
project detail pages have real content (news tagged to projects).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Companies matched to ZOPK projects (score >= 40) now see a green
"Zielony Okrąg Przemysłowy Kaszubia" section on their profile with:
- Project name, type icon, and link type badge
- AI-generated collaboration description explaining relevance
- Relevance score percentage
- Links to project detail pages
- Hover effects for interactivity
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add /api/zopk-facts endpoint returning paginated facts from distinct
source articles, ordered by recency
- Add "Pokaż więcej" button with AJAX loading and fade-in animation
- New cards are clickable with same hover effect as initial ones
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace broken distinct() call with group_by() and add db.rollback()
in except handler to prevent failed transaction from cascading.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pick one fact from each of the 3 most recent distinct articles
instead of 3 facts from the same article.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cards now link to source article, show hover highlight and
"Czytaj →" indicator. Cursor changes to pointer on hover.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uses Gemini AI to analyze each company's profile (PKD codes, services,
descriptions, AI insights) against 5 ZOPK projects and generate
relevance scores with collaboration descriptions in Polish.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Change from random() to published_at DESC — show newest, most
relevant facts instead of random old ones
- Translate fact type labels to Polish (investment→inwestycja,
decision→decyzja, event→wydarzenie, etc.)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Enable "Czy wiesz, że..." ZOPK facts widget on homepage for all
logged-in users (was admin-only and disabled with {% if False %})
- Add "Oś czasu" button to ZOPK admin dashboard navigation (was
only accessible from public /zopk page edit links)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Source servers return 503 (Cloudflare) for cross-origin image requests
from browsers. Solution: download and cache images server-side during
scraping, serve from /static/uploads/zopk/.
- Scraper now downloads og:image and stores locally during article
scraping (max 2MB, supports jpg/png/webp)
- Backfill script downloads images for all existing articles server-side
- Template fallback shows domain initial letter when image unavailable
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add referrerpolicy="no-referrer" to img tags to bypass hotlink
protection on source servers
- Replace Google Favicons fallback (blocked) with inline domain
initial letter in green placeholder
- Consistent styling across index and news_list templates
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>