# BackPRO - System Zarządzania Zapleczem SEO

## Opis projektu
BackPRO to narzędzie webowe (PHP) do automatycznego zarządzania siecią stron WordPress stanowiących zaplecze SEO. System po dodaniu instancji WordPressa i skonfigurowaniu tematów automatycznie generuje i publikuje unikalne artykuły z obrazkami, równomiernie rozkładając tematy.

**URL:** https://backpro.projectpro.pl
**Hosting:** Hostido (shared hosting)

## Stack technologiczny
- **PHP 8.3** - czyste PHP z własną strukturą MVC (bez frameworka)
- **MySQL/MariaDB** - baza danych
- **WordPress REST API** - komunikacja z instancjami WordPress
- **OpenAI API** - generowanie artykułów (konfigurowalny model: GPT-4o, GPT-4o-mini, itp.)
- **Freepik API** - generowanie/pobieranie obrazków do artykułów (z fallbackiem na Unsplash/Pexels)
- **CRON** - automatyczne uruchamianie publikacji co 1 godzinę
- **Bootstrap 5** - frontend panelu administracyjnego
- **Composer** - zarządzanie zależnościami (Guzzle HTTP, phpdotenv)

## Struktura katalogów

```
public_html/
├── index.php               # Front controller
├── .htaccess               # Rewrite rules + zabezpieczenia katalogów
├── .env                    # Konfiguracja (zablokowany .htaccess)
├── .env.example            # Przykładowa konfiguracja
├── composer.json
├── vendor/                 # Composer autoload
├── assets/
│   ├── css/app.css
│   └── js/app.js
├── docs/                   # Dokumentacja (deny from all)
├── src/                    # Kod PHP (deny from all)
│   ├── Core/               # Rdzeń MVC
│   │   ├── App.php         # Bootstrap aplikacji
│   │   ├── Router.php      # Routing URL → Controller
│   │   ├── Controller.php  # Bazowy kontroler
│   │   ├── Model.php       # Bazowy model (PDO wrapper)
│   │   ├── Database.php    # Singleton połączenia PDO
│   │   ├── Auth.php        # System autoryzacji
│   │   ├── View.php        # Renderer szablonów
│   │   └── Config.php      # Ładowanie .env
│   ├── Controllers/        # Kontrolery aplikacji
│   │   ├── AuthController.php
│   │   ├── DashboardController.php
│   │   ├── SiteController.php
│   │   ├── TopicController.php
│   │   ├── CategoryController.php
│   │   ├── ArticleController.php
│   │   ├── PublishController.php
│   │   └── SettingsController.php
│   ├── Models/             # Modele danych
│   │   ├── User.php
│   │   ├── Site.php
│   │   ├── Topic.php
│   │   ├── Category.php
│   │   ├── Article.php
│   │   └── PublishQueue.php
│   ├── Services/           # Logika biznesowa
│   │   ├── WordPressService.php
│   │   ├── OpenAIService.php
│   │   ├── ImageService.php
│   │   ├── PublisherService.php
│   │   └── TopicBalancer.php
│   └── Helpers/
│       ├── Validator.php
│       └── Logger.php
├── templates/              # Szablony PHP (deny from all)
│   ├── layout/
│   ├── auth/
│   ├── dashboard/
│   ├── sites/
│   ├── topics/
│   ├── categories/
│   ├── articles/
│   └── settings/
├── cron/                   # Skrypty CRON (deny from all)
│   └── publish.php
├── storage/logs/           # Logi (deny from all)
├── migrations/             # Migracje SQL (deny from all)
└── config/                 # Konfiguracja routingu (deny from all)
    └── routes.php
```

## Główne funkcje

### 1. System logowania
- Login/hasło z bcrypt
- Sesje PHP
- Middleware autoryzacji
- Obsługa wielu użytkowników
- Zmiana hasła przez zalogowanego użytkownika (`/change-password`)

### 2. Zarządzanie stronami WordPress
- Dodawanie/edycja/usuwanie instancji WP
- Konfiguracja: URL, dane API (Application Password), interwał publikacji
- Oznaczanie jako jedno-/wielotematyczna
- Test połączenia z WP REST API

### 3. Biblioteka tematów (`/global-topics`)
- Globalna biblioteka tematów z hierarchią 2-poziomową (kategoria → temat)
- 14 kategorii nadrzędnych + ~50 subtematów preinstalowanych
- Dodawanie własnych kategorii i tematów
- Edycja / usuwanie (CASCADE na subtematach)

### 4. Zarządzanie tematami stron (`/sites/{id}/topics`)
- Przypisywanie tematów do stron z biblioteki globalnej lub tworzenie własnych
- Opis/wytyczne dla AI (co i jak pisać)
- Mapowanie na kategorię WordPress
- Aktywacja/dezaktywacja

### 4. Automatyczna publikacja (CRON)
Algorytm (co 1h):
1. Znajdź stronę, której kolej na publikację (najdłużej bez nowego artykułu + minął interwał)
2. TopicBalancer → wybierz temat z najmniejszą liczbą artykułów
3. OpenAI → wygeneruj artykuł (z listą istniejących tytułów w prompcie)
4. Freepik → wygeneruj obrazek
5. WP REST API → upload obrazka + publikacja posta
6. Zapisz w bazie, zaktualizuj liczniki

### 5. Historia artykułów
- Lista wszystkich wygenerowanych artykułów
- Podgląd treści
- Status (generated/published/failed)
- Logi błędów

### 6. Ustawienia
- Klucze API (OpenAI, Freepik)
- Wybór modelu AI
- Konfiguracja globalna

## Plan implementacji

| Etap | Zakres | Pliki |
|------|--------|-------|
| 1. Fundament | Struktura, Core MVC, .htaccess, migracja SQL, logowanie | Core/*, AuthController, migrations/ |
| 2. Strony | CRUD WordPress, tematy, kategorie, dashboard | SiteController, TopicController, CategoryController |
| 3. API | Integracje OpenAI, Freepik, WordPress REST API | Services/* |
| 4. Publikacja | PublisherService, TopicBalancer, CRON, historia | PublisherService, cron/publish.php, ArticleController |
| 5. Finalizacja | Ustawienia, logi, dokumentacja, testy | SettingsController, Logger, docs/ |

## Bezpieczeństwo
- Wszystkie katalogi poza assets/ zabezpieczone `.htaccess` (Deny from all)
- Plik `.env` zablokowany przez .htaccess
- Hasła hashowane bcrypt
- Prepared statements (PDO) - ochrona przed SQL injection
- htmlspecialchars() w szablonach - ochrona przed XSS
- CSRF tokeny w formularzach
- Application Passwords do WP REST API (nie zwykłe hasła)
