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>
257 lines
6.6 KiB
Markdown
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)
|