nordabiz/PROJECT_INFO.md
Maciej Pienczyn 69bb6b839a docs: Fix incorrect SQLite references - DEV uses PostgreSQL via Docker
The documentation incorrectly stated that DEV environment uses SQLite
when it actually uses PostgreSQL via Docker on localhost:5433.

Updated files:
- CLAUDE.md - main project instructions
- PROJECT_INFO.md - environment documentation
- deployment_checklist.md - deployment procedures
- SCRIPTS_INDEX.md - script usage commands
- .claude/commands/*.md - all slash command definitions
- tests/test_admin_seo_dashboard.py - test database URL

DEV environment:
- PostgreSQL via Docker: localhost:5433
- Container: nordabiz-postgres
- Database: nordabiz
- User: nordabiz_app

PROD environment:
- PostgreSQL: 10.22.68.249:5432

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 03:40:50 +01:00

257 lines
6.6 KiB
Markdown

# NORDA BIZNES HUB - Informacje Projektowe
## Cel Projektu
Katalog firm członkowskich NORDA BIZNES - stowarzyszenia biznesowego z Wejherowa i okolic.
Aplikacja webowa umożliwiająca przeglądanie, wyszukiwanie i czat z AI o firmach członkowskich.
## Status Bazy Danych
### Aktualna Zawartość
- **80 firm** - 100% pokrycie oficjalnej listy NORDA BIZNES
- Źródło: https://norda-biznes.info/czlonkowie
- Data ostatniej aktualizacji: 2025-11-24
### Struktura Bazy
**Database:** PostgreSQL via Docker (`localhost:5433/nordabiz` - DEV) / PostgreSQL (`10.22.68.249:5432` - PROD)
**ORM:** SQLAlchemy
**Tabele:**
- `companies` - 80 firm członkowskich
- `categories` - kategorie branżowe
- `users` - użytkownicy z logowaniem
### Model Company (companies)
```python
id INTEGER PRIMARY KEY
name VARCHAR(255) NOT NULL # Nazwa handlowa
legal_name VARCHAR(255) # Pełna nazwa prawna
slug VARCHAR(255) UNIQUE # URL-friendly identyfikator
# Identyfikatory podatkowe
nip VARCHAR(10) # NIP (bez UNIQUE - możliwe duplikaty)
regon VARCHAR(14) # REGON
krs VARCHAR(10) # KRS
# Dane kontaktowe
website VARCHAR(500)
email VARCHAR(255)
phone VARCHAR(50)
# Adres
address_street VARCHAR(255)
address_city VARCHAR(100)
address_postal VARCHAR(10)
address_full TEXT
# Opisy
description_short TEXT
description_full TEXT
# Metadane
category_id INTEGER # FK do categories
year_established INTEGER
employees_count INTEGER
capital_amount NUMERIC(15,2)
status VARCHAR(20) # 'active'
data_quality VARCHAR(20) # 'basic', 'enhanced', 'complete'
last_updated DATETIME
created_at DATETIME
```
### Ważna Zmiana Schematu
**NIP bez UNIQUE constraint** - pozwala na przypisanie tego samego NIP do wielu wpisów.
**Powód:** Jedna firma prawna może mieć wiele marek/usług na liście NORDA:
- Nadmorski24.pl (portal)
- Radio Norda FM (radio)
- TTM (telewizja)
Wszystkie trzy mają NIP: 5882285147 (Twoja Telewizja Morska sp. z o.o.)
## Skrypty Importu
### Historia Importów
1. **Batch 1-3** - 56 firm (poprzednia sesja)
2. **Batch 4** (`import_norda_batch4.py`) - 9 firm
3. **Batch 5** (`import_norda_batch5.py`) - 8 firm
4. **Batch 6** (`fix_norda_database.py`) - 4 brakujące firmy
5. **Split** (`split_ttm_companies.py`) - podział TTM na 3 wpisy
### Usunięcia
- **Test companies** - 10 firm testowych (NIP 567*)
- **Autotest Polska** - nie jest członkiem NORDA
### Korekty Nazw (9 firm)
```
WATERM Artur Wiertel → Waterm
Ekofabryka Wejherowo → Ekofabryka
Kancelaria Rachunkowa Gawin & Wojnowska → Kancelaria Rachunkowa Gawin & Wojnowska Sp. z o. o.
Round Two → Round Two Sp. z o.o.
Hebel Masiak i Wspólnicy → Hebel Masiak i Wspólnicy Adwokaci i Radcowie Prawni
PHU U Witka → PHU Witka
Kupsa Coatings → Kupsa Coathing
Litwic & Litwic → Litwic&Litwic
```
## Funkcje Pomocnicze
### create_slug(name: str) -> str
Tworzy URL-friendly slug z polskiej nazwy firmy.
```python
replacements = {
'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l',
'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z', 'ż': 'z',
'&': 'i', ' ': '-', '/': '-'
}
```
### parse_address(address: str) -> dict
Parsuje polski adres na komponenty (ulica, miasto, kod pocztowy).
Regex: `(\d{2}-\d{3})\s+([A-ZĄĆĘŁŃÓŚŹŻ][a-z]+)`
## Aplikacja Flask
### Uruchomienie
```bash
python3 app.py
# Dostęp: http://localhost:5001
```
### Główne Funkcje
- **Katalog firm** - przeglądanie z kategoriami
- **Wyszukiwanie** - po nazwie, NIP, mieście
- **Szczegóły firmy** - `/company/<slug>`
- **Czat AI** - Google Gemini 2.0 Flash (FREE tier)
- **Logowanie** - Flask-Login, CSRF protection
### Użytkownik Testowy
```python
username: admin@nordabiz.local
password: admin123
```
## Kategorie Firm
Domyślna kategoria: **Inne** (slug: `inne`)
Kategorie do rozszerzenia:
- Budownictwo
- IT i technologie
- Usługi prawne
- Produkcja
- Handel
- Transport
- itp.
## Źródła Danych
### Główne Źródło
https://norda-biznes.info/czlonkowie - oficjalna lista 80 członków
### Źródła Dodatkowe (dla wzbogacania danych)
- https://pixlab.pl
- https://kornix.com.pl
- https://waterm.pl
- https://norda.fm
- https://hebel-masiak.pl
### Metodologia
1. Pobieranie listy firm z norda-biznes.info
2. Wzbogacanie danych ze stron WWW firm
3. Walidacja NIP/REGON/KRS
4. Import do bazy z jakością danych: 'enhanced'
## Pliki Konfiguracyjne
### .env
```
# DEV (PostgreSQL via Docker)
DATABASE_URL=postgresql://nordabiz_app:dev_password@localhost:5433/nordabiz
# PROD
# DATABASE_URL=postgresql://nordabiz_app:<password>@10.22.68.249:5432/nordabiz
SECRET_KEY=<random_secret>
GEMINI_API_KEY=<api_key>
```
### database.py
Definicje modeli SQLAlchemy
### app.py
Główna aplikacja Flask
## Następne Kroki (TODO)
### Rozwój Funkcjonalności
- [ ] Dodać pełne kategorie firm zamiast "Inne"
- [ ] Zaimportować loga firm
- [ ] Dodać mapy Google dla lokalizacji
- [ ] Rozszerzyć profile firm (galerie, oferty)
- [ ] Panel administracyjny do zarządzania
### Poprawa Danych
- [ ] Zweryfikować wszystkie adresy email
- [ ] Uzupełnić brakujące numery telefonów
- [ ] Dodać rok założenia dla wszystkich firm
- [ ] Poprawić opisy firm (copywriting)
### Integracje
- [ ] Export do CSV/Excel
- [ ] API REST dla aplikacji zewnętrznych
- [ ] Synchronizacja z GUS/CEIDG
- [ ] Newsletter dla członków
### SEO i Marketing
- [ ] Meta tagi dla każdej firmy
- [ ] Sitemap.xml
- [ ] Schema.org markup
- [ ] Google Analytics
## Technologie
- **Backend:** Python 3.9+, Flask 3.0+, SQLAlchemy
- **Database:** PostgreSQL (dev via Docker na localhost:5433, prod na 10.22.68.249:5432)
- **Frontend:** HTML5, Bootstrap 5, JavaScript
- **AI:** Google Gemini 2.0 Flash (FREE tier)
- **Auth:** Flask-Login, werkzeug password hashing
- **Forms:** Flask-WTF (CSRF protection)
## Uwagi Techniczne
### Port Conflicts
Aplikacja działa na porcie **5001**. W razie konfliktu:
```bash
lsof -ti:5001 | xargs kill -9
```
### Background Processes
Sprawdzenie działających instancji:
```bash
ps aux | grep app.py
```
### Database Backup
```bash
# DEV (Docker PostgreSQL)
docker exec nordabiz-postgres pg_dump -U nordabiz_app nordabiz > backup_dev_$(date +%Y%m%d_%H%M%S).sql
# PROD
ssh maciejpi@10.22.68.249 "sudo -u postgres pg_dump nordabiz" > backup_prod_$(date +%Y%m%d_%H%M%S).sql
```
### Schema Migration
W razie potrzeby migracji użyj Alembic (nie skonfigurowane obecnie).
## Kontakt z NORDA BIZNES
Website: https://norda-biznes.info
Lokalizacja: Wejherowo, województwo pomorskie
Typ: Stowarzyszenie biznesowe
---
**Ostatnia aktualizacja:** 2025-11-24
**Status:** ✅ Baza danych kompletna (80/80 firm)
**Jakość danych:** Enhanced (pełne dane firmowe, NIP/REGON/KRS zweryfikowane)