diff --git a/.paul/STATE.md b/.paul/STATE.md
index 04eae4d..80479de 100644
--- a/.paul/STATE.md
+++ b/.paul/STATE.md
@@ -2,15 +2,15 @@
## Current Position
-Milestone: (ad-hoc) Products CL1 column swap
-Phase: 1 of 1 (Products CL1 Column) — Completed
-Plan: 01-01 unified (loop closed)
+Milestone: (ad-hoc) Supplemental feed — custom_label_1
+Phase: 2 of 2 (Supplemental Feed CL1) — Completed
+Plan: 02-01 unified (loop closed)
Status: UNIFY complete
-Last activity: 2026-04-22 — Closed loop for plan 01-01
+Last activity: 2026-04-22 — Zamknięto pętlę planu 02-01
Progress:
- Milestone: [██████████] 100%
-- Phase 1: [██████████] 100%
+- Phase 2: [██████████] 100%
## Loop Position
@@ -23,8 +23,8 @@ PLAN ──▶ APPLY ──▶ UNIFY
Last session: 2026-04-22
Stopped at: Loop closed, pętla gotowa do nowego /paul:plan
-Next action: Deploy na adspro.projectpro.pl — uruchom `php install.php` na serwerze (migracja 028) po wgraniu plików przez FTP
-Resume file: .paul/phases/01-products-cl1-column/01-01-SUMMARY.md
+Next action: Deploy na produkcję już wykonany; w razie kolejnego zadania — `/paul:plan` z opisem
+Resume file: .paul/phases/02-supplemental-feed-cl1/02-01-SUMMARY.md
## Historia zrealizowanych planów
@@ -32,8 +32,13 @@ Resume file: .paul/phases/01-products-cl1-column/01-01-SUMMARY.md
- 4 pliki zmodyfikowane: migration 028, factory, controller, template
- 4 AC spełnione
- 2 odchylenia udokumentowane (szerokość kolumny 50→120px, weryfikacja sync GAds)
+- `02-01-PLAN.md` — custom_label_1 w supplemental feed TSV (completed 2026-04-22)
+ - 1 plik zmodyfikowany: autoload/services/class.SupplementalFeed.php (+6/-4)
+ - 4 AC spełnione
+ - 0 odchyleń — plan 1:1
## Notes
- PAUL framework działa w trybie ad-hoc (bez pełnej roadmapy/PROJECT.md).
+- Łańcuch propagacji `custom_label_1` (UI → DB → feed TSV → GMC) jest teraz kompletny.
- Następne zmiany: uruchom `/paul:plan` z opisem kolejnego zadania.
diff --git a/.paul/changelog/2026-04-22.md b/.paul/changelog/2026-04-22.md
new file mode 100644
index 0000000..d0926fc
--- /dev/null
+++ b/.paul/changelog/2026-04-22.md
@@ -0,0 +1,15 @@
+# 2026-04-22
+
+## Co zrobiono
+
+- [Phase 2, Plan 02-01] Dodano kolumnę `custom_label_1` do supplemental feed TSV w `services\SupplementalFeed::generate_for_client()`
+- Rozszerzono SELECT/WHERE o `p.custom_label_1`, nagłówek TSV o `custom_label_1` (pozycja 5 — między `google_product_category` a `custom_label_3`)
+- Zaktualizowano pętlę `foreach`: odczyt wartości, warunek pustki i zapis wiersza w `implode` uwzględniają `custom_label_1`
+- Brak odchyleń, 4/4 AC spełnione, `php -l` OK, weryfikacja runtime na produkcji potwierdzona przez użytkownika (feed klienta 9)
+
+## Zmienione pliki
+
+- `autoload/services/class.SupplementalFeed.php`
+- `.paul/phases/02-supplemental-feed-cl1/02-01-PLAN.md` (nowy)
+- `.paul/phases/02-supplemental-feed-cl1/02-01-SUMMARY.md` (nowy)
+- `.paul/STATE.md`
diff --git a/.paul/docs/API.md b/.paul/docs/API.md
new file mode 100644
index 0000000..cce27e0
--- /dev/null
+++ b/.paul/docs/API.md
@@ -0,0 +1,3 @@
+# API
+
+> Endpointy, kontrakty request/response, autentykacja.
diff --git a/.paul/docs/ARCHITECTURE.md b/.paul/docs/ARCHITECTURE.md
new file mode 100644
index 0000000..e76060e
--- /dev/null
+++ b/.paul/docs/ARCHITECTURE.md
@@ -0,0 +1,3 @@
+# ARCHITECTURE
+
+> Struktura klas, modulow, przeplywow i zaleznosci w projekcie.
diff --git a/.paul/docs/DB_SCHEMA.md b/.paul/docs/DB_SCHEMA.md
new file mode 100644
index 0000000..737ad36
--- /dev/null
+++ b/.paul/docs/DB_SCHEMA.md
@@ -0,0 +1,3 @@
+# DB_SCHEMA
+
+> Schemat bazy danych — tabele, kolumny, FK, indeksy.
diff --git a/.paul/docs/DECISIONS.md b/.paul/docs/DECISIONS.md
new file mode 100644
index 0000000..59239f4
--- /dev/null
+++ b/.paul/docs/DECISIONS.md
@@ -0,0 +1,3 @@
+# DECISIONS
+
+> Kluczowe decyzje techniczne i ich uzasadnienia.
diff --git a/.paul/docs/STACK.md b/.paul/docs/STACK.md
new file mode 100644
index 0000000..bad9fe6
--- /dev/null
+++ b/.paul/docs/STACK.md
@@ -0,0 +1,3 @@
+# STACK
+
+> Stack technologiczny, wersje, zaleznosci, srodowisko.
diff --git a/.paul/docs/TECH_CHANGELOG.md b/.paul/docs/TECH_CHANGELOG.md
new file mode 100644
index 0000000..861d346
--- /dev/null
+++ b/.paul/docs/TECH_CHANGELOG.md
@@ -0,0 +1,3 @@
+# TECH_CHANGELOG
+
+> Chronologiczny log zmian technicznych — co i dlaczego.
diff --git a/.paul/docs/TODO.md b/.paul/docs/TODO.md
new file mode 100644
index 0000000..e5893db
--- /dev/null
+++ b/.paul/docs/TODO.md
@@ -0,0 +1,3 @@
+# TODO
+
+> Luzny parking pomyslow, rzeczy do sprawdzenia.
diff --git a/.paul/governance/governance_2026-04-22.jsonl b/.paul/governance/governance_2026-04-22.jsonl
index b79682a..0540f0b 100644
--- a/.paul/governance/governance_2026-04-22.jsonl
+++ b/.paul/governance/governance_2026-04-22.jsonl
@@ -30,3 +30,15 @@
{"ts":"2026-04-21T22:37:41Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\phases\\\\01-products-cl1-column\\\\01-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/adsPRO"}
{"ts":"2026-04-21T22:37:55Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\phases\\\\01-products-cl1-column\\\\01-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/adsPRO"}
{"ts":"2026-04-21T22:38:08Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T07:58:30Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/02-supplemental-feed-cl1\"\",\"description\":\"Create phase directory\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputEx","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T07:59:22Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\phases\\\\02-supplemental-feed-cl1\\\\02-01-PLAN.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T07:59:37Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:01:10Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\autoload\\\\services\\\\class.SupplementalFeed.php","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:01:20Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\autoload\\\\services\\\\class.SupplementalFeed.php","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:01:27Z","tool":"Bash","cmd":"php -l \"autoload/services/class.SupplementalFeed.php\"\",\"description\":\"PHP syntax check\"},\"tool_response\":{\"stdout\":\"No syntax errors detected in autoload/services/class.SupplementalFeed.ph","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:01:48Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:06:57Z","tool":"Bash","cmd":"git status --short && git diff --stat autoload/services/class.SupplementalFeed.php\",\"description\":\"Check modified files and diff stat\"},\"tool_response\":{\"stdout\":\" M .paul/STATE.md\\n M .pau","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:07:36Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\phases\\\\02-supplemental-feed-cl1\\\\02-01-SUMMARY.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:07:47Z","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/adsPRO"}
+{"ts":"2026-04-22T08:07:56Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\changelog\\\\2026-04-22.md","cwd":"/c/visual studio code/projekty/adsPRO"}
+{"ts":"2026-04-22T08:08:12Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\adsPRO\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/adsPRO"}
diff --git a/.paul/phases/02-supplemental-feed-cl1/02-01-PLAN.md b/.paul/phases/02-supplemental-feed-cl1/02-01-PLAN.md
new file mode 100644
index 0000000..9755907
--- /dev/null
+++ b/.paul/phases/02-supplemental-feed-cl1/02-01-PLAN.md
@@ -0,0 +1,164 @@
+---
+phase: 02-supplemental-feed-cl1
+plan: 01
+type: execute
+wave: 1
+depends_on: []
+files_modified:
+ - autoload/services/class.SupplementalFeed.php
+autonomous: true
+delegation: off
+---
+
+
+## Goal
+Dodać kolumnę `custom_label_1` do generowanego supplemental feeda TSV (np. `feeds/supplemental_9.tsv`), tak aby etykieta ta trafiała do Google Merchant Center razem z pozostałymi custom_labels.
+
+## Purpose
+Plan 01-01 (Phase 1) wprowadził kolumnę `custom_label_1` w tabeli `/products` i w bazie danych (migracja 028), ale `services\SupplementalFeed::generate_for_client()` nie został zaktualizowany — feed TSV nadal eksportuje wyłącznie `custom_label_3` i `custom_label_4`. Skutek: wartości `custom_label_1` ustawione w UI nie są propagowane do Merchant Center, co łamie sens wprowadzenia tej kolumny.
+
+## Output
+Zaktualizowany `autoload/services/class.SupplementalFeed.php` — feed `feeds/supplemental_{client_id}.tsv` zawiera kolumnę `custom_label_1` tuż po `google_product_category` (przed `custom_label_3`), z wartością pobraną z `products.custom_label_1`.
+
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+
+## Prior Work
+@.paul/phases/01-products-cl1-column/01-01-SUMMARY.md
+# Phase 1 dodał `products.custom_label_1` (migracja 028) i UI. Ten plan domyka lukę w feedzie TSV.
+
+## Source Files
+@autoload/services/class.SupplementalFeed.php
+@migrations/028_products_custom_label_1.sql
+
+
+
+
+## AC-1: Nagłówek TSV zawiera custom_label_1
+```gherkin
+Given klient o id = 9 ma wygenerowany feed przez SupplementalFeed::generate_for_client( 9 )
+When otworzę pierwszy wiersz pliku feeds/supplemental_9.tsv
+Then kolumny rozdzielone TAB to dokładnie: id, title, description, google_product_category, custom_label_1, custom_label_3, custom_label_4
+```
+
+## AC-2: Wartość custom_label_1 trafia do wierszy
+```gherkin
+Given produkt klienta 9 ma w DB products.custom_label_1 = "promo_spring"
+When wygeneruję feed przez SupplementalFeed::generate_for_client( 9 )
+Then wiersz odpowiadający temu produktowi w feeds/supplemental_9.tsv ma w 5. kolumnie wartość "promo_spring"
+```
+
+## AC-3: Pusty custom_label_1 nie wymusza eksportu produktu ani nie psuje pustej logiki
+```gherkin
+Given produkt ma wszystkie kolumny (title, description, google_product_category, custom_label_1, custom_label_3, custom_label_4) puste
+When wygeneruję feed
+Then ten produkt zostaje pominięty (nie pojawia się w TSV), zgodnie z dotychczasowym zachowaniem
+And produkty, które mają tylko custom_label_1 ustawione (reszta pusta), są eksportowane z custom_label_1 wypełnionym a pozostałymi kolumnami pustymi
+```
+
+## AC-4: Brak regresji dla custom_label_3 / custom_label_4 / bestseller
+```gherkin
+Given istniejąca logika refresh_bestseller_labels_for_client() nadal działa i ustawia products.custom_label_4
+When wygeneruję feed
+Then custom_label_4 nadal jest w 7. kolumnie TSV (po dodaniu custom_label_1 kolumna przesuwa się z 6 na 7)
+And custom_label_3 jest w 6. kolumnie TSV
+And zwracane statystyki (products_total, products_written, file, labels_updated) zachowują dotychczasową strukturę
+```
+
+
+
+
+
+
+ Task 1: Dodaj custom_label_1 do SELECT, nagłówka, warunku pustki i wiersza TSV
+ autoload/services/class.SupplementalFeed.php
+
+ W metodzie `generate_for_client( $client_id )`:
+
+ 1. Rozszerz SELECT (ok. linia 166) o kolumnę `p.custom_label_1`:
+ ```sql
+ SELECT p.offer_id, p.title, p.description, p.google_product_category,
+ p.custom_label_1, p.custom_label_3, p.custom_label_4
+ ```
+
+ 2. Rozszerz warunek WHERE o `p.custom_label_1 IS NOT NULL`:
+ ```sql
+ AND ( p.title IS NOT NULL
+ OR p.description IS NOT NULL
+ OR p.google_product_category IS NOT NULL
+ OR p.custom_label_1 IS NOT NULL
+ OR p.custom_label_3 IS NOT NULL
+ OR p.custom_label_4 IS NOT NULL )
+ ```
+
+ 3. Nagłówek TSV (ok. linia 190) — zmień na:
+ `"id\ttitle\tdescription\tgoogle_product_category\tcustom_label_1\tcustom_label_3\tcustom_label_4\n"`
+ Kolejność: custom_label_1 PRZED custom_label_3 (zachowujemy naturalną numerację).
+
+ 4. Pętla `foreach`:
+ - Dodaj `$custom_label_1 = trim( (string) ( $row['custom_label_1'] ?? '' ) );`
+ - Uwzględnij `$custom_label_1 === ''` w warunku pomijania produktu
+ (obok title/description/category/cl3/cl4).
+ - Dodaj `$custom_label_1` do tablicy przekazywanej do `implode( "\t", [...] )` — pozycja PRZED `$custom_label_3`.
+
+ Unikaj:
+ - zmiany kolejności pozostałych kolumn (tylko DODAJEMY cl_1 w naturalnym miejscu)
+ - dotykania logiki `refresh_bestseller_labels_for_client()` ani `is_below_exit_for_cooldown()` (poza tym planem)
+ - zmiany sanitize_for_tsv / normalize_feed_offer_id
+
+
+ 1. Lokalnie (lub po wgraniu na serwer) uruchom PHP:
+ `php -r "require 'index.php'; print_r( \services\SupplementalFeed::generate_for_client( 9 ) );"`
+ (albo przez UI /feeds: klik "Generuj" dla klienta 9)
+ 2. `head -1 feeds/supplemental_9.tsv` → musi być:
+ `id\ttitle\tdescription\tgoogle_product_category\tcustom_label_1\tcustom_label_3\tcustom_label_4`
+ 3. Wybierz z DB produkt z ustawionym `custom_label_1`:
+ `SELECT offer_id, custom_label_1 FROM products WHERE client_id = 9 AND custom_label_1 <> '' LIMIT 1;`
+ Znajdź ten `offer_id` w TSV — 5. kolumna musi zawierać wartość z DB.
+ 4. Sanity check: liczba wierszy TSV ≈ poprzedniej generacji (plan nie powinien zmienić products_written poza przypadkami, gdzie TYLKO custom_label_1 jest wypełniony).
+
+ AC-1, AC-2, AC-3, AC-4 spełnione: feed dla klienta 9 zawiera custom_label_1 w nagłówku i wierszach, pozostałe kolumny bez regresji.
+
+
+
+
+
+
+## DO NOT CHANGE
+- `refresh_bestseller_labels_for_client()`, `is_below_exit_for_cooldown()`, `get_client_bestseller_settings()` — logika bestsellera jest poza scope.
+- `sanitize_for_tsv()`, `normalize_feed_offer_id()` — bez zmian.
+- `migrations/028_products_custom_label_1.sql` — migracja już wdrożona w Phase 1.
+- `autoload/controls/class.Products.php`, `templates/products/main_view.php` — UI produktów jest poza scope.
+- Kolejność i nazwy pozostałych kolumn TSV (id, title, description, google_product_category, custom_label_3, custom_label_4) — tylko DODAJEMY custom_label_1 między `google_product_category` a `custom_label_3`.
+
+## SCOPE LIMITS
+- Plan dotyczy WYŁĄCZNIE pliku `autoload/services/class.SupplementalFeed.php`.
+- Nie dodajemy nowych etykiet (custom_label_0, 2) — to inne zadanie, jeśli kiedyś będzie.
+- Nie wymuszamy automatycznej regeneracji feedów dla wszystkich klientów; regeneracja zajdzie przy najbliższym naturalnym wywołaniu z UI /feeds lub crona (o ile istnieje).
+- Nie modyfikujemy formatu zwracanego przez `generate_for_client()` (klucze tablicy wynikowej pozostają: products_total, products_written, file, labels_updated).
+
+
+
+
+Przed zamknięciem planu:
+- [ ] `php -l autoload/services/class.SupplementalFeed.php` → No syntax errors
+- [ ] Generacja feedu dla klienta 9 kończy się bez wyjątku
+- [ ] Nagłówek TSV zawiera `custom_label_1` w 5. kolumnie
+- [ ] Przynajmniej jeden wiersz TSV ma wypełnione `custom_label_1` (produkt z ustawioną etykietą w DB)
+- [ ] Wszystkie AC spełnione
+
+
+
+- Zmodyfikowany jeden plik: `autoload/services/class.SupplementalFeed.php`
+- Feed `feeds/supplemental_9.tsv` zawiera kolumnę `custom_label_1` z poprawnymi wartościami
+- Brak błędów PHP (lint + runtime)
+- Brak regresji w dotychczasowych kolumnach / statystykach zwrotnych
+
+
+
diff --git a/.paul/phases/02-supplemental-feed-cl1/02-01-SUMMARY.md b/.paul/phases/02-supplemental-feed-cl1/02-01-SUMMARY.md
new file mode 100644
index 0000000..31d2f03
--- /dev/null
+++ b/.paul/phases/02-supplemental-feed-cl1/02-01-SUMMARY.md
@@ -0,0 +1,111 @@
+---
+phase: 02-supplemental-feed-cl1
+plan: 01
+subsystem: feeds
+tags: [merchant-center, supplemental-feed, tsv, custom-label, google-ads]
+
+requires:
+ - phase: 01-products-cl1-column
+ provides: kolumna `products.custom_label_1` w DB (migracja 028), UI edycji w /products
+provides:
+ - Eksport `custom_label_1` do supplemental feed TSV (`feeds/supplemental_{client_id}.tsv`)
+ - Uzupełnienie łańcucha propagacji etykiety: UI → DB → feed → Google Merchant Center
+affects: [merchant-center, google-ads-labels]
+
+tech-stack:
+ added: []
+ patterns: []
+
+key-files:
+ created: []
+ modified:
+ - autoload/services/class.SupplementalFeed.php
+
+key-decisions:
+ - "Kolumna custom_label_1 w TSV umieszczona PRZED custom_label_3 (naturalna numeracja), a nie na końcu — łatwiejszy diff i zgodność z konwencją GMC"
+
+patterns-established: []
+
+duration: ~5min
+started: 2026-04-22T00:00:00Z
+completed: 2026-04-22T00:00:00Z
+---
+
+# Phase 2 Plan 01: Supplemental Feed CL1 Summary
+
+**Supplemental feed TSV eksportuje teraz `custom_label_1` jako 5. kolumnę, domykając propagację etykiety z UI /products do Merchant Center.**
+
+## Performance
+
+| Metric | Value |
+|--------|-------|
+| Duration | ~5 min |
+| Started | 2026-04-22 |
+| Completed | 2026-04-22 |
+| Tasks | 1/1 |
+| Files modified | 1 |
+
+## Acceptance Criteria Results
+
+| Criterion | Status | Notes |
+|-----------|--------|-------|
+| AC-1: Nagłówek TSV zawiera custom_label_1 | Pass | Header: `id\ttitle\tdescription\tgoogle_product_category\tcustom_label_1\tcustom_label_3\tcustom_label_4` |
+| AC-2: Wartość custom_label_1 trafia do wierszy | Pass | Użytkownik zweryfikował na produkcji — plik `feeds/supplemental_9.tsv` otwarty w IDE z poprawną zawartością |
+| AC-3: Pusta logika rozszerzona o custom_label_1 | Pass | Warunek pomijania produktu uwzględnia `$custom_label_1 === ''` obok pozostałych; produkty z samym CL1 są eksportowane |
+| AC-4: Brak regresji CL3/CL4/bestseller | Pass | Kolejność kolumn przesunięta zgodnie z planem (CL3 → pos 6, CL4 → pos 7), logika `refresh_bestseller_labels_for_client()` nietknięta |
+
+## Accomplishments
+
+- Zamknięta luka propagacji: `products.custom_label_1` (Phase 1) → TSV feed → GMC
+- Użytkownik potwierdził działanie przez inspekcję `feeds/supplemental_9.tsv` na produkcji (po deployu FTP i regeneracji z UI /feeds)
+- Zero regresji w dotychczasowych kolumnach i w logice bestseller
+
+## Files Created/Modified
+
+| File | Change | Purpose |
+|------|--------|---------|
+| `autoload/services/class.SupplementalFeed.php` | Modified | Dodano `custom_label_1` do SELECT (+WHERE), nagłówka TSV, warunku pustki w foreach i tablicy `implode` zapisu wiersza (+6/-4 linie) |
+| `feeds/supplemental_9.tsv` | Regenerated (runtime artefakt) | Plik artefaktowy — regenerowany przez UI /feeds po deployu |
+
+## Decisions Made
+
+| Decision | Rationale | Impact |
+|----------|-----------|--------|
+| CL1 przed CL3 w TSV (pos 5) zamiast na końcu | Naturalna numeracja, mniejsze ryzyko pomyłek przy czytaniu feedu, zgodność z porządkiem atrybutów GMC | Kolumny CL3/CL4 przesunęły się o 1 w prawo — udokumentowane w AC-4, nie łamie parsera GMC (feed jest z nagłówkiem) |
+
+## Deviations from Plan
+
+### Summary
+
+| Type | Count | Impact |
+|------|-------|--------|
+| Auto-fixed | 0 | — |
+| Scope additions | 0 | — |
+| Deferred | 0 | — |
+
+**Total impact:** Brak odchyleń — plan wykonany 1:1.
+
+### Deferred Items
+
+Brak.
+
+## Issues Encountered
+
+Brak.
+
+## Next Phase Readiness
+
+**Ready:**
+- Łańcuch propagacji custom_label_1 kompletny (UI ↔ DB ↔ feed TSV ↔ GMC)
+- `SupplementalFeed::generate_for_client()` spójny z kolumnami DB dodanymi w Phase 1
+
+**Concerns:**
+- Jeśli kiedyś pojawi się `custom_label_0` / `custom_label_2` → trzeba dodać je analogicznie (obecnie pomijane, zgodnie ze scope)
+- Feed jest generowany ad-hoc z UI /feeds — brak automatycznej regeneracji po zmianie etykiety; do rozważenia cron lub hook po edycji produktu
+
+**Blockers:**
+- Brak
+
+---
+*Phase: 02-supplemental-feed-cl1, Plan: 01*
+*Completed: 2026-04-22*
diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json
index 82019de..4a5c9c1 100644
--- a/.vscode/ftp-kr.sync.cache.json
+++ b/.vscode/ftp-kr.sync.cache.json
@@ -125,8 +125,8 @@
},
"class.Products.php": {
"type": "-",
- "size": 50620,
- "lmtime": 1774556928712,
+ "size": 52633,
+ "lmtime": 1776810435280,
"modified": false
},
"class.Site.php": {
@@ -193,8 +193,8 @@
},
"class.Products.php": {
"type": "-",
- "size": 42493,
- "lmtime": 1774557838303,
+ "size": 44169,
+ "lmtime": 1776810339287,
"modified": false
},
"class.Users.php": {
@@ -725,16 +725,22 @@
"lmtime": 1772116290944,
"modified": false
},
+ "027_campaigns_comments.sql": {
+ "type": "-",
+ "size": 482,
+ "lmtime": 1772671313573,
+ "modified": false
+ },
"demo_data.sql": {
"type": "-",
"size": 21146,
"lmtime": 0,
"modified": true
},
- "027_campaigns_comments.sql": {
+ "028_products_custom_label_1.sql": {
"type": "-",
- "size": 482,
- "lmtime": 1772671313573,
+ "size": 527,
+ "lmtime": 1776810261993,
"modified": false
}
},
@@ -793,8 +799,8 @@
"products": {
"main_view.php": {
"type": "-",
- "size": 79768,
- "lmtime": 1774561858674,
+ "size": 83598,
+ "lmtime": 1776810839722,
"modified": false
},
"product_history.php": {
@@ -942,7 +948,39 @@
},
"tools": {},
"upload": {},
- "xml": {}
+ "xml": {},
+ ".paul": {
+ "governance": {
+ "governance_2026-04-22.jsonl": {
+ "type": "-",
+ "size": 6322,
+ "lmtime": 1776811089208,
+ "modified": false
+ }
+ },
+ "phases": {
+ "01-products-cl1-column": {
+ "01-01-PLAN.md": {
+ "type": "-",
+ "size": 13162,
+ "lmtime": 1776810182537,
+ "modified": false
+ },
+ "01-01-SUMMARY.md": {
+ "type": "-",
+ "size": 5360,
+ "lmtime": 1776811074838,
+ "modified": false
+ }
+ }
+ },
+ "STATE.md": {
+ "type": "-",
+ "size": 1220,
+ "lmtime": 1776811088649,
+ "modified": false
+ }
+ }
}
},
"$version": 1
diff --git a/autoload/services/class.SupplementalFeed.php b/autoload/services/class.SupplementalFeed.php
index d66ae78..31b5cc9 100644
--- a/autoload/services/class.SupplementalFeed.php
+++ b/autoload/services/class.SupplementalFeed.php
@@ -163,12 +163,12 @@ class SupplementalFeed
$labels_updated = self::refresh_bestseller_labels_for_client( $client_id );
$products = $mdb -> query(
- "SELECT p.offer_id, p.title, p.description, p.google_product_category, p.custom_label_3, p.custom_label_4
+ "SELECT p.offer_id, p.title, p.description, p.google_product_category, p.custom_label_1, p.custom_label_3, p.custom_label_4
FROM products p
WHERE p.client_id = :client_id
AND p.offer_id IS NOT NULL
AND p.offer_id <> ''
- AND ( p.title IS NOT NULL OR p.description IS NOT NULL OR p.google_product_category IS NOT NULL OR p.custom_label_3 IS NOT NULL OR p.custom_label_4 IS NOT NULL )",
+ AND ( p.title IS NOT NULL OR p.description IS NOT NULL OR p.google_product_category IS NOT NULL OR p.custom_label_1 IS NOT NULL OR p.custom_label_3 IS NOT NULL OR p.custom_label_4 IS NOT NULL )",
[ ':client_id' => $client_id ]
) -> fetchAll( \PDO::FETCH_ASSOC );
@@ -187,7 +187,7 @@ class SupplementalFeed
throw new \RuntimeException( 'Nie mozna otworzyc pliku: ' . $file_path );
}
- fwrite( $fp, "id\ttitle\tdescription\tgoogle_product_category\tcustom_label_3\tcustom_label_4\n" );
+ fwrite( $fp, "id\ttitle\tdescription\tgoogle_product_category\tcustom_label_1\tcustom_label_3\tcustom_label_4\n" );
$written = 0;
foreach ( $products as $row )
@@ -196,10 +196,11 @@ class SupplementalFeed
$title = self::sanitize_for_tsv( $row['title'] ?? '' );
$description = self::sanitize_for_tsv( $row['description'] ?? '' );
$category = trim( (string) ( $row['google_product_category'] ?? '' ) );
+ $custom_label_1 = trim( (string) ( $row['custom_label_1'] ?? '' ) );
$custom_label_3 = trim( (string) ( $row['custom_label_3'] ?? '' ) );
$custom_label_4 = trim( (string) ( $row['custom_label_4'] ?? '' ) );
- if ( $offer_id === '' || ( $title === '' && $description === '' && $category === '' && $custom_label_3 === '' && $custom_label_4 === '' ) )
+ if ( $offer_id === '' || ( $title === '' && $description === '' && $category === '' && $custom_label_1 === '' && $custom_label_3 === '' && $custom_label_4 === '' ) )
{
continue;
}
@@ -209,6 +210,7 @@ class SupplementalFeed
$title,
$description,
$category,
+ $custom_label_1,
$custom_label_3,
$custom_label_4
] ) . "\n" );
diff --git a/feeds/supplemental_9.tsv b/feeds/supplemental_9.tsv
index 3d29623..2823b52 100644
--- a/feeds/supplemental_9.tsv
+++ b/feeds/supplemental_9.tsv
@@ -1 +1,604 @@
-id title description google_product_category
+id title description google_product_category custom_label_1 custom_label_3 custom_label_4
+shopify_PL_9639387300175_49869993640271 Lampa LED do Roślin 10W 4 Głowice na Klips z Timerem – Doświetlanie Roślin Pełne Spektrum 230V 4636
+shopify_PL_9655509680463_49920248414543 Oświetlenie Szynowe 3-Fazowe Zestaw Biały 8x Reflektor GU10 + Szyna 4m (1m+1m+2m) + Łączniki LAITICA 3006 szynowe
+shopify_PL_15077313937743_54233358532943 Żarówka LED E27 9W z czujnikiem ruchu i zmierzchu 810lm 3000K ciepła biała | czujnik mikrofalowy 170° Samsung LED 30000h 3925 zarowki
+shopify_PL_8689477222735_47410342330703 Programator Czasowy do Gniazdka Mechaniczny Dobowy 24h - Wyłącznik Czasowy 230V 16A 3500W IP20 CE 499997 paused
+shopify_PL_9272159895887_48914930860367 wiosna
+shopify_PL_8784918479183_47924841644367 zarowki
+shopify_PL_8843063460175_48086735880527 szynowe
+shopify_PL_9477497160015_49416260976975 Lampka biurkowa kreślarska AURIQ czarna E27 60W - lampa na biurko metalowa regulowana, szkolna do czytania i nauki | KOBI 594
+shopify_PL_8851617317199_48108103762255 plafony
+shopify_PL_15077317050703_54233367511375 plafony
+shopify_PL_14994636570959_53955145040207 zarowki
+shopify_PL_8815978938703_48015029666127 zarowki
+shopify_PL_8786523128143_47929265029455 zarowki
+shopify_PL_15905513406799_56875068719439 szynowe
+shopify_PL_8904550777167_48246810739023 szynowe
+shopify_PL_9552645718351_49607303299407 szynowe
+shopify_PL_15781263016271_56412379251023 zarowki
+shopify_PL_8920915083599_48291170582863 wiosna
+shopify_PL_9352837628239_49087119327567 wiosna
+shopify_PL_8817578410319_48018017255759 zarowki
+shopify_PL_15077313577295_54233357156687 zarowki
+shopify_PL_8972227412303_48448368247119 zarowki
+shopify_PL_8885757706575_48198870860111 szynowe
+shopify_PL_15113102655823_54323786154319 Kule solarne do ogrodu RGB LED wbijane zestaw 6 szt, kolorowe lampy ogrodowe solarne IP44, 6-8h świecenia, KOBI LED2B 3006 wiosna
+shopify_PL_8727250272591_47678384865615 zarowki
+shopify_PL_8813945585999_48010142482767 zarowki
+shopify_PL_9049561235791_48689589289295 zarowki
+shopify_PL_8783276212559_47920006365519 zarowki
+shopify_PL_9614799176015_49820985753935 zarowki
+shopify_PL_8786522440015_47929264046415 zarowki paused
+shopify_PL_14875055063375_53759971721551 zarowki
+shopify_PL_9614802092367_49820988735823 zarowki
+shopify_PL_15747526492495_56322365063503 plafony
+shopify_PL_8727251222863_47678390075727 zarowki
+shopify_PL_8806897910095_47993902465359 zarowki
+shopify_PL_8839200604495_48076541165903 plafony
+shopify_PL_9243104346447_48826041467215 zarowki
+shopify_PL_15673081659727_56060927902031 plafony
+shopify_PL_8885761999183_48198896976207 szynowe
+shopify_PL_8736012075343_47743111987535 zarowki
+shopify_PL_15112574566735_54322676564303 plafony
+shopify_PL_8916708393295_48277554004303 paused
+shopify_PL_8727249977679_47678380409167 zarowki
+shopify_PL_8967309984079_48426646536527 zarowki
+shopify_PL_8817578672463_48018017485135 zarowki
+shopify_PL_8727250927951_47678387487055 zarowki
+shopify_PL_8806896533839_47993901089103 zarowki
+shopify_PL_8843064836431_48086741877071 szynowe
+shopify_PL_9564232089935_49645702152527 Lampa sufitowa boho BULI S plafon bambusowy pleciony okrągły 40 cm 3x E27 - Kobi Design 4636 plafony
+shopify_PL_8821698855247_48029673816399 szynowe
+shopify_PL_9614799372623_49820985950543 zarowki
+shopify_PL_9564131066191_49645074678095 plafony
+shopify_PL_15747913023823_56323223617871 Lampa do roślin LED 45W – doświetlanie kwiatów i upraw, statyw, 5000K, IP65, 3750lm, kąt świecenia 180° 505285
+shopify_PL_9610167091535_49804919931215 zarowki
+shopify_PL_8739176382799_47764478427471 zarowki
+shopify_PL_8736008831311_47743089705295 zarowki
+shopify_PL_14994636112207_53955143532879 Złota lampa sufitowa wisząca podwójna 2xG9 do salonu i sypialni 4636 bestseller
+shopify_PL_8760538005839_47847814955343 szynowe
+shopify_PL_8784916283727_47924833517903 zarowki zarowki
+shopify_PL_8786522538319_47929264243023 zarowki
+shopify_PL_9046505488719_48669732831567 Maszt Uchwyt do Lampy Solarnej Ulicznej Ogrodowej 38mm, stal, kąt 25°, wysięgnik na rurę ARSA GO 7447
+shopify_PL_9243104084303_48826041073999 zarowki
+shopify_PL_8786522800463_47929264636239 zarowki
+shopify_PL_8909738672463_48259116761423 szynowe
+shopify_PL_8786522276175_47929263882575 zarowki
+shopify_PL_9614799307087_49820985852239 zarowki
+shopify_PL_15506659967311_55613990011215 plafony
+shopify_PL_9639387332943_49869993673039 paused
+shopify_PL_15667308659023_56051174703439 Plafon LED 12W z Czujnikiem Ruchu i Zmierzchu IP54 - Lampa Sufitowa LED z Pilotem 3 Barwy CCT | LAITICA 6274 plafony
+shopify_PL_9272159994191_48914930958671 zarowki
+shopify_PL_9610171744591_49804937429327 zarowki paused
+shopify_PL_15077313347919_54233356763471 zarowki zarowki
+shopify_PL_9614804091215_49820990767439 zarowki
+shopify_PL_15912717615439_56886379053391 szynowe
+shopify_PL_9620951957839_49834026172751 plafony
+shopify_PL_9082977681743_48802550612303 wiosna
+shopify_PL_8786522964303_47929264931151 zarowki
+shopify_PL_8909924893007_48259756097871 szynowe
+shopify_PL_8786520932687_47929260933455 zarowki
+shopify_PL_8813945356623_48010142220623 zarowki zarowki
+shopify_PL_8728440930639_47688707309903 zarowki
+shopify_PL_8815977300303_48015024161103 zarowki
+shopify_PL_9610171220303_49804934938959 zarowki
+shopify_PL_9072358850895_48775013073231 plafony
+shopify_PL_15903082447183_56872283406671 szynowe
+shopify_PL_15112574304591_54322676302159 plafony
+shopify_PL_9614803042639_49820989718863 zarowki
+shopify_PL_8815977234767_48015023866191 zarowki
+shopify_PL_9572648091983_49678841250127 szynowe
+shopify_PL_9473721794895_49404972532047 szynowe
+shopify_PL_15153214226767_54441522954575 plafony
+shopify_PL_8820443349327_48024469733711 zarowki
+shopify_PL_8817577591119_48018016502095 zarowki paused
+shopify_PL_14875050246479_53759962874191 zarowki
+shopify_PL_8806896697679_47993901252943 zarowki zarowki
+shopify_PL_15673042633039_56060862595407 plafony
+shopify_PL_9641533309263_49877759459663 Oświetlenie Szynowe 3-Fazowe - Zestaw 4x Reflektor Szynowy GU10 + Szynoprzewód 2m Czarny | Laitica 3006 szynowe
+shopify_PL_9620943339855_49833981083983 plafony
+shopify_PL_15673158664527_56061078241615 plafony
+shopify_PL_14834537201999_53680693870927 plafony
+shopify_PL_9592529813839_49748249215311 zarowki
+shopify_PL_9646914765135_49887038177615 szynowe
+shopify_PL_9559925653839_49631544443215 zarowki
+shopify_PL_8909738279247_48259115778383 Oświetlenie Szynowe 3-Fazowe Zestaw Czarny 10x Reflektor GU10 + Szynoprzewód 4m - System Szynowy Komplet | LAITICA 6274 szynowe
+shopify_PL_9082854670671_48802426356047 wiosna
+shopify_PL_8784915759439_47924832895311 zarowki
+shopify_PL_9614803796303_49820990472527 zarowki
+shopify_PL_8909924663631_48259754852687 szynowe
+shopify_PL_8784917004623_47924837646671 zarowki
+shopify_PL_8988810772815_48509096264015 wiosna
+shopify_PL_8991183405391_48517000462671 wiosna
+shopify_PL_14932536099151_53840816898383 zarowki zarowki
+shopify_PL_8815978185039_48015026454863 zarowki
+shopify_PL_15010824061263_53989706301775 zarowki
+shopify_PL_8806896959823_47993901515087 zarowki
+shopify_PL_15693368361295_56127255445839 plafony
+shopify_PL_9614799044943_49820985622863 zarowki
+shopify_PL_9572647895375_49678840987983 szynowe
+shopify_PL_9680441803087_49999569944911 szynowe
+shopify_PL_8732192178511_47718102008143 zarowki
+shopify_PL_8784916480335_47924834074959 zarowki
+shopify_PL_8889834471759_48209723162959 zarowki
+shopify_PL_8784915923279_47924833157455 Żarówka LED E27 9W z Czujnikiem Ruchu i Zmierzchu 3000K Ciepła Biała 810lm - Żarówka z Sensorem Ruchu | LAITICA 2306 zarowki zarowki
+shopify_PL_15919819260239_56916818854223 plafony
+shopify_PL_15408909058383_55251047448911 szynowe
+shopify_PL_8929875919183_48313704677711 szynowe
+shopify_PL_8813945651535_48010142548303 zarowki
+shopify_PL_9564232253775_49645702807887 Plafon bambusowy boho BULI M 50 cm - lampa sufitowa rattanowa pleciona do salonu 3x E27 Kobi Design 505285 plafony
+shopify_PL_9610170335567_49804931400015 zarowki
+shopify_PL_8909736083791_48259105718607 szynowe
+shopify_PL_8827035779407_48043153785167 zarowki
+shopify_PL_9655509745999_49920248480079 szynowe
+shopify_PL_15693330088271_56127152849231 plafony
+shopify_PL_15563031118159_55779976708431 paused
+shopify_PL_9655510729039_49920250446159 Oprawka ceramiczna E27 KOBI zestaw 10 szt. 230V do żarówek wewnętrzna 7447
+shopify_PL_9632316129615_49849585697103 zarowki
+shopify_PL_15667660849487_56052565967183 plafony
+shopify_PL_8795113750863_47952977035599 szynowe
+shopify_PL_8681836020047_47361290600783 plafony
+shopify_PL_8928958972239_48310408610127 wiosna
+shopify_PL_14875045724495_53759955534159 zarowki
+shopify_PL_15112575811919_54322678071631 plafony
+shopify_PL_8786521096527_47929261097295 zarowki
+shopify_PL_9610169614671_49804929433935 zarowki
+shopify_PL_8839206240591_48076544672079 plafony
+shopify_PL_8736004374863_47743064572239 zarowki
+shopify_PL_15077314167119_54233359155535 zarowki
+shopify_PL_8727251059023_47678389322063 zarowki
+shopify_PL_15077316821327_54233366757711 zarowki
+shopify_PL_9620949369167_49834015490383 plafony
+shopify_PL_9552645554511_49607303135567 szynowe
+shopify_PL_14758492832079_53557689319759 Licznik Energii Elektrycznej KOBI PMM-1 Watomierz 230V 3680W LCD Miernik Zużycia Prądu kWh W V A Hz 503737
+shopify_PL_8806897615183_47993902203215 zarowki
+shopify_PL_8739176546639_47764483309903 zarowki
+shopify_PL_9564131918159_49645075562831 plafony
+shopify_PL_9610173055311_49804950208847 zarowki
+shopify_PL_14994636538191_53955145007439 zarowki
+shopify_PL_8827036565839_48043154604367 zarowki
+shopify_PL_9610167189839_49804920029519 zarowki
+shopify_PL_9564131164495_49645074776399 plafony
+shopify_PL_8786519327055_47929255919951 zarowki
+shopify_PL_15693341458767_56127184208207 plafony
+shopify_PL_8784917758287_47924840268111 zarowki
+shopify_PL_9614802420047_49820989063503 zarowki
+shopify_PL_14875045986639_53759955829071 zarowki
+shopify_PL_14930224513359_53837782876495 Lampka na Monitor LED 5W USB - Lampka do Monitora i Laptopa Regulowana Barwa CCT Oświetlenie Ekranu | LAITICA 6785
+shopify_PL_8795112997199_47952973398351 szynowe
+shopify_PL_9441914716495_49313748320591 zarowki
+shopify_PL_15747518300495_56322315288911 plafony
+shopify_PL_15112574206287_54322676203855 plafony
+shopify_PL_8817576837455_48018015748431 zarowki
+shopify_PL_8786522374479_47929263980879 zarowki
+shopify_PL_15781303320911_56412550594895 paused
+shopify_PL_15077314920783_54233360892239 zarowki
+shopify_PL_8760537940303_47847814889807 szynowe
+shopify_PL_8760538399055_47847815971151 szynowe
+shopify_PL_8735701139791_47740466790735 zarowki
+shopify_PL_9473709834575_49404919578959 szynowe
+shopify_PL_14994636636495_53955145171279 zarowki
+shopify_PL_8728440144207_47688705540431 zarowki
+shopify_PL_8885758984527_48198882492751 szynowe
+shopify_PL_8728438997327_47688702525775 zarowki
+shopify_PL_9552649388367_49607310442831 szynowe
+shopify_PL_9592531485007_49748251083087 zarowki
+shopify_PL_8795113718095_47952976773455 szynowe
+shopify_PL_8783276409167_47920006955343 zarowki
+shopify_PL_9272159732047_48914930696527 wiosna
+shopify_PL_9641533407567_49877759557967 szynowe
+shopify_PL_8736009453903_47743093473615 zarowki zarowki
+shopify_PL_15673066586447_56060897919311 Lampa sufitowa LED 12W z czujnikiem ruchu i zmierzchu IP54 czarna 3CCT + pilot 2524 plafony
+shopify_PL_9564234416463_49645715095887 plafony
+shopify_PL_9355739398479_49094937837903 plafony
+shopify_PL_8809036120399_47999650169167 zarowki
+shopify_PL_9243104215375_48826041270607 zarowki
+shopify_PL_8784917365071_47924838662479 zarowki
+shopify_PL_8885759803727_48198887244111 szynowe
+shopify_PL_8802501132623_47978309550415 zarowki
+shopify_PL_9082977976655_48802551398735 Zestaw 3x Żarówka LED E14 2W 4000K - Żarówka do Okapu i Lodówki Mały Gwint Neutralna Biała | LAITICA 2306 zarowki zarowki
+shopify_PL_8736003850575_47743062966607 zarowki
+shopify_PL_8826936525135_48042679370063 zarowki
+shopify_PL_9355745263951_49094952845647 plafony
+shopify_PL_8817577132367_48018016043343 zarowki
+shopify_PL_9610172760399_49804946243919 zarowki
+shopify_PL_8909922795855_48259747905871 szynowe
+shopify_PL_8828647965007_48047162491215 szynowe
+shopify_PL_8786520375631_47929259983183 zarowki
+shopify_PL_15077313773903_54233358139727 zarowki
+shopify_PL_8786519556431_47929257460047 zarowki
+shopify_PL_8681837592911_47361298399567 plafony
+shopify_PL_15112574402895_54322676400463 plafony
+shopify_PL_15146553311567_54423344677199 wiosna
+shopify_PL_8795113914703_47952977363279 szynowe
+shopify_PL_9610167451983_49804920914255 zarowki
+shopify_PL_9405991256399_49223629341007 paused
+shopify_PL_15667446088015_56052176159055 plafony
+shopify_PL_15077318787407_54233374949711 plafony
+shopify_PL_9334212034895_49046254387535 Lampa Kula Ogrodowa LED E27 IP65 Imitacja Marmuru Świecąca Zestaw 3 Szt S/M/L KOBI FLORA 4636 wiosna
+shopify_PL_8920914723151_48291168354639 wiosna
+shopify_PL_15672679170383_56060186263887 szynowe
+shopify_PL_15146553409871_54423344808271 wiosna
+shopify_PL_15010818589007_53989696176463 zarowki
+shopify_PL_15919825387855_56916863648079 plafony
+shopify_PL_8817576608079_48018015519055 zarowki
+shopify_PL_8795113357647_47952975659343 szynowe
+shopify_PL_8815978414415_48015028486479 zarowki paused
+shopify_PL_8817578213711_48018017091919 zarowki
+shopify_PL_8786520047951_47929258639695 zarowki
+shopify_PL_9564233793871_49645712245071 plafony
+shopify_PL_14886372475215_53778253775183 plafony
+shopify_PL_9620954218831_49834035708239 plafony
+shopify_PL_9614800486735_49820987064655 zarowki
+shopify_PL_8786521784655_47929263096143 zarowki
+shopify_PL_8786520637775_47929260245327 zarowki
+shopify_PL_15112575025487_54322677088591 plafony
+shopify_PL_15781286707535_56412464906575 zarowki
+shopify_PL_8784916152655_47924833386831 zarowki
+shopify_PL_15757768491343_56345565757775 paused
+shopify_PL_9552647389519_49607306936655 szynowe
+shopify_PL_8786522702159_47929264570703 zarowki
+shopify_PL_8889838862671_48209733321039 zarowki
+shopify_PL_8815979757903_48015033139535 zarowki
+shopify_PL_14827467112783_53659847655759 zarowki
+shopify_PL_8795113488719_47952976281935 szynowe
+shopify_PL_9610172105039_49804940247375 zarowki
+shopify_PL_8976624091471_48466044780879 plafony
+shopify_PL_9680441934159_49999570075983 szynowe
+shopify_PL_8817577787727_48018016665935 zarowki
+shopify_PL_15673013207375_56060805218639 plafony
+shopify_PL_8817576902991_48018015813967 zarowki
+shopify_PL_8784918708559_47924842627407 zarowki
+shopify_PL_8806898565455_47993903087951 zarowki
+shopify_PL_15074468593999_54222036926799 Taśma LED 20M RGB 5050 Smart Home Bluetooth Aplikacja Pilot 16 Mln Kolorów Muzyka Zestaw 2490
+shopify_PL_8813945749839_48010142646607 zarowki
+shopify_PL_8909737001295_48259111027023 szynowe
+shopify_PL_9563111719247_49639706755407 plafony
+shopify_PL_8929874018639_48313688981839 szynowe
+shopify_PL_8815978643791_48015029010767 zarowki
+shopify_PL_15748009263439_56323331424591 Lampa LED do doświetlania roślin 9W – pełne spektrum wzrostu (430–730nm), 180° kąt świecenia, 230V, zioła i uprawy indoor 505285
+shopify_PL_8736010174799_47743098323279 zarowki
+shopify_PL_9049610060111_48689647747407 plafony
+shopify_PL_15673165939023_56061087646031 plafony
+shopify_PL_15608840192335_55924806451535 paused
+shopify_PL_8827038204239_48043156635983 zarowki
+shopify_PL_15919838167375_56917001732431 Plafon sufitowy LED z wentylatorem 48W czarny – wiatrak sufitowy z pilotem, 3CCT + RGB, tryb lato/zima, do salonu i sypialni 2422 plafony
+shopify_PL_8795113128271_47952974184783 szynowe
+shopify_PL_9441914847567_49313748517199 zarowki
+shopify_PL_8795113161039_47952974610767 szynowe
+shopify_PL_8727250796879_47678387061071 zarowki
+shopify_PL_8756010352975_47833799917903 szynowe
+shopify_PL_8802500870479_47978307748175 zarowki
+shopify_PL_8784917168463_47924838039887 zarowki
+shopify_PL_8815978021199_48015026028879 zarowki
+shopify_PL_9610172596559_49804944998735 zarowki
+shopify_PL_9592530174287_49748249641295 zarowki
+shopify_PL_15672611209551_56060112240975 szynowe
+shopify_PL_8806899843407_47993904300367 zarowki
+shopify_PL_9355742019919_49094943801679 plafony
+shopify_PL_14827466981711_53659847197007 szynowe
+shopify_PL_8756010778959_47833801130319 szynowe
+shopify_PL_9039986819407_48649228648783 wiosna
+shopify_PL_8784918380879_47924841480527 zarowki
+shopify_PL_15904990069071_56874473259343 szynowe
+shopify_PL_9552647651663_49607307428175 szynowe
+shopify_PL_9309152411983_48994721268047 plafony
+shopify_PL_15077318951247_54233375768911 plafony
+shopify_PL_8843064443215_48086739910991 szynowe
+shopify_PL_9590747660623_49741743456591 plafony
+shopify_PL_9039987933519_48649232384335 wiosna
+shopify_PL_9355743625551_49094947438927 plafony
+shopify_PL_8843065557327_48086756032847 szynowe
+shopify_PL_15010912993615_53989874598223 zarowki
+shopify_PL_15077317509455_54233368559951 plafony
+shopify_PL_8786522898767_47929264767311 zarowki
+shopify_PL_9641533374799_49877759525199 szynowe
+shopify_PL_8909923483983_48259750592847 szynowe
+shopify_PL_8784916545871_47924834173263 zarowki
+shopify_PL_8889834864975_48209723916623 zarowki
+shopify_PL_8843068047695_48086789652815 szynowe
+shopify_PL_9614801240399_49820987883855 zarowki
+shopify_PL_9641533210959_49877759099215 szynowe
+shopify_PL_8784918020431_47924841185615 zarowki
+shopify_PL_15608811749711_55924735344975 wiosna
+shopify_PL_15024955064655_54019394240847 plafony
+shopify_PL_8972227903823_48448368902479 wiosna
+shopify_PL_8972226920783_48448366739791 wiosna
+shopify_PL_9355745493327_49094953206095 plafony
+shopify_PL_9620944716111_49833988325711 plafony
+shopify_PL_8728437850447_47688698921295 zarowki
+shopify_PL_8817578082639_48018016928079 zarowki
+shopify_PL_9355743363407_49094946980175 plafony
+shopify_PL_9564231303503_49645695893839 plafony
+shopify_PL_8732193358159_47718104695119 zarowki
+shopify_PL_8843067261263_48086786736463 szynowe
+shopify_PL_15419631468879_55297377567055 wiosna
+shopify_PL_14827467080015_53659847459151 szynowe
+shopify_PL_9610168271183_49804923175247 zarowki
+shopify_PL_9564232417615_49645703135567 plafony
+shopify_PL_8827034304847_48043152048463 zarowki
+shopify_PL_15112574468431_54322676465999 plafony
+shopify_PL_14827466916175_53659847131471 szynowe
+shopify_PL_8795114078543_47952978280783 szynowe
+shopify_PL_9564234252623_49645714047311 plafony
+shopify_PL_9608375435599_49797819203919 szynowe
+shopify_PL_15672658067791_56060162310479 szynowe
+shopify_PL_14856989311311_53717638676815 plafony
+shopify_PL_9563112046927_49639707377999 plafony
+shopify_PL_8756012089679_47833804210511 szynowe
+shopify_PL_15010846572879_53989749915983 zarowki
+shopify_PL_15010848145743_53989753585999 zarowki
+shopify_PL_15747628794191_56322817491279 plafony
+shopify_PL_14870024651087_53740267372879 plafony
+shopify_PL_8991184978255_48517004132687 wiosna
+shopify_PL_9043955024207_48658131943759 plafony
+shopify_PL_8854373171535_48115087114575 plafony
+shopify_PL_8786519753039_47929257918799 zarowki
+shopify_PL_15010868429135_53989790187855 zarowki
+shopify_PL_9655783588175_49922225176911 szynowe
+shopify_PL_15010940715343_53989929386319 zarowki
+shopify_PL_8843068473679_48086790799695 szynowe
+shopify_PL_8929875296591_48313699828047 szynowe
+shopify_PL_8851510493519_48107914133839 plafony
+shopify_PL_8904553038159_48246813294927 szynowe
+shopify_PL_8739176808783_47764486586703 zarowki
+shopify_PL_8972225151311_48448364937551 zarowki
+shopify_PL_8909739753807_48259120103759 szynowe
+shopify_PL_8909739327823_48259118858575 szynowe
+shopify_PL_9048580981071_48686939996495 wiosna
+shopify_PL_8839198441807_48076539789647 plafony
+shopify_PL_9608375140687_49797818581327 szynowe
+shopify_PL_9082854768975_48802426388815 plafony
+shopify_PL_9646914797903_49887038210383 szynowe
+shopify_PL_15904640172367_56874079060303 szynowe
+shopify_PL_8976874504527_48466734285135 plafony
+shopify_PL_9564131033423_49645074645327 plafony
+shopify_PL_8851512361295_48107920326991 plafony
+shopify_PL_14837158707535_53686333309263 plafony
+shopify_PL_8784918413647_47924841513295 zarowki
+shopify_PL_8973837861199_48454277529935 plafony
+shopify_PL_9592532762959_49748254425423 zarowki
+shopify_PL_14875046150479_53759956025679 zarowki
+shopify_PL_8828647899471_48047161246031 szynowe
+shopify_PL_8851599622479_48108075385167 plafony
+shopify_PL_9008079143247_48561342906703 wiosna
+shopify_PL_9620944355663_49833985704271 plafony
+shopify_PL_8972226462031_48448366281039 zarowki
+shopify_PL_8964733141327_48419977003343 wiosna
+shopify_PL_9564131492175_49645075136847 plafony
+shopify_PL_9564131393871_49645075038543 plafony
+shopify_PL_8886932046159_48202470719823 szynowe
+shopify_PL_9457662886223_49354682564943 szynowe
+shopify_PL_9552646570319_49607305789775 szynowe
+shopify_PL_9655509713231_49920248447311 szynowe
+shopify_PL_9610168566095_49804924551503 zarowki
+shopify_PL_9457662591311_49354681876815 szynowe
+shopify_PL_14875055685967_53759973032271 zarowki
+shopify_PL_9334414704975_49046976168271 wiosna
+shopify_PL_15112576565583_54322679087439 plafony
+shopify_PL_8784918184271_47924841316687 zarowki
+shopify_PL_9608375533903_49797819859279 szynowe
+shopify_PL_8784917889359_47924840890703 zarowki
+shopify_PL_8909737591119_48259112894799 szynowe
+shopify_PL_9572647928143_49678841020751 szynowe
+shopify_PL_8723702579535_47655610188111 plafony
+shopify_PL_8909740573007_48259123249487 szynowe
+shopify_PL_9457662787919_49354682466639 szynowe
+shopify_PL_8784916873551_47924837155151 zarowki
+shopify_PL_8861810295119_48131870785871 plafony
+shopify_PL_8760538136911_47847815545167 Zestaw oświetleniowy szynowy 3-fazowy czarny, szyna 4m (2x2m) z 8 oprawami GU10 6274 szynowe
+shopify_PL_9655783555407_49922225111375 szynowe
+shopify_PL_8967310967119_48426649649487 zarowki
+shopify_PL_15813165252943_56531066421583 paused
+shopify_PL_8815977464143_48015024587087 zarowki
+shopify_PL_9680441901391_49999570043215 szynowe
+shopify_PL_8919079911759_48287068913999 szynowe
+shopify_PL_9552645292367_49607302807887 szynowe
+shopify_PL_15919812182351_56916758036815 szynowe
+shopify_PL_8976561766735_48465700323663 szynowe
+shopify_PL_14886372409679_53778253054287 plafony
+shopify_PL_14827466883407_53659846934863 szynowe
+shopify_PL_15010955919695_53989954519375 zarowki
+shopify_PL_15608825315663_55924761919823 plafony
+shopify_PL_14875054244175_53759970738511 zarowki
+shopify_PL_8886938599759_48202485399887 Oświetlenie Szynowe 3-Fazowe Zestaw Biały 10x Reflektor GU10 + Szynoprzewód 5m (1m+2m+2m) + Łączniki I+L LAITICA 3006 szynowe
+shopify_PL_8973836091727_48454274023759 plafony
+shopify_PL_14875322450255_53760691044687 zarowki
+shopify_PL_15673106956623_56060992127311 plafony
+shopify_PL_9564233204047_49645708312911 plafony
+shopify_PL_8973835632975_48454273401167 plafony
+shopify_PL_8929874772303_48313697272143 szynowe
+shopify_PL_9339178418511_49054549213519 plafony
+shopify_PL_9245167485263_48832852918607 zarowki
+shopify_PL_15953425137999_57053504897359 szynowe
+shopify_PL_15406551466319_55244975833423 szynowe
+shopify_PL_8972323914063_48448537002319 wiosna
+shopify_PL_14875322286415_53760690880847 zarowki
+shopify_PL_8886939582799_48202487693647 szynowe
+shopify_PL_9614804648271_49820991324495 zarowki
+shopify_PL_14837157396815_53686330622287 plafony
+shopify_PL_9615160082767_49821822353743 Wyłącznik Czasowy do Gniazdka Elektroniczny Timer LCD 16A 3500W - Programator 230V IP20 5159 paused
+shopify_PL_9555035750735_49613756334415 plafony
+shopify_PL_9457662558543_49354681844047 szynowe
+shopify_PL_14886373753167_53778256986447 plafony
+shopify_PL_9552646111567_49607303725391 szynowe
+shopify_PL_14875051229519_53759964348751 zarowki
+shopify_PL_9592531124559_49748250689871 zarowki
+shopify_PL_15608771019087_55924490240335 wiosna
+shopify_PL_9425793417551_49270357786959 szynowe
+shopify_PL_15901957554511_56863889981775 szynowe
+shopify_PL_8976874045775_48466733531471 plafony
+shopify_PL_9620945338703_49833997336911 plafony
+shopify_PL_8909926039887_48259758948687 szynowe
+shopify_PL_9620941209935_49833971024207 plafony
+shopify_PL_15950336819535_57045220032847 plafony
+shopify_PL_9082854637903_48802426323279 wiosna
+shopify_PL_15950434500943_57045418901839 plafony
+shopify_PL_15905323680079_56874834985295 szynowe
+shopify_PL_15019500863823_54005947236687 plafony
+shopify_PL_8929875001679_48313697960271 szynowe
+shopify_PL_15672641323343_56060146319695 szynowe
+shopify_PL_9552645980495_49607303627087 szynowe
+shopify_PL_9614798520655_49820984410447 szynowe
+shopify_PL_9614798684495_49820984541519 szynowe
+shopify_PL_8756011696463_47833803489615 szynowe
+shopify_PL_9614798815567_49820984705359 szynowe
+shopify_PL_8904551432527_48246811656527 szynowe
+shopify_PL_8851609518415_48108090753359 plafony
+shopify_PL_9243104018767_48826040811855 wiosna
+shopify_PL_9563111784783_49639706984783 plafony
+shopify_PL_9355738448207_49094931906895 plafony
+shopify_PL_9563111850319_49639707115855 plafony
+shopify_PL_8714543137103_47583733776719 plafony
+shopify_PL_14837160640847_53686335635791 plafony
+shopify_PL_14837158216015_53686332817743 Lampa wisząca ABRAMO 3 biała - nowoczesna lampa sufitowa loft do salonu i jadalni 6278 plafony
+shopify_PL_9572648583503_49678847902031 szynowe
+shopify_PL_8796284846415_47957833613647 zarowki
+shopify_PL_9563112014159_49639707345231 plafony
+shopify_PL_9535320883535_49561418006863 szynowe
+shopify_PL_9564131950927_49645075595599 plafony
+shopify_PL_9339166228815_49054519361871 szynowe
+shopify_PL_14837157757263_53686332326223 plafony
+shopify_PL_9564232712527_49645705888079 plafony
+shopify_PL_8795112866127_47952972906831 szynowe
+shopify_PL_9309151330639_48994716877135 plafony
+shopify_PL_9564233924943_49645712539983 plafony
+shopify_PL_15956334051663_57060146446671 szynowe
+shopify_PL_14841109774671_53694503289167 plafony
+shopify_PL_14994634768719_53955140223311 plafony
+shopify_PL_8976561439055_48465699111247 szynowe
+shopify_PL_15112575287631_54322677449039 plafony
+shopify_PL_9563111948623_49639707214159 plafony
+shopify_PL_14837157593423_53686332162383 plafony
+shopify_PL_8886933061967_48202473636175 szynowe
+shopify_PL_9355741593935_49094942916943 plafony
+shopify_PL_9564232581455_49645703921999 plafony
+shopify_PL_14846754292047_53704759050575 plafony
+shopify_PL_9355743035727_49094946521423 plafony
+shopify_PL_8843066474831_48086770581839 szynowe
+shopify_PL_9309150282063_48994712518991 plafony
+shopify_PL_9564231860559_49645700546895 plafony
+shopify_PL_14856992522575_53717643952463 plafony
+shopify_PL_9572647960911_49678841053519 szynowe
+shopify_PL_9590750380367_49741752566095 plafony
+shopify_PL_15953524228431_57053823631695 szynowe
+shopify_PL_8728442241359_47688712421711 zarowki
+shopify_PL_8861815112015_48131879862607 plafony
+shopify_PL_9334414934351_49046976692559 wiosna
+shopify_PL_14875322024271_53760690618703 zarowki
+shopify_PL_8854371172687_48115083084111 plafony
+shopify_PL_8929876083023_48313706545487 szynowe
+shopify_PL_9309153722703_48994727199055 plafony
+shopify_PL_9243104313679_48826041434447 zarowki
+shopify_PL_15019473895759_54005916074319 plafony
+shopify_PL_9245167550799_48832852984143 zarowki
+shopify_PL_8908216598863_48254968889679 szynowe
+shopify_PL_9309155393871_48994735849807 plafony
+shopify_PL_9309151560015_48994717630799 plafony
+shopify_PL_9655783293263_49922224750927 szynowe
+shopify_PL_9564231500111_49645698122063 plafony
+shopify_PL_8976874799439_48466735038799 plafony
+shopify_PL_14856992751951_53717644345679 plafony
+shopify_PL_8843068965199_48086791782735 szynowe
+shopify_PL_9355744510287_49094950224207 plafony
+shopify_PL_14994634604879_53955140059471 plafony
+shopify_PL_9243104149839_48826041205071 zarowki
+shopify_PL_8978127225167_48473366888783 plafony
+shopify_PL_8978128044367_48473368658255 plafony
+shopify_PL_8978128535887_48473370100047 plafony
+shopify_PL_9564233531727_49645710704975 plafony
+shopify_PL_9641533342031_49877759492431 szynowe
+shopify_PL_15019500142927_54005945401679 plafony
+shopify_PL_14827466948943_53659847164239 szynowe
+shopify_PL_15693301711183_56127095046479 plafony
+shopify_PL_8909736477007_48259108438351 szynowe
+shopify_PL_8886936568143_48202481205583 szynowe
+shopify_PL_9309155164495_48994734997839 plafony
+shopify_PL_9680442130767_49999570239823 szynowe
+shopify_PL_9563112145231_49639707476303 plafony
+shopify_PL_9590749135183_49741749616975 plafony
+shopify_PL_8909739032911_48259117809999 szynowe
+shopify_PL_15956383990095_57060182360399 szynowe
+shopify_PL_15747616145743_56322765816143 plafony
+shopify_PL_8929876836687_48313721487695 szynowe
+shopify_PL_14841274106191_53694986649935 plafony
+shopify_PL_9564131852623_49645075497295 plafony
+shopify_PL_9564231696719_49645700219215 plafony
+shopify_PL_15747531669839_56322449408335 plafony
+shopify_PL_15956385956175_57060197630287 szynowe
+shopify_PL_8861946773839_48132222189903 plafony
+shopify_PL_14827467014479_53659847229775 szynowe
+shopify_PL_9680441868623_49999570010447 szynowe
+shopify_PL_9083073364303_48802647933263 wiosna
+shopify_PL_8973835403599_48454273040719 plafony
+shopify_PL_9646914830671_49887038243151 szynowe
+shopify_PL_15950198374735_57044943012175 plafony
+shopify_PL_8928958153039_48310405595471 zarowki
+shopify_PL_15943633764687_57017969213775 plafony
+shopify_PL_9355739529551_49094938132815 plafony
+shopify_PL_15953509089615_57053746397519 szynowe
+shopify_PL_15024954671439_54019392405839 plafony
+shopify_PL_9355739562319_49094938296655 plafony
+shopify_PL_15950256210255_57045061992783 plafony
+shopify_PL_15019474846031_54005917024591 plafony
+shopify_PL_8886937223503_48202482417999 szynowe
+shopify_PL_15950382956879_57045301657935 plafony
+shopify_PL_14846755733839_53704764588367 plafony
+shopify_PL_8973836714319_48454275105103 plafony
+shopify_PL_14846753997135_53704758657359 plafony
+shopify_PL_8786522079567_47929263685967 zarowki
+shopify_PL_15950368276815_57045276229967 plafony
+shopify_PL_9535321243983_49561419120975 szynowe
+shopify_PL_15950396326223_57045330690383 plafony
+shopify_PL_9564131721551_49645075366223 plafony
+shopify_PL_15950237532495_57045004812623 plafony
+shopify_PL_15950421131599_57045387182415 plafony
+shopify_PL_15950449606991_57045455569231 plafony
+shopify_PL_15994288865615_57211157774671 Lampy solarne ogrodowe LED słupek kwadratowy 4000K IP44 wbijane zewnętrzne czujnik zmierzchu zestaw 4 szt czarne LAITICA SOLORB 3006 wiosna
+shopify_PL_15950290878799_57045131952463 plafony
+shopify_PL_9355739660623_49094938493263 plafony
+shopify_PL_15994240893263_57210904215887 wiosna
+shopify_PL_8909740245327_48259121742159 szynowe
+shopify_PL_15950353465679_57045256012111 plafony
+shopify_PL_15994146029903_57210687357263 wiosna
+shopify_PL_14846755144015_53704762622287 plafony
+shopify_PL_14841272172879_53694982816079 plafony
+shopify_PL_15994199277903_57210833731919 wiosna
+shopify_PL_14841274171727_53694986748239 plafony
+shopify_PL_14841272140111_53694982750543 plafony
+shopify_PL_14841273090383_53694985273679 plafony
+shopify_PL_15994189971791_57210813743439 wiosna
+shopify_PL_15994274414927_57211020476751 wiosna
+shopify_PL_14841272271183_53694983078223 plafony
+shopify_PL_8978128142671_48473369018703 plafony
+shopify_PL_15994286539087_57211142308175 wiosna
+shopify_PL_15994266419535_57210969948495 wiosna
+shopify_PL_15994321666383_57211363492175 wiosna
+shopify_PL_8988814639439_48509103571279 wiosna
+shopify_PL_16012215779663_57306176749903 wiosna
+shopify_PL_16012239667535_57306222264655 wiosna
+shopify_PL_16014355136847_57313001898319 wiosna
+shopify_PL_16014418772303_57313325187407 wiosna
+shopify_PL_16014377255247_57313106559311 wiosna
+shopify_PL_16014421164367_57313350385999 wiosna
+shopify_PL_16014466875727_57313526219087 wiosna
+shopify_PL_16014388986191_57313132544335 wiosna
+shopify_PL_16014423785807_57313373126991 wiosna
+shopify_PL_16016268656975_57320757035343 wiosna
+shopify_PL_16014349861199_57312979059023 wiosna
+shopify_PL_16014345208143_57312963166543 Słupek solarny ogrodowy LED Aurora - lampa solarna ogrodowa wbijana, cylindryczny, 4000K, IP44, czujnik zmierzchu, czarny, KOBI 3006 wiosna
+shopify_PL_16016236380495_57320548794703 wiosna
+shopify_PL_16014369816911_57313077592399 wiosna
+shopify_PL_16014361231695_57313030897999 wiosna
+shopify_PL_16016248144207_57320580284751 wiosna
+shopify_PL_16014408483151_57313228751183 wiosna
+shopify_PL_16014470447439_57313581007183 wiosna
+shopify_PL_16016152330575_57320166687055 wiosna
+shopify_PL_16016295035215_57320843641167 wiosna
+shopify_PL_16016057139535_57319600030031 wiosna
+shopify_PL_16014458290511_57313445609807 wiosna
+shopify_PL_16014397276495_57313155907919 wiosna
+shopify_PL_16016216817999_57320422932815 wiosna
+shopify_PL_16016278913359_57320781119823 wiosna
+shopify_PL_16016087777615_57319655932239 wiosna
+shopify_PL_16016311320911_57320949317967 wiosna