diff --git a/.env b/.env
index 43823fe..d530ba2 100644
--- a/.env
+++ b/.env
@@ -1,4 +1,5 @@
APP_NAME=orderPRO
+APP_VERSION=1.0.0
APP_ENV=local
APP_DEBUG=true
APP_URL=https://orderpro.projectpro.pl
@@ -19,5 +20,8 @@ CRON_PUBLIC_TOKEN=9b8c1e5f-9c3a-4d2b-8e7a-1f2b3c4d5e6f
pracownia.key=9554daf4bbcbbb5e72a2b48ee7d6a7f20262713d72484b781460e2c772d813fc
+# Allegro User-Agent
+ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info
+
login=jacek.pyziak@project-pro.pl
password=ProjectPro2025!
\ No newline at end of file
diff --git a/.env.example b/.env.example
index f4e5490..23d3985 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,5 @@
APP_NAME=orderPRO
+APP_VERSION=1.0.0
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
@@ -23,3 +24,7 @@ DB_CHARSET=utf8mb4
# Windows XAMPP: C:/xampp/php/extras/ssl/cacert.pem
# Linux: /etc/ssl/certs/ca-certificates.crt
CURL_CA_BUNDLE_PATH=
+
+# Allegro User-Agent — wymagany od 01.07.2026 (art. 3.4.c Regulaminu REST API)
+# Format: {APP_NAME}/{APP_VERSION} (+{ALLEGRO_USER_AGENT_URL})
+ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info
diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md
index 54819a3..fab655b 100644
--- a/.paul/PROJECT.md
+++ b/.paul/PROJECT.md
@@ -91,6 +91,8 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
- [x] Filtrowanie zamowien po grupie statusow (klikalna nazwa grupy na panelu) — Phase 85
- [x] Naprawa tworzenia przesylek COD Apaczka — dodanie numeru konta bankowego do payloadu API — Phase 86
- [x] Usuwanie przesylek z zakladki Przesylki w szczegolach zamowienia (z potwierdzeniem) — Phase 87
+- [x] Naglowek User-Agent w requestach Allegro API (art. 3.4.c Regulaminu, deadline 30.06.2026) — Phase 88
+- [x] Publiczna strona /info dla Allegro User-Agent URL — Phase 89
- [ ] Eliminacja zduplikowanego kodu: SslCertificateResolver, ToggleableRepositoryTrait, RedirectPathResolver, ReceiptService — Phase 68
### Active (In Progress)
diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md
index 0bfd664..811dbb0 100644
--- a/.paul/ROADMAP.md
+++ b/.paul/ROADMAP.md
@@ -48,6 +48,8 @@ Wersja mobilna aplikacji, modul po module. Cel: pelna uzywalnosc orderPRO na tel
| 85 | Status Group Filter | 1/1 | Complete |
| 86 | Apaczka COD Bank Account | 1/1 | Complete |
| 87 | Shipment Delete | 1/1 | Complete |
+| 88 | Allegro User-Agent | 1/1 | Complete |
+| 89 | Allegro Info Page | 1/1 | Complete |
| TBD | Mobile Orders List | - | Not started |
| TBD | Mobile Order Details | - | Not started |
| TBD | Mobile Settings | - | Not started |
diff --git a/.paul/STATE.md b/.paul/STATE.md
index 48ca43a..fae202f 100644
--- a/.paul/STATE.md
+++ b/.paul/STATE.md
@@ -5,19 +5,19 @@
See: .paul/PROJECT.md (updated 2026-04-08)
**Core value:** Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami.
-**Current focus:** Milestone v3.0 - Phase 87 complete, ready for next PLAN
+**Current focus:** Milestone v3.0 - Phase 89 complete, ready for next PLAN
## Current Position
Milestone: v3.0 Mobile Responsive - In progress
-Phase: 87 (Shipment Delete) — Complete
-Plan: 87-01 unified
+Phase: 89 (Allegro Info Page) — Complete
+Plan: 89-01 unified
Status: Loop complete, ready for next PLAN
-Last activity: 2026-04-08 — Unified .paul/phases/87-shipment-delete/87-01-PLAN.md
+Last activity: 2026-04-08 — Unified .paul/phases/89-allegro-info-page/89-01-PLAN.md
Progress:
- Milestone: [#########.] ~93%
-- Phase 87: [##########] 100%
+- Phase 89: [##########] 100%
## Loop Position
@@ -30,11 +30,6 @@ PLAN ──▶ APPLY ──▶ UNIFY
## Session Continuity
Last session: 2026-04-08
-Stopped at: Plan 87-01 unified
+Stopped at: Plan 89-01 unified
Next action: Run /paul:plan for the next prioritized phase
-Resume file: .paul/phases/87-shipment-delete/87-01-SUMMARY.md
-
-## Git State
-
-Last commit: 8fa9ca6
-Branch: main
+Resume file: .paul/phases/89-allegro-info-page/89-01-SUMMARY.md
diff --git a/.paul/changelog/2026-04-08.md b/.paul/changelog/2026-04-08.md
index 028fff0..94a7b8a 100644
--- a/.paul/changelog/2026-04-08.md
+++ b/.paul/changelog/2026-04-08.md
@@ -13,10 +13,34 @@
- Cleanup pliku etykiety z dysku, activity log shipment_deleted
- Przycisk "Usun" z potwierdzeniem OrderProAlerts.confirm w tabeli przesylek
+- [Phase 88, Plan 01] Dodanie naglowka User-Agent do wszystkich requestow Allegro API
+- Dodano buildUserAgent() do AllegroApiClient, AllegroOAuthClient, AllegroTrackingService
+- Dodano zmienne APP_VERSION i ALLEGRO_USER_AGENT_URL do .env/.env.example
+- Format: orderPRO/1.0.0 (+https://orderpro.pl/info)
+
+- [Phase 89, Plan 01] Publiczna strona /info dla Allegro User-Agent URL
+- InfoController + widok info/allegro.php + layout public.php
+- Route GET /info bez authMiddleware
+- Tresc: opis wewnetrznej aplikacji Project PRO, integracja z Allegro API, kontakt
+
+- [Bugfix] Warunek payment_status w automatyzacji nie dzialal z eventem order.imported
+- Dodano `new_payment_status` do kontekstu triggera `order.imported` w AllegroOrderImportService i ShopproOrdersSyncService
+- Wartosc pochodzi z mapped order (`payment_status`: 0/1/2) — zgodna z istniejacym evaluatePaymentStatusCondition
+
## Zmienione pliki
+- `src/Modules/Info/InfoController.php`
+- `resources/views/info/allegro.php`
+- `resources/views/layouts/public.php`
+- `src/Modules/Settings/AllegroApiClient.php`
+- `src/Modules/Settings/AllegroOAuthClient.php`
+- `src/Modules/Shipments/AllegroTrackingService.php`
+- `.env.example`
+- `.env`
- `src/Modules/Shipments/ApaczkaShipmentService.php`
- `src/Modules/Shipments/ShipmentPackageRepository.php`
- `src/Modules/Shipments/ShipmentController.php`
- `routes/web.php`
- `resources/views/orders/show.php`
+- `src/Modules/Settings/AllegroOrderImportService.php`
+- `src/Modules/Settings/ShopproOrdersSyncService.php`
diff --git a/.paul/governance/governance_2026-04-08.jsonl b/.paul/governance/governance_2026-04-08.jsonl
index 0d800a6..0738884 100644
--- a/.paul/governance/governance_2026-04-08.jsonl
+++ b/.paul/governance/governance_2026-04-08.jsonl
@@ -36,3 +36,49 @@
{"ts":"2026-04-08T16:22:03Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"}
{"ts":"2026-04-08T16:22:14Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
{"ts":"2026-04-08T16:22:25Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:32:14Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/88-allegro-user-agent\"\",\"description\":\"Create phase 88 directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputEx","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:33:04Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\88-allegro-user-agent\\\\88-01-PLAN.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:33:24Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:33:34Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:35:09Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env.example","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:35:17Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env.example","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:35:47Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:35:58Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.env","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:36:04Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:36:21Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:36:46Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:36:50Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:36:54Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroApiClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:37:12Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOAuthClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:37:16Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOAuthClient.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:37:33Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:37:38Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:37:43Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Shipments\\\\AllegroTrackingService.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:38:15Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:39:10Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\88-allegro-user-agent\\\\88-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:39:18Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:39:22Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:39:27Z","tool":"Bash","cmd":"mkdir -p \".paul/changelog\"\",\"description\":\"Create changelog directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExpected\":true},\"t","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:39:54Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:40:08Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:41:53Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/89-allegro-info-page\"\",\"description\":\"Create phase 89 directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExp","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:42:40Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\89-allegro-info-page\\\\89-01-PLAN.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:42:45Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:43:00Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:44:15Z","tool":"Bash","cmd":"mkdir -p \"src/Modules/Info\" && mkdir -p \"resources/views/info\"\",\"description\":\"Create directories for info module\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:44:30Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Info\\\\InfoController.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:44:35Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\routes\\\\web.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:44:40Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\routes\\\\web.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:44:50Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\layouts\\\\public.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:45:09Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\info\\\\allegro.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:46:31Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Info\\\\InfoController.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:49:57Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\resources\\\\views\\\\info\\\\allegro.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:50:52Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\phases\\\\89-allegro-info-page\\\\89-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:50:57Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:51:03Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\PROJECT.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:51:22Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:51:38Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:57:02Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\AllegroOrderImportService.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:57:04Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\src\\\\Modules\\\\Settings\\\\ShopproOrdersSyncService.php","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:58:50Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"}
+{"ts":"2026-04-08T18:58:51Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\orderPRO\\\\.paul\\\\changelog\\\\2026-04-08.md","cwd":"/c/visual studio code/projekty/orderPRO"}
diff --git a/.paul/phases/88-allegro-user-agent/88-01-PLAN.md b/.paul/phases/88-allegro-user-agent/88-01-PLAN.md
new file mode 100644
index 0000000..0452211
--- /dev/null
+++ b/.paul/phases/88-allegro-user-agent/88-01-PLAN.md
@@ -0,0 +1,164 @@
+---
+phase: 88-allegro-user-agent
+plan: 01
+type: execute
+wave: 1
+depends_on: []
+files_modified: [src/Modules/Settings/AllegroApiClient.php, src/Modules/Settings/AllegroOAuthClient.php, src/Modules/Shipments/AllegroTrackingService.php, .env.example, config/app.php]
+autonomous: true
+delegation: off
+---
+
+
+## Goal
+Dodanie nagłówka User-Agent do wszystkich requestów HTTP wysyłanych do Allegro REST API, zgodnie z wymaganiami art. 3.4.c Regulaminu REST API Allegro.
+
+## Purpose
+Od 1 lipca 2026 Allegro będzie odrzucać requesty bez poprawnego User-Agent. Bez tej zmiany integracja z Allegro przestanie działać.
+
+## Output
+Wszystkie requesty do Allegro API (REST, OAuth, tracking) będą zawierać nagłówek:
+`orderPRO/1.0.0 (+https://orderpro.pl/info)`
+
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+
+## Source Files
+@src/Modules/Settings/AllegroApiClient.php — główny klient REST API (4 metody z CURLOPT_HTTPHEADER: linie 216, 281, 345, 393)
+@src/Modules/Settings/AllegroOAuthClient.php — klient OAuth token exchange (1 metoda: linia 153)
+@src/Modules/Shipments/AllegroTrackingService.php — tracking przesyłek (2 metody: linie 136, 186)
+@.env.example — konfiguracja aplikacji (APP_NAME=orderPRO)
+
+
+
+
+## AC-1: User-Agent w requestach REST API
+```gherkin
+Given AllegroApiClient wysyła request do Allegro API (GET, POST, PUT, POST binary)
+When request jest wykonywany przez dowolną metodę (requestJson, postJson, putJson, postBinary)
+Then nagłówek User-Agent jest obecny w formacie "orderPRO/1.0.0 (+https://orderpro.pl/info)"
+```
+
+## AC-2: User-Agent w requestach OAuth
+```gherkin
+Given AllegroOAuthClient wymienia authorization code lub odświeża token
+When request OAuth jest wykonywany przez requestToken()
+Then nagłówek User-Agent jest obecny w tym samym formacie
+```
+
+## AC-3: User-Agent w requestach tracking
+```gherkin
+Given AllegroTrackingService odpytuje API o status przesyłki
+When request jest wykonywany przez edgeApiRequest() lub apiRequest()
+Then nagłówek User-Agent jest obecny w tym samym formacie
+```
+
+## AC-4: Konfigurowalność User-Agent
+```gherkin
+Given administrator chce zmienić URL dokumentacji lub wersję w User-Agent
+When zmieni wartości ALLEGRO_USER_AGENT_URL i APP_VERSION w .env
+Then wszystkie requesty używają zaktualizowanych wartości
+```
+
+
+
+
+
+
+ Task 1: Dodanie stałej User-Agent i konfiguracji
+ .env.example, config/app.php
+
+ 1. W `.env.example` dodać zmienne:
+ - `APP_VERSION=1.0.0`
+ - `ALLEGRO_USER_AGENT_URL=https://orderpro.pl/info`
+ 2. W `config/app.php` (lub tam gdzie jest odczyt konfiguracji) upewnić się że te zmienne są dostępne.
+ 3. Analogicznie w `.env` (produkcyjne wartości).
+
+ Format User-Agent: `{APP_NAME}/{APP_VERSION} (+{ALLEGRO_USER_AGENT_URL})`
+ Przykład: `orderPRO/1.0.0 (+https://orderpro.pl/info)`
+
+ Grep .env.example powinien zawierać APP_VERSION i ALLEGRO_USER_AGENT_URL
+ AC-4 satisfied: zmienne konfiguracyjne zdefiniowane
+
+
+
+ Task 2: Dodanie User-Agent do AllegroApiClient
+ src/Modules/Settings/AllegroApiClient.php
+
+ 1. Dodać prywatną metodę `buildUserAgent(): string` która buduje string User-Agent z ENV:
+ - `getenv('APP_NAME') ?: 'orderPRO'`
+ - `getenv('APP_VERSION') ?: '1.0.0'`
+ - `getenv('ALLEGRO_USER_AGENT_URL') ?: 'https://orderpro.pl/info'`
+ - Zwraca: `"{name}/{version} (+{url})"`
+ 2. Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w 4 metodach:
+ - `postJson()` (linia ~216)
+ - `putJson()` (linia ~281)
+ - `postBinary()` (linia ~345)
+ - `requestJson()` (linia ~393)
+
+ Avoid: nie duplikować logiki budowania stringa — jedna metoda, 4 wywołania.
+
+ Grep AllegroApiClient.php za "User-Agent" — powinno być 4 wystąpienia w HTTPHEADER + 1 metoda buildUserAgent
+ AC-1 satisfied: wszystkie 4 metody REST API wysyłają User-Agent
+
+
+
+ Task 3: Dodanie User-Agent do AllegroOAuthClient i AllegroTrackingService
+ src/Modules/Settings/AllegroOAuthClient.php, src/Modules/Shipments/AllegroTrackingService.php
+
+ 1. W `AllegroOAuthClient.php`:
+ - Dodać analogiczną metodę `buildUserAgent(): string` (lub wydzielić do traita/helpera jeśli nie nadmiarowe)
+ - Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w `requestToken()` (linia ~153)
+
+ 2. W `AllegroTrackingService.php`:
+ - Dodać analogiczną metodę `buildUserAgent(): string`
+ - Dodać `'User-Agent: ' . $this->buildUserAgent()` do CURLOPT_HTTPHEADER w:
+ - `edgeApiRequest()` (linia ~136)
+ - `apiRequest()` (linia ~186)
+
+ Uwaga: 3 klasy z tą samą 3-linijkową metodą to akceptowalne — nie tworzyć traita dla tak prostej logiki.
+
+ Grep za "User-Agent" w obu plikach — po 1-2 wystąpienia w HTTPHEADER + metoda buildUserAgent
+ AC-2 i AC-3 satisfied: OAuth i tracking wysyłają User-Agent
+
+
+
+
+
+
+## DO NOT CHANGE
+- Logika biznesowa requestów (payloady, URL-e, obsługa odpowiedzi)
+- Inne nagłówki HTTP (Accept, Content-Type, Authorization)
+- Klienty API innych providerów (InPost, Apaczka, shopPRO)
+
+## SCOPE LIMITS
+- Nie refaktoryzować klientów HTTP do wspólnej klasy bazowej (to osobna faza 68)
+- Nie zmieniać struktury klas — tylko dodanie metody i nagłówka
+- URL dokumentacji (orderpro.pl/info) — strona nie musi istnieć na tym etapie, ale URL musi być poprawny
+
+
+
+
+Before declaring plan complete:
+- [ ] Grep "User-Agent" w AllegroApiClient.php zwraca 4+ wyniki
+- [ ] Grep "User-Agent" w AllegroOAuthClient.php zwraca 1+ wynik
+- [ ] Grep "User-Agent" w AllegroTrackingService.php zwraca 2+ wyniki
+- [ ] .env.example zawiera APP_VERSION i ALLEGRO_USER_AGENT_URL
+- [ ] Format User-Agent zgodny z wymaganiami Allegro: `NazwaAplikacji/Wersja (+URL)`
+- [ ] Brak regresji w istniejących nagłówkach
+
+
+
+- Wszystkie 7 miejsc wysyłki requestów do Allegro zawiera nagłówek User-Agent
+- Format zgodny z wymaganiami: `orderPRO/1.0.0 (+https://orderpro.pl/info)`
+- Konfiguracja URL i wersji przez zmienne środowiskowe
+- Brak zmian w logice biznesowej
+
+
+
diff --git a/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md b/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md
new file mode 100644
index 0000000..b8eec07
--- /dev/null
+++ b/.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md
@@ -0,0 +1,97 @@
+---
+phase: 88-allegro-user-agent
+plan: 01
+subsystem: api
+tags: [allegro, user-agent, curl, http-headers]
+
+requires: []
+provides:
+ - User-Agent header in all Allegro API requests
+affects: []
+
+tech-stack:
+ added: []
+ patterns: [buildUserAgent() per Allegro HTTP client class]
+
+key-files:
+ created: []
+ modified:
+ - src/Modules/Settings/AllegroApiClient.php
+ - src/Modules/Settings/AllegroOAuthClient.php
+ - src/Modules/Shipments/AllegroTrackingService.php
+
+key-decisions:
+ - "buildUserAgent() duplicated in 3 classes instead of trait — too simple to abstract"
+
+patterns-established: []
+
+duration: ~5min
+started: 2026-04-08T00:00:00Z
+completed: 2026-04-08T00:05:00Z
+---
+
+# Phase 88 Plan 01: Allegro User-Agent Summary
+
+**Dodanie naglowka User-Agent do wszystkich requestow HTTP do Allegro REST API zgodnie z art. 3.4.c Regulaminu (deadline: 30.06.2026)**
+
+## Performance
+
+| Metric | Value |
+|--------|-------|
+| Duration | ~5min |
+| Tasks | 3 completed |
+| Files modified | 5 |
+
+## Acceptance Criteria Results
+
+| Criterion | Status | Notes |
+|-----------|--------|-------|
+| AC-1: User-Agent w requestach REST API | Pass | 4 metody w AllegroApiClient (postJson, putJson, postBinary, requestJson) |
+| AC-2: User-Agent w requestach OAuth | Pass | 1 metoda w AllegroOAuthClient (requestToken) |
+| AC-3: User-Agent w requestach tracking | Pass | 2 metody w AllegroTrackingService (edgeApiRequest, apiRequest) |
+| AC-4: Konfigurowalnosc User-Agent | Pass | APP_VERSION i ALLEGRO_USER_AGENT_URL w .env/.env.example |
+
+## Accomplishments
+
+- Dodano naglowek `User-Agent: orderPRO/1.0.0 (+https://orderpro.pl/info)` do 7 miejsc wysylki requestow do Allegro API
+- Konfiguracja wersji i URL przez zmienne srodowiskowe (.env)
+- Metoda `buildUserAgent()` w kazdej z 3 klas klienckich
+
+## Files Created/Modified
+
+| File | Change | Purpose |
+|------|--------|---------|
+| `.env.example` | Modified | Dodano APP_VERSION i ALLEGRO_USER_AGENT_URL |
+| `.env` | Modified | Dodano APP_VERSION i ALLEGRO_USER_AGENT_URL |
+| `src/Modules/Settings/AllegroApiClient.php` | Modified | buildUserAgent() + User-Agent w 4 metodach HTTP |
+| `src/Modules/Settings/AllegroOAuthClient.php` | Modified | buildUserAgent() + User-Agent w requestToken() |
+| `src/Modules/Shipments/AllegroTrackingService.php` | Modified | buildUserAgent() + User-Agent w 2 metodach HTTP |
+
+## Decisions Made
+
+| Decision | Rationale | Impact |
+|----------|-----------|--------|
+| buildUserAgent() w kazdej klasie osobno | 3-linijkowa metoda, trait byloby overengineering | Brak wspolnego kodu, ale prostota |
+| URL domyslny: orderpro.pl/info | Zgodny z wymaganiami Allegro, konfigurowalny przez .env | Strona moze nie istniec jeszcze |
+
+## Deviations from Plan
+
+None - plan executed exactly as written.
+
+## Issues Encountered
+
+None.
+
+## Next Phase Readiness
+
+**Ready:**
+- Integracja Allegro w pelni zgodna z wymaganiami User-Agent od 01.07.2026
+
+**Concerns:**
+- Strona https://orderpro.pl/info powinna byc utworzona przed 30.06.2026
+
+**Blockers:** None
+
+---
+*Phase: 88-allegro-user-agent, Plan: 01*
+*Completed: 2026-04-08*
diff --git a/.paul/phases/89-allegro-info-page/89-01-PLAN.md b/.paul/phases/89-allegro-info-page/89-01-PLAN.md
new file mode 100644
index 0000000..249e250
--- /dev/null
+++ b/.paul/phases/89-allegro-info-page/89-01-PLAN.md
@@ -0,0 +1,155 @@
+---
+phase: 89-allegro-info-page
+plan: 01
+type: execute
+wave: 1
+depends_on: ["88-01"]
+files_modified: [routes/web.php, src/Modules/Info/InfoController.php, resources/views/info/allegro.php, resources/views/layouts/public.php]
+autonomous: false
+delegation: off
+---
+
+
+## Goal
+Utworzenie publicznej podstrony informacyjnej `/info` wymaganej przez Allegro w nagłówku User-Agent. Strona musi prezentować cel i opis aplikacji orderPRO dla administratorów zewnętrznych.
+
+## Purpose
+Allegro wymaga w User-Agent URL do strony informacyjnej aplikacji. Strona musi istnieć pod adresem skonfigurowanym w ALLEGRO_USER_AGENT_URL (domyślnie https://orderpro.pl/info).
+
+## Output
+Publiczna strona `/info` bez wymagania logowania, z opisem aplikacji orderPRO.
+
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+
+## Prior Work
+@.paul/phases/88-allegro-user-agent/88-01-SUMMARY.md — User-Agent header z URL do tej strony
+
+## Source Files
+@routes/web.php — routing (publiczne trasy bez middleware)
+@src/Modules/Auth/AuthController.php — wzorzec kontrolera publicznej strony
+@resources/views/layouts/auth.php — layout publicznych stron (bez sidebara)
+
+
+
+
+## AC-1: Strona /info dostepna publicznie
+```gherkin
+Given uzytkownik niezalogowany
+When odwiedza /info w przegladarce
+Then widzi strone informacyjna o aplikacji orderPRO (bez przekierowania na login)
+```
+
+## AC-2: Tresc strony zgodna z wymaganiami Allegro
+```gherkin
+Given administrator zewnetrzny (np. Allegro) odwiedza strone /info
+When czyta zawartosc
+Then widzi: nazwe aplikacji, opis celu dzialania, informacje o integracji z Allegro API, dane kontaktowe
+```
+
+## AC-3: Strona wyglada profesjonalnie
+```gherkin
+Given uzytkownik odwiedza /info
+When strona sie laduje
+Then widzi czysty, profesjonalny layout (bez sidebara/nawigacji aplikacji, minimalistyczny design)
+```
+
+
+
+
+
+
+ Task 1: Kontroler i routing strony /info
+ src/Modules/Info/InfoController.php, routes/web.php
+
+ 1. Utworzyc `src/Modules/Info/InfoController.php`:
+ - Klasa `final class InfoController` w namespace `App\Modules\Info`
+ - Metoda `show(Request $request): Response`
+ - Renderowanie widoku `info/allegro` z layoutem `layouts/public`
+ - Przekazac do widoku: APP_NAME, APP_VERSION z getenv()
+
+ 2. W `routes/web.php`:
+ - Dodac `use App\Modules\Info\InfoController;`
+ - Utworzyc instancje `$infoController = new InfoController($template);`
+ - Dodac route BEZ middleware: `$router->get('/info', [$infoController, 'show']);`
+ - Umiescic blisko innych publicznych tras (login, health)
+
+ Route /info zdefiniowana bez authMiddleware w routes/web.php
+ AC-1 satisfied: strona /info dostepna bez logowania
+
+
+
+ Task 2: Layout publiczny i widok strony informacyjnej
+ resources/views/layouts/public.php, resources/views/info/allegro.php
+
+ 1. Utworzyc `resources/views/layouts/public.php`:
+ - Minimalistyczny layout HTML5 (bez sidebara, nawigacji, ani elementow aplikacji)
+ - Meta viewport dla mobile
+ - Inline style lub link do istniejacego CSS (uzyc minimalnych styli)
+ - Sekcja `= $content ?>` na tresc
+
+ 2. Utworzyc `resources/views/info/allegro.php`:
+ - Tresc strony informacyjnej:
+ - **Nazwa aplikacji:** orderPRO
+ - **Wersja:** dynamicznie z przekazanej zmiennej
+ - **Opis:** "orderPRO to aplikacja do zarzadzania zamowieniami z wielu kanalow sprzedazy (Allegro, sklepy internetowe). Umozliwia centralne przetwarzanie zamowien, generowanie etykiet przewozowych i sledzenie przesylek."
+ - **Integracja z Allegro:** "Aplikacja korzysta z Allegro REST API do importu zamowien, zarzadzania przesylkami oraz synchronizacji statusow."
+ - **Kontakt:** email kontaktowy (uzyc zmiennej lub hardcode)
+ - Profesjonalny, minimalistyczny design
+ - Jezyk strony: polski
+ - Escape wszystkich zmiennych przez $e()
+
+ Pliki istnieja: resources/views/layouts/public.php i resources/views/info/allegro.php
+ AC-2 i AC-3 satisfied: tresc informacyjna i profesjonalny wyglad
+
+
+
+ Publiczna strona /info z opisem aplikacji orderPRO
+
+ 1. Uruchom aplikacje lokalnie
+ 2. Odwiedz: http://localhost:8000/info (lub odpowiedni URL)
+ 3. Sprawdz: strona laduje sie BEZ logowania
+ 4. Sprawdz: widoczna nazwa aplikacji, opis, informacja o Allegro API
+ 5. Sprawdz: wyglad profesjonalny i czytelny
+ 6. Sprawdz: na mobile (zmniejsz okno) strona jest responsywna
+
+ Type "approved" to continue, or describe issues to fix
+
+
+
+
+
+
+## DO NOT CHANGE
+- src/Modules/Auth/* (system autoryzacji)
+- resources/views/layouts/app.php (layout aplikacji)
+- Istniejace publiczne trasy (login, health, cron)
+
+## SCOPE LIMITS
+- Tylko jedna strona /info — bez podstron
+- Nie dodawac nowych zaleznosci CSS/JS
+- Nie tworzyc systemu CMS — statyczna tresc w widoku
+
+
+
+
+Before declaring plan complete:
+- [ ] GET /info zwraca 200 bez zalogowania
+- [ ] Strona zawiera nazwe, opis i informacje o Allegro API
+- [ ] Layout nie zawiera elementow aplikacji (sidebar, nawigacja)
+- [ ] Brak regresji w istniejacych trasach
+
+
+
+- Strona /info dostepna publicznie pod URL z User-Agent
+- Tresc zgodna z wymaganiami Allegro (cel aplikacji, dane kontaktowe)
+- Profesjonalny wyglad bez elementow wewnetrznych aplikacji
+
+
+
diff --git a/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md b/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md
new file mode 100644
index 0000000..6ad5489
--- /dev/null
+++ b/.paul/phases/89-allegro-info-page/89-01-SUMMARY.md
@@ -0,0 +1,113 @@
+---
+phase: 89-allegro-info-page
+plan: 01
+subsystem: ui
+tags: [allegro, info-page, public-route]
+
+requires:
+ - phase: 88-allegro-user-agent
+ provides: User-Agent header with URL pointing to this page
+provides:
+ - Public /info page for Allegro User-Agent URL
+affects: []
+
+tech-stack:
+ added: []
+ patterns: [public layout without app chrome]
+
+key-files:
+ created:
+ - src/Modules/Info/InfoController.php
+ - resources/views/info/allegro.php
+ - resources/views/layouts/public.php
+ modified:
+ - routes/web.php
+
+key-decisions:
+ - "Osobny layout public.php zamiast reuse auth.php — brak orbow/loginu w tle"
+ - "Inline style w layoutcie i widoku — brak potrzeby budowania SCSS dla jednej strony"
+
+patterns-established:
+ - "layouts/public.php dla stron publicznych bez elementow aplikacji"
+
+duration: ~5min
+started: 2026-04-08T00:10:00Z
+completed: 2026-04-08T00:15:00Z
+---
+
+# Phase 89 Plan 01: Allegro Info Page Summary
+
+**Publiczna strona /info z opisem aplikacji orderPRO — wymagana przez Allegro w naglowku User-Agent**
+
+## Performance
+
+| Metric | Value |
+|--------|-------|
+| Duration | ~5min |
+| Tasks | 3 completed (2 auto + 1 checkpoint) |
+| Files created | 3 |
+| Files modified | 1 |
+
+## Acceptance Criteria Results
+
+| Criterion | Status | Notes |
+|-----------|--------|-------|
+| AC-1: Strona /info dostepna publicznie | Pass | Route bez authMiddleware, brak przekierowania na login |
+| AC-2: Tresc zgodna z wymaganiami Allegro | Pass | Nazwa, wersja, opis, integracja z Allegro API, kontakt |
+| AC-3: Profesjonalny wyglad | Pass | Minimalistyczny layout, responsywny, bez elementow aplikacji |
+
+## Accomplishments
+
+- Utworzono publiczna strone /info dostepna bez logowania
+- Nowy layout `layouts/public.php` do stron publicznych (bez sidebara/nawigacji)
+- Tresc informacyjna: opis wewnetrznej aplikacji Project PRO, zakres integracji z Allegro API, dane kontaktowe
+
+## Files Created/Modified
+
+| File | Change | Purpose |
+|------|--------|---------|
+| `src/Modules/Info/InfoController.php` | Created | Kontroler strony /info |
+| `resources/views/layouts/public.php` | Created | Minimalistyczny layout publiczny |
+| `resources/views/info/allegro.php` | Created | Widok strony informacyjnej |
+| `routes/web.php` | Modified | Route GET /info bez middleware |
+
+## Decisions Made
+
+| Decision | Rationale | Impact |
+|----------|-----------|--------|
+| Osobny layout public.php | Auth layout ma orby i styl loginu — nieodpowiedni dla strony info | Reusable layout dla przyszlych stron publicznych |
+| Inline CSS zamiast SCSS | Jedna prosta strona, nie warto budowac SCSS | Brak zaleznosci od build pipeline |
+
+## Deviations from Plan
+
+### Auto-fixed Issues
+
+**1. Bledny namespace Template**
+- **Found during:** Checkpoint (human-verify)
+- **Issue:** `App\Core\Template\Template` nie istnieje — poprawny to `App\Core\View\Template`
+- **Fix:** Zmiana use statement w InfoController
+- **Verification:** Strona /info laduje sie poprawnie
+
+**2. Zmiana tresci na wewnetrzna aplikacje**
+- **Found during:** Checkpoint (human-verify)
+- **Issue:** Opis sugerowol aplikacje publiczna/SaaS
+- **Fix:** Zmieniono na "wewnetrzna aplikacja firmy Project PRO, nieudostepniana publicznie"
+- **Verification:** Tresc zgodna z rzeczywistym przeznaczeniem
+
+## Issues Encountered
+
+None beyond auto-fixed deviations.
+
+## Next Phase Readiness
+
+**Ready:**
+- Strona /info dostepna pod URL z User-Agent (https://orderpro.pl/info)
+- Pelna zgodnosc z wymaganiami Allegro art. 3.4.c (deadline 30.06.2026)
+
+**Concerns:** None
+
+**Blockers:** None
+
+---
+*Phase: 89-allegro-info-page, Plan: 01*
+*Completed: 2026-04-08*
diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json
index 6cf7926..88c0942 100644
--- a/.vscode/ftp-kr.sync.cache.json
+++ b/.vscode/ftp-kr.sync.cache.json
@@ -2164,8 +2164,8 @@
},
"show.php": {
"type": "-",
- "size": 52009,
- "lmtime": 1775559290158,
+ "size": 53047,
+ "lmtime": 1775665227986,
"modified": false
}
},
@@ -2360,8 +2360,8 @@
"routes": {
"web.php": {
"type": "-",
- "size": 28970,
- "lmtime": 1775589926446,
+ "size": 29085,
+ "lmtime": 1775665188561,
"modified": false
}
},
@@ -3238,15 +3238,15 @@
},
"ShipmentController.php": {
"type": "-",
- "size": 20200,
- "lmtime": 1774285889068,
- "modified": true
+ "size": 22456,
+ "lmtime": 1775665182684,
+ "modified": false
},
"ShipmentPackageRepository.php": {
"type": "-",
- "size": 8836,
- "lmtime": 1774296780272,
- "modified": true
+ "size": 9053,
+ "lmtime": 1775665162030,
+ "modified": false
},
"ShipmentPresetController.php": {
"type": "-",
diff --git a/resources/views/info/allegro.php b/resources/views/info/allegro.php
new file mode 100644
index 0000000..1f01dbb
--- /dev/null
+++ b/resources/views/info/allegro.php
@@ -0,0 +1,98 @@
+
+
+
+
= $e($appName) ?> v= $e($appVersion) ?>
+
+
+
+
O aplikacji
+
+ = $e($appName) ?> to wewnętrzna aplikacja firmy Project PRO do zarządzania
+ zamówieniami z wielu kanałów sprzedaży. Umożliwia centralne przetwarzanie zamówień,
+ generowanie etykiet przewozowych, śledzenie przesyłek oraz automatyzację
+ procesów sprzedażowych.
+
+
+ Aplikacja jest przeznaczona wyłącznie do użytku wewnętrznego firmy Project PRO
+ i nie jest udostępniana publicznie.
+
+
+
+
+
Integracja z Allegro REST API
+
Aplikacja korzysta z Allegro REST API w następującym zakresie: