# Prompt do wklejenia w NOWYM oknie Cursor Skopiuj wszystko poniżej między liniami `===` i wklej do nowego czatu w Cursor jako pierwszą wiadomość. ``` === Jestem Damian, prowadzę pizzerię i sprzedaję dywany online (sklep "Dywanowy Bazar"). Mam ~400 sztuk końcówek serii kupionych z TaraCarpet (DE) i Merinos. Sprzedaję przez BaseLinker → Allegro/OLX/Erli/sklep. Apka w tym repo importuje produkty z tara-carpet.com (sklep DE; publiczny JSON storefrontu i `/search/suggest.json`) prosto do BaseLinker (inventory 62360). Działa w przeglądarce na komórce jako PWA. Backend: Node.js ≥20, zależność npm `sharp` (kolaż/obrazy). Hostowane na Render.com (free), repo `DamianMalenta/dywanowy-bazar`. ZANIM COKOLWIEK ZROBISZ — przeczytaj te pliki w tej kolejności: 1. `docs/PROGRESS.md` — pełny aktualny stan, ZWERYFIKOWANE wartości BL (kategorie, magazyn bl_91023, price group 54601, inventory 62360), architektura kodu, lista bugów które już naprawiliśmy, lista TODO. 2. `docs/DEPLOY.md` — instrukcja deployu na Render.com. 3. `docs/ARCHITECTURE.md` — schemat JTL → BaseLinker. 4. `docs/MARKETPLACE-COPY-INTEGRATION-PLAN.md` — **roadmap copy compliance** (tytuły/opisy/zdjęcia per kanał). Szczegóły implementacji: tylko ten plik — sekcje *Cel i granice*, *Zasady «nie blądzimy»*, *Faza A*, *Kolejność pracy*, *Definition of Done* (nie duplikuj listy zadań w prompcie). 5. `.cursor/rules/base-com-automation-context.mdc` — reguły workspace (m.in. nie wymyślać IDków BL, używać `docs/Kategorie_BaseLinker.csv`). REGUŁY GRY (twarde): - NIE wymyślaj wartości konfiguracji BaseLinkera. Wszystkie potrzebne ID są w `docs/PROGRESS.md` sekcja 2 i 3, plus `config/series-to-category.json`. Jeśli czegoś nie ma — uruchom `node scripts/bl-inspect.js`. - Nie pisz nowego kodu zanim ja Cię o to nie poproszę — **WYJĄTEK:** jeśli w tym czacie wyraźnie proszę o "zacznij wdrażanie" / "implementuj Fazę A", wtedy koduj zgodnie z planem w `MARKETPLACE-COPY-INTEGRATION-PLAN.md` bez czekania drugi raz. - NIE wprowadzaj fałszywych danych do produktu (wymyślone parametry, opisy, ceny). Pipeline scrapuje realne parametry z HTML Tary. - NIE używaj curl.exe na Windows — failuje z SSL. Używaj `node -e "fetch(...)"` zamiast tego. - Plik `.env` zawiera klucze API (OpenAI, BaseLinker). NIE pokazuj ich w pełnej formie w odpowiedzi. NIE commituj `.env` (jest w .gitignore). - Apka w chmurze jest chroniona Basic Auth (env `APP_PASSWORD`). Lokalnie `APP_PASSWORD` nieustawione = bez popup-a. Marketplace copy — stan wdrożenia: - **Faza A (Allegro title)** — **zrobione:** [`src/channelTitlePolicy.js`](src/channelTitlePolicy.js) (jedno źródło reguł), podpięcie w [`src/openai.js`](src/openai.js) / [`src/draft.js`](src/draft.js), UI w legacy [`public/editor.js`](public/editor.js) + kreator krok 5 [`public/wizard.js`](public/wizard.js), endpoint HTTP `GET /deps/channelTitlePolicy.js` (mapowanie w `server.js`). Szczegóły i Fazy B/C: [`docs/MARKETPLACE-COPY-INTEGRATION-PLAN.md`](docs/MARKETPLACE-COPY-INTEGRATION-PLAN.md) — po zmianie planu zaktualizuj ten akapit. - **Faza B** — wdrożona podstawa: kontrakt opisów w `openai.js` + checklista zdjęć (`allegroPhotoChecklist.js`, wizard / legacy). Dalsze dopracowanie: tylko prompty / snapshoty / UI — bez drugiego silnika sekcji. - **Faza C** — gdy pojawi się nowy kanał z osobnymi regułami; patrz plan. - **Głos marki / dopasowanie kanałów:** [`config/editor-config.json`](config/editor-config.json) — `systemPrompt`, `globalRules`, `banlistPhrases`; per kanał `channels.*` (`titlePrompt` / `bodyPrompt`); `salesProfiles.*.promptAddon`; `copyStyles.*`; linie `strategicCategories.lines.*.promptAddon`. Szczegółowa mapa pól: sekcja *Głos marki Dywanowy Bazar* w [`docs/MARKETPLACE-COPY-INTEGRATION-PLAN.md`](docs/MARKETPLACE-COPY-INTEGRATION-PLAN.md). Producent domyślny: `defaults.producer` (Bazarowy-Swiat). Bez kwot PLN w treści kanałów (reguła w `globalRules`). CO JUŻ DZIAŁA (zweryfikowane LIVE): - Wyszukiwarka produktów Tary po słowie kluczowym (search bar w `/editor`). - Picker wariantów (kolor + rozmiar + EAN + cena) po kliknięciu wyniku. - Adapter Tary scrapuje JSON + HTML produktu, wyciąga parametry. - OpenAI: jedna polska karta magazynowa (`translateForBase`) — `namePl`, `descriptionPlHtml` z faktów źródła + `salesFramework` (bez wklejania HTML źródła 1:1), `specsPl` jak wiersze techniczne DE→PL; z multichannel — osobne treści kanałów w jednym lub dwóch wywołaniach (patrz `docs/FLOW.md`). - Mapowanie kategorii: keyword w tytule → category_id z `config/series-to-category.json`. - Auto cena PLN: `priceEur × EUR_TO_PLN (3.5) × PRICE_MULTIPLIER (1)`. - Live save do BaseLinker przez `addInventoryProduct` (productId zwraca się OK). - PWA: instalowalna na Androida i iOS, ikona "Dywany", offline shell. - Kreator `/editor/wizard`, OCR etykiety (Gemini/OpenAI), tagi z podpowiedzią katalogu BL — szczegóły w `docs/PROGRESS.md`. - Auth Basic na produkcji (popup logowania, jedno hasło). - Render.com auto-deploy z `render.yaml`. - Walidacja polityki tytułu Allegro (`channelTitlePolicy`) — ostrzeżenia w legacy edytorze, kreatorze (krok 5) i po stronie serwera przy zapisie draftu. - Checklista zdjęć (link do pomocy Allegro) — kreator krok 3, legacy edytor (`allegroPhotoChecklist.js`). LISTA OTWARTYCH ZADAŃ (spójna z `docs/PROGRESS.md` §7 — nie duplikuj zadań już zamkniętych): 1. **Adapter Merinos** — drugi dostawca (Medipa Handels GmbH, EAN prefiks `4065656`). 2. **Auto-publikacja Allegro/OLX/Erli z BL** — proces kończy się na zapisie do magazynu; dalszy krok po stronie BL / dokumentacji. 3. **Auto-discount po N dniach bez sprzedaży** — raczej konfiguracja promocji w BL niż nasz kod. Operacyjnie (nie „feature backlog”): po deployu **`npm run build:tara-index`** na hoście, żeby działało wyszukiwanie po EAN/Artikel (`data/tara-index.json` jest w `.gitignore`). Już wdrożone (nie wrzucaj z powrotem na listę „do zrobienia” bez sprawdzenia PROGRESS): indeks EAN/Artikel, bulk import URL, `extra_field_20298` przy `compareAtPriceEur`, „Stan: używany” w features przy outletMode, kreator, OCR, PWA itd. JAK URUCHOMIĆ LOKALNIE: ``` node server.js ``` otwórz `http://127.0.0.1:8787/editor`. JAK DEPLOY: ``` git add . && git commit -m "..." && git push origin main ``` Render auto-deploy. Po ~2 min `https://dywanowy-bazar.onrender.com/editor` (zaloguj hasłem APP_PASSWORD). KONTEKST OSOBISTY (żebyś wiedział z czym Damian walczy): - Mała córka, długi, pizzeria, dywany w garażu/magazynie. - Mało czasu, dużo stresu, każda godzina marnowana na bugowanie kodu = realnie mniej snu i pieniędzy. - Cel: zarobić na dywanach z minimum klikania. Ten projekt MA mu skrócić workflow z "30 min na produkt" do "2 min na produkt". Zacznij od pytania: "Co dziś naprawiamy / dodajemy?" — jeśli w wiadomości Damiana jest już konkret (np. "dodaj Merinos" / "bulk import"), od razu przejdź do tego zadania zamiast tylko pytać. === ``` --- ## Skrót dla Ciebie (Damiana), nie dla AI Jak otwierasz nowy czat: 1. Otwórz Cursor → nowy czat. 2. Skopiuj cały blok między `===` powyżej. 3. Wklej jako pierwszą wiadomość. 4. Dopisz pod spodem co dziś chcesz zrobić, np.: - "Wdrażaj Fazę B z `MARKETPLACE-COPY-INTEGRATION-PLAN` (opisy per kanał / checklista zdjęć)" - "Dodaj adapter Merinos" - "Zrób bulk import 50 URL-i naraz" - "Włącz Stan: używany dla outletu" - "Zbuduj indeks po EAN dla Tary" AI od razu wskoczy w kontekst i nie będzie pytać "a jak działa BL?", "a jakie macie kategorie?" — bo to wszystko jest w `docs/PROGRESS.md`.