nordabiz/CLAUDE.md
Maciej Pienczyn a57187e05f
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
test: Add comprehensive testing infrastructure
- pytest framework with fixtures for auth (auth_client, admin_client)
- Unit tests for SearchService
- Integration tests for auth flow
- Security tests (OWASP Top 10: SQL injection, XSS, CSRF)
- Smoke tests for production health and backup monitoring
- E2E tests with Playwright (basic structure)
- DR tests for backup/restore procedures
- GitHub Actions CI/CD workflow (.github/workflows/test.yml)
- Coverage configuration (.coveragerc) with 80% minimum
- DR documentation and restore script

Staging environment: VM 248, staging.nordabiznes.pl

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 07:52:34 +01:00

635 lines
20 KiB
Markdown

# Norda Biznes Partner - Instrukcje dla Claude
## Opis projektu
Platforma katalogowa i networkingowa dla członków stowarzyszenia Norda Biznes z Wejherowa.
- **Produkcja:** https://nordabiznes.pl
- **Status:** LIVE (od 2025-11-23)
- **Firmy:** 150 podmiotów gospodarczych (cel)
## Struktura projektu
```
nordabiz/
├── app.py # Główna aplikacja Flask (routes, auth, API)
├── database.py # Modele SQLAlchemy (Company, User, Chat)
├── gemini_service.py # Integracja Google Gemini AI
├── nordabiz_chat.py # Silnik chatu AI z kontekstem firm
├── search_service.py # Unified SearchService (synonimy, FTS, fuzzy)
├── templates/ # Szablony Jinja2
├── static/ # CSS, JS, obrazy
├── database/ # Schematy SQL, migracje
├── data/ # Dane źródłowe JSON
├── tests/ # Testy jakości AI
├── scripts/ # Narzędzia Python/Node.js
└── docs/ # Dokumentacja
├── architecture/ # Architektura systemu (C4, flows)
├── DEVELOPMENT.md # Szczegóły deweloperskie
├── ROADMAP.md # Plan rozwoju, monetyzacja
├── CREDENTIALS.md # Zasady zarządzania credentials
└── INCIDENT_REPORT_*.md
```
## Dokumentacja
| Dokument | Zawartość |
|----------|-----------|
| `docs/architecture/` | Architektura C4, schematy bazy, API, flows |
| `docs/DEVELOPMENT.md` | SearchService, Chatbot, Testy AI, SEO, News |
| `docs/ROADMAP.md` | Plan rozwoju, priorytety, monetyzacja |
| `docs/CREDENTIALS.md` | Zarządzanie hasłami i kluczami API |
**⚠️ WAŻNE:** Przed zmianami w NPM/proxy przeczytaj `docs/architecture/08-critical-configurations.md`
## Technologie
| Warstwa | Technologia |
|---------|-------------|
| Backend | Flask 3.0, SQLAlchemy 2.0, Python 3.9+ |
| Frontend | HTML5, CSS3, Vanilla JS, Jinja2 |
| Baza danych | PostgreSQL (prod i dev via Docker) |
| AI | Google Gemini 3 Flash (free tier) |
| Security | Flask-Login, Flask-WTF (CSRF), Flask-Limiter |
## Środowiska
### Development (lokalne)
- **Baza:** PostgreSQL via Docker (`localhost:5433/nordabiz`)
- **Port:** 5000 lub 5001
- **Uruchomienie:** `python3 app.py`
- **Docker DB:** `docker compose up -d` (jeśli nie działa)
### Staging (NOWE - 2026-02-02)
- **Serwer:** NORDABIZ-STAGING-01 (VM 248, IP 10.22.68.248)
- **Baza:** PostgreSQL `nordabiz_staging` na 10.22.68.248:5432
- **Domena:** staging.nordabiznes.pl
- **NPM Proxy Host ID:** 44
- **SSL:** Let's Encrypt (ważny do 2026-05-03)
**Cel:** Testowanie zmian przed wdrożeniem na produkcję (E2E, integration tests)
**Weryfikacja:**
```bash
curl -I https://staging.nordabiznes.pl/health
ssh maciejpi@10.22.68.248
```
### Production
- **Serwer:** NORDABIZ-01 (VM 249, IP 10.22.68.249)
- **Baza:** PostgreSQL na 10.22.68.249:5432
- **Reverse Proxy:** NPM na R11-REVPROXY-01 (VM 119, IP 10.22.68.250)
- **Domena:** nordabiznes.pl (DNS w OVH)
- **SSL:** Let's Encrypt (auto-renewal)
### NPM Proxy Configuration (KRYTYCZNE!)
**Proxy Host ID:** 27
**Forward Port:** 5000 (NIE 80!)
```
PRAWIDŁOWA KONFIGURACJA:
NPM (10.22.68.250) → Backend (10.22.68.249:5000) ✓
BŁĘDNA KONFIGURACJA (powoduje pętlę przekierowań):
NPM (10.22.68.250) → Backend (10.22.68.249:80) ✗
```
**UWAGA:** Na serwerze 10.22.68.249 działa nginx na porcie 80 który przekierowuje na HTTPS.
Flask/Gunicorn działa na porcie 5000. Przy edycji proxy hosta ZAWSZE sprawdź czy port = 5000!
**Weryfikacja po zmianach NPM:**
```bash
curl -I https://nordabiznes.pl/health
# Oczekiwany: HTTP 200
```
**Raport incydentu:** `docs/INCIDENT_REPORT_20260102.md`
## Git & Deployment
### Repozytoria Git
| Remote | URL | Cel |
|--------|-----|-----|
| **origin** (GitHub) | `git@github.com:pienczyn/nordabiz.git` | Cloud backup, CI/CD ready |
| **inpi** (Gitea) | `git@10.22.68.180:maciejpi/nordabiz.git` | Wewnętrzny backup, deploy source |
**Konta:** GitHub: `pienczyn`, Gitea: `maciejpi`
### Workflow Deployment
```
┌─────────┐ git push ┌─────────┐ git pull ┌─────────┐
│ DEV │ ────────────► │ Gitea │ ◄──────────── │ PROD │
│ (Mac) │ │ (INPI) │ │ │
└─────────┘ └─────────┘ └─────────┘
└──── git push ────► GitHub (backup)
```
### Procedura wdrażania (WAŻNE!)
```bash
# 1. DEV: Push do obu repozytoriów
git push origin master && git push inpi master
# 2. PROD: Pull zmiany
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && sudo -u www-data git pull"
# 3. PROD: Uruchom migracje SQL (jeśli są)
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && /var/www/nordabiznes/venv/bin/python3 scripts/run_migration.py database/migrations/XXX_nazwa.sql"
# 4. PROD: Restart serwisu
ssh maciejpi@10.22.68.249 "sudo systemctl restart nordabiznes"
# 5. Weryfikacja
curl -sI https://nordabiznes.pl/health | head -3
```
**⚠️ UWAGI KRYTYCZNE:**
1. **Migracje SQL** - NIE używaj `psql` bezpośrednio. Użyj `scripts/run_migration.py`
2. **Uprawnienia logów** - Jeśli błąd `Permission denied: /var/log/nordabiznes/*`:
```bash
ssh maciejpi@10.22.68.249 "sudo chown -R maciejpi:maciejpi /var/log/nordabiznes/"
```
3. **502 po restarcie** - Poczekaj 3-5 sekund i sprawdź ponownie
4. **Git pull** - Używaj `sudo -u www-data git pull` (www-data ma klucze SSH)
**Uruchamianie skryptów na produkcji (KRYTYCZNE!):**
- SSH timeout NIE oznacza że komenda nie została wykonana!
- ZAWSZE sprawdź czy poprzedni proces nie działa: `ps aux | grep <skrypt>`
- Dla długich operacji używaj `nohup` lub `screen`
- Incydent: `docs/INCIDENT_REPORT_20260115.md`
**Uruchamianie skryptów Python z dostępem do bazy (WAŻNE!):**
Skrypty Python wymagające dostępu do bazy danych MUSZĄ mieć ustawiony `DATABASE_URL`.
Plik `.env` NIE jest automatycznie wczytywany przez `source .env` - to nie działa w kontekście SSH!
```bash
# ✅ PRAWIDŁOWO - ustaw DATABASE_URL bezpośrednio:
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && \
DATABASE_URL='postgresql://nordabiz_app:HASŁO@127.0.0.1:5432/nordabiz' \
/var/www/nordabiznes/venv/bin/python3 skrypt.py"
# ✅ PRAWIDŁOWO - pobierz DATABASE_URL z .env:
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && \
DATABASE_URL=\$(grep DATABASE_URL .env | cut -d'=' -f2) \
/var/www/nordabiznes/venv/bin/python3 skrypt.py"
# ❌ BŁĘDNIE - source .env nie działa przez SSH:
ssh maciejpi@10.22.68.249 "source .env && python3 skrypt.py"
```
**Hasło do bazy (produkcja):** W pliku `/var/www/nordabiznes/.env` (DATABASE_URL)
## Auto Claude - Rozwiązywanie problemów
### Pliki stanu (NIE COMMITOWAĆ!)
- `.auto-claude-security.json`, `.auto-claude-status`, `.auto-claude/`
- Są w `.gitignore` + pre-commit hook automatycznie je usuwa ze staging
### Konflikty merge z Auto Claude
```bash
# 1. Sprawdź konflikt
git status
# 2. Usuń pliki Auto Claude z merge
git rm .auto-claude-security.json .auto-claude-status
# 3. Dokończ merge
git commit -m "Merge branch 'feature' - resolve Auto Claude file conflicts"
```
### Worktrees
```bash
git worktree list # Lista aktywnych
git worktree remove .auto-claude/worktrees/tasks/<task-id> # Usuń nieaktualny
git branch -d auto-claude/<task-id> # Usuń branch
```
## Konwencje danych
### Identyfikatory firm
- **Slug:** kebab-case, np. `pixlab-sp-z-o-o`
- **NIP:** 10 cyfr bez myślników
- **REGON:** 9 lub 14 cyfr
- **KRS:** 10 cyfr (tylko spółki)
### Kategorie firm
`IT`, `Construction`, `Services`, `Production`, `Trade`, `Other`
### Poziomy jakości danych
`basic`, `enhanced`, `complete`
## Ważne zasady
### Bezpieczeństwo
- NIE edytuj bezpośrednio bazy produkcyjnej PostgreSQL
- Testuj zmiany na DEV (Docker: localhost:5433) przed wdrożeniem
- Klucze API i hasła tylko w `.env` (nigdy w kodzie)
- Rate limiting: 200 req/dzień, 50 req/godzinę
**Panel bezpieczeństwa:** `/admin/security`
- 2FA, CSRF, HTTPS, GeoIP Blocking, Rate Limiting, Account Lockout, Audit Log
### Zarządzanie credentials (KRYTYCZNE!)
**NIGDY nie umieszczaj haseł w kodzie źródłowym!**
```python
# ✅ PRAWIDŁOWO:
DATABASE_URL = os.getenv('DATABASE_URL')
# ❌ BŁĘDNIE:
DATABASE_URL = 'postgresql://user:password123@localhost/db'
```
- Wszystkie sekrety w `.env` (nigdy w `.py`, `.sh`, `.js`)
- Fallback jako placeholder: `CHANGE_ME` (nie prawdziwe hasło!)
**Pełne zasady:** `docs/CREDENTIALS.md`
### Deployment
- Przed wdrożeniem: `python -m py_compile app.py`
- SSH do NORDABIZ-01: `ssh maciejpi@10.22.68.249` (ZAWSZE jako maciejpi!)
- Ścieżka aplikacji: `/var/www/nordabiznes`
- Restart: `sudo systemctl restart nordabiznes`
- **ZAWSZE** aktualizuj historię zmian (`release_notes` w app.py)
### Szablony Jinja2 - WAŻNE!
- Blok `{% block extra_js %}` w `base.html` jest już wewnątrz `<script>`
- **NIE DODAWAJ** własnych tagów `<script>` w `extra_js`!
- Prawidłowo: `{% block extra_js %}function foo() {...}{% endblock %}`
### Uprawnienia PostgreSQL
- Po utworzeniu tabel: `GRANT ALL ON TABLE ... TO nordabiz_app`
- Po utworzeniu sekwencji: `GRANT USAGE, SELECT ON SEQUENCE ... TO nordabiz_app`
## Infrastruktura testowa (NOWE - 2026-02-02)
### Uruchamianie testów lokalnie
```bash
# Wszystkie testy
pytest tests/ -v
# Tylko unit testy
pytest tests/unit/ -v
# Tylko integration testy
pytest tests/integration/ -v
# Testy z coverage
pytest tests/ --cov=. --cov-report=html
```
### Struktura testów
```
tests/
├── conftest.py # Fixtures (app, client, auth_client, admin_client)
├── pytest.ini # Konfiguracja pytest
├── unit/ # Unit testy (bez bazy)
├── integration/ # Integration testy (z bazą)
├── security/ # OWASP security tests
├── smoke/ # Smoke testy produkcyjne
└── e2e/ # Playwright E2E (na staging)
```
### CI/CD (GitHub Actions)
Workflow: `.github/workflows/test.yml`
| Job | Trigger | Środowisko |
|-----|---------|------------|
| unit-tests | push/PR | GitHub runner |
| e2e-tests | po unit | staging.nordabiznes.pl |
| smoke-tests | master only | nordabiznes.pl |
### GitHub Secrets
| Secret | Użycie |
|--------|--------|
| STAGING_URL | E2E tests base URL |
| TEST_USER_EMAIL | Logowanie w testach |
| TEST_USER_PASSWORD | Logowanie w testach |
| TEST_DATABASE_URL | Integration tests |
### Testowanie na produkcji
**Konta testowe (PROD):**
| Konto | Email | Hasło | Rola |
|-------|-------|-------|------|
| Test User | `test@nordabiznes.pl` | `&Rc2LdbSw&jiGR0ek@Bz` | Użytkownik |
| Test Admin | `testadmin@nordabiznes.pl` | `cSfQbbwegwv1v3Q2Dm0Q` | Admin |
## API Endpoints (podstawowe)
| Endpoint | Opis |
|----------|------|
| `/` | Katalog firm |
| `/company/<slug>` | Profil firmy |
| `/search` | Wyszukiwanie |
| `/chat` | Chat AI |
| `/health` | Health check |
| `/admin/*` | Panele admina |
Pełna lista: `docs/architecture/10-api-endpoints.md`
## SearchService
Unified search dla chatbota i `/search`. Szczegóły: `docs/DEVELOPMENT.md#searchservice`
## Chatbot AI
- **Limit firm:** 8
- **Historia:** 10 wiadomości
Szczegóły: `docs/DEVELOPMENT.md#chatbot-ai`
## Powiązane zasoby
- **Źródło danych:** https://norda-biznes.info/czlonkowie
- **Backup:** Proxmox Backup Server (VM snapshots)
- **DNS wewnętrzny:** nordabiznes.inpi.local
## Disaster Recovery
**Pełna dokumentacja:** `docs/DR-PLAYBOOK.md`
### Metryki SLA
| Metryka | Wartość |
|---------|---------|
| **RTO** | 30-60 min |
| **RPO** | 1 godzina |
### Lokalizacje backupów
| Lokalizacja | Ścieżka | Retencja |
|-------------|---------|----------|
| Hourly (lokalnie) | `/var/backups/nordabiz/hourly/` | 24h |
| Daily (lokalnie) | `/var/backups/nordabiz/daily/` | 30 dni |
| Offsite (PBS) | `10.22.68.127:/backup/nordabiz/` | 30 dni |
| VM Snapshots | Proxmox | 3 snapshoty |
### Szybkie przywracanie
```bash
# Lista dostępnych backupów
ssh maciejpi@10.22.68.249 "ls -lt /var/backups/nordabiz/hourly/ | head -5"
# Restore z backupu
ssh maciejpi@10.22.68.249 "sudo /var/www/nordabiznes/scripts/dr-restore.sh /var/backups/nordabiz/hourly/nordabiz_YYYYMMDD_HH.dump"
# Weryfikacja
curl -I https://nordabiznes.pl/health
```
### Cron backupy (automatyczne)
```bash
# Backup co godzinę
0 * * * * postgres pg_dump -Fc nordabiz > /var/backups/nordabiz/hourly/nordabiz_$(date +\%Y\%m\%d_\%H).dump
# Backup dzienny
0 2 * * * postgres pg_dump -Fc nordabiz > /var/backups/nordabiz/daily/nordabiz_$(date +\%Y\%m\%d).dump
# Sync do PBS
0 4 * * * root rsync -avz /var/backups/nordabiz/daily/ maciejpi@10.22.68.127:/backup/nordabiz/daily/
```
Data wdrożenia: 2026-02-02
## Szablon profilu firmy
### Docelowa struktura (po optymalizacji)
```
1. Header (nazwa, kategoria, badge, krótki opis)
2. Pasek kontaktowy (www, email, telefon, lokalizacja)
3. O firmie (połączone opisy)
4. Usługi i kompetencje (połączone tagi)
5. Wyróżniki (połączone z wartościami)
6. Dane kontaktowe (pełne karty)
7. Informacje prawne i biznesowe
8. Social Media (wszystkie 6 platform)
9. Strona WWW (analiza techniczna)
```
**Szablon:** `templates/company_detail.html`
## News Monitoring
System monitoringu wzmianek o firmach w mediach. Panel: `/admin/news`
**Statusy:** `pending`, `approved`, `rejected`
Szczegóły: `docs/DEVELOPMENT.md#news-monitoring`
## ZOP Kaszubia News (ZOPK)
System monitoringu newsów projektu **Zielony Okręg Przemysłowy Kaszubia**.
Panel: `/admin/zopk/news`
### Tematy istotne
- Zielony Okręg Przemysłowy Kaszubia
- Elektrownia jądrowa (Lubiatowo-Kopalino)
- Offshore wind Bałtyk (Baltic Power, Baltica)
- Via Pomerania, Droga Czerwona
- Kongsberg (inwestycje w Rumi)
- Izba Przedsiębiorców NORDA
### Tematy do odrzucenia
- Turystyka na Kaszubach
- Polityka ogólnopolska
- Inne regiony Polski
- Wypadki, clickbait
### Reguły auto-approve (WAŻNE!)
**Próg: score >= 3**
| Score | Status |
|-------|--------|
| 1-2 | `pending` |
| 3-5 | `auto_approved` |
**Plik:** `zopk_news_service.py` (linie 890, 1124, 1145)
## Social Media
Panel audytu: `/admin/social-media`
Platformy: Facebook, Instagram, LinkedIn, YouTube, TikTok, Twitter
Szczegóły: `docs/DEVELOPMENT.md#social-media`
## Audyt SEO
Panel: `/admin/seo`
API: Google PageSpeed Insights
Szczegóły: `docs/DEVELOPMENT.md#audyt-seo`
## Dodatkowe rejestry (TODO - przyszłe integracje)
| Rejestr | Opis | API |
|---------|------|-----|
| **CRBR** | Centralny Rejestr Beneficjentów Rzeczywistych | https://crbr.podatki.gov.pl |
| **SUDOP** | System Udostępniania Danych o Pomocy Publicznej | https://sudop.uokik.gov.pl |
Rejestry te mogą dostarczyć dodatkowe dane o firmach (beneficjenci rzeczywiści, otrzymana pomoc publiczna).
## Plan rozwoju
Roadmap, priorytety i strategia monetyzacji: `docs/ROADMAP.md`
## Cykliczna aktualizacja danych ze stron www firm
### Mechanizm
Skrypt `scripts/website_content_updater.py` automatycznie:
1. Pobiera treść strony www każdej firmy członkowskiej
2. Używa **Gemini 3 Flash** (darmowy plan) do ekstrakcji:
- `services_extracted` - lista usług oferowanych przez firmę
- `main_keywords` - główne słowa kluczowe
- `content_summary` - krótkie podsumowanie działalności
3. Zapisuje do tabeli `company_website_analysis`
### Uruchamianie ręczne
```bash
# Wszystkie firmy
cd /var/www/nordabiznes
/var/www/nordabiznes/venv/bin/python3 scripts/website_content_updater.py
# Konkretna firma
/var/www/nordabiznes/venv/bin/python3 scripts/website_content_updater.py --company-id 26
# Tylko firmy nieaktualizowane 30+ dni
/var/www/nordabiznes/venv/bin/python3 scripts/website_content_updater.py --stale-days 30
# Podgląd bez zapisywania (dry-run)
/var/www/nordabiznes/venv/bin/python3 scripts/website_content_updater.py --dry-run
```
### Cron (automatyczne uruchamianie)
Uruchamiany **1-ego każdego miesiąca o 3:00** dla firm nieaktualizowanych 30+ dni:
```bash
# Dodaj do crontab na serwerze produkcyjnym:
sudo crontab -e
# Wpis:
0 3 1 * * cd /var/www/nordabiznes && /var/www/nordabiznes/venv/bin/python3 scripts/website_content_updater.py --stale-days 30 >> /var/log/nordabiznes/website_updater.log 2>&1
```
### Logi
Logi zapisywane do: `/var/log/nordabiznes/website_updater.log`
### Rate limiting
- **2 sekundy** przerwy między firmami (respektowanie limitów free tier Gemini)
- ~150 firm = ~5 minut na pełną aktualizację
Data wdrożenia: 2026-02-01
## NordaGPT - Konfiguracja AI
### Aktualny model (stan: 2026-01-29)
- **Model:** `gemini-3-flash-preview` (Gemini 3 Flash Preview)
- **SDK:** `google-genai>=1.0.0` (nowy SDK z thinking mode)
- **Inicjalizacja:** `app.py:286` - `gemini_service.init_gemini_service(model='3-flash')`
- **Silnik chatu:** `nordabiz_chat.py` używa globalnego `gemini_service`
### Thinking Mode (NOWE!)
Użytkownicy mogą wybierać poziom rozumowania AI w UI chatu (dropdown obok badge "Gemini 3").
| Poziom | Opis | Zastosowanie |
|--------|------|--------------|
| **Błyskawiczny** (minimal) | Najszybsze odpowiedzi | Proste pytania: "kto?", "gdzie?" |
| **Szybki** (low) | Zrównoważony | Większość pytań o firmy i usługi |
| **Głęboki** (high) | Maksymalna analiza | Złożone pytania, rekomendacje, strategia |
**Zmiana poziomu:**
- UI: Dropdown w headerze chatu
- API: `POST /api/chat/settings` z `{"thinking_level": "high"}`
- Zapisywane w sesji użytkownika
### Dostępne modele w `gemini_service.py`
| Alias | Model ID | Opis |
|-------|----------|------|
| `flash` | `gemini-2.5-flash` | Ogólnego przeznaczenia |
| `flash-lite` | `gemini-2.5-flash-lite` | Ultra tani ($0.10/$0.40 per 1M) |
| `pro` | `gemini-2.5-pro` | Najlepszy reasoning |
| `flash-2.0` | `gemini-2.0-flash` | Poprzednia generacja (wycofywany 31.03.2026) |
| `3-flash` | `gemini-3-flash-preview` | **AKTUALNY** - 7x lepszy reasoning, thinking mode |
| `3-pro` | `gemini-3-pro-preview` | Premium - 2M context |
### Zmiana modelu
```python
# W app.py linia ~286:
gemini_service.init_gemini_service(model='3-flash') # Zmień alias tutaj
```
### UI Badge
W `templates/chat.html` badge w headerze: `<span class="chat-header-badge">Gemini 3</span>`
## Prezentacja dla członków Izby (AKTYWNY PROJEKT)
### Cel projektu
Stworzenie materiałów wideo prezentujących portal NordaBiz dla członków Izby NORDA.
### Produkty końcowe
1. **Podcast NotebookLM** (2-3 min) - rozmowa AI o portalu
2. **Zajawka Remotion** (30s) - scenariusz "Problem → Rozwiązanie"
3. **Tutorial wideo** (2-3 min) - nagrania portalu + dialogi Zofia/Marek
4. **Integracja z portalem** - Akademia + widget na dashboardzie
### Dokument źródłowy dla NotebookLM
`docs/notebooklm-source.md` - markdown do wgrania do notebooklm.google.com
### Scenariusz zajawki 30s (Remotion)
```
[0-8s] "Szukasz partnera do projektu?"
[8-16s] "Nie wiesz, kto w Izbie ma potrzebne kompetencje?"
[16-24s] "NordaGPT zna 150 firm i pomoże Ci znaleźć"
[24-30s] "nordabiznes.pl - Twoja sieć kontaktów"
```
### Głosy edge-tts
- Marek: `pl-PL-MarekNeural` (męski)
- Zofia: `pl-PL-ZofiaNeural` (żeński)
### GIFy do nagrania (Chrome MCP)
1. Strona główna zalogowanego
2. Katalog firm + filtrowanie
3. Profil firmy
4. Chat NordaGPT - pytanie
5. Chat NordaGPT - odpowiedź
6. Forum
7. Kalendarz
8. Tablica B2B
### Pliki Remotion
- Lokalizacja: `/Users/maciejpi/claude/projects/active/remotion/my-video/`
- Komponenty: `NordaBizZajawka.tsx`, `NordaBizTutorial.tsx`
- Audio: `public/audio/`, `public/voice/tutorial/`
- Nagrania: `public/recordings/*.gif`
### Konto testowe (PROD)
- Email: `test@nordabiznes.pl`
- Hasło: `&Rc2LdbSw&jiGR0ek@Bz`
Data projektu: 2026-01-29