diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md index 7906521..b1b88e5 100644 --- a/.paul/PROJECT.md +++ b/.paul/PROJECT.md @@ -33,6 +33,9 @@ Plugin Elementor do rezerwacji samochodu na stronie carei.pagedev.pl, zintegrowa - ✓ Accessibility: ARIA dialog, focus trap, aria-live — Phase 4 - ✓ Admin panel: CPT carei_reservation, lista, szczegóły, statusy — Phase 5 +## Validated Requirements (Milestone v0.2) +- ✓ Hero Search Form: mini formularz w hero z pre-fill do modala — Phase 7 + ## Key Decisions | Decision | Phase | Rationale | |----------|-------|-----------| @@ -41,6 +44,8 @@ Plugin Elementor do rezerwacji samochodu na stronie carei.pagedev.pl, zintegrowa | Meta-based status (nie taxonomy) | 5 | Prosty 3-wartościowy enum | | Token retry on 401/403 | 4 | Automatyczny re-auth bez interwencji usera | | Inline display:none for steps | 4 | CSS class conflict resolution | +| Calendar picker opacity:0 stretch | 7 | Ukrycie natywnej ikonki z zachowaniem kliknięcia | +| Search form niezależne API loading | 7 | Dane dostępne od razu, niezależnie od modala | ## Out of Scope (backlog) - Ubezpieczenie (pakiet Soft/Premium) — czeka na API Softra diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md index 32d17bd..d36c855 100644 --- a/.paul/ROADMAP.md +++ b/.paul/ROADMAP.md @@ -30,6 +30,9 @@ CPT `carei_reservation` z automatycznym zapisem po booking, lista z kolumnami i ### Phase 6: Wyjazd zagraniczny — sekcja + wyszukiwarka krajów 🔄 Planning Sekcja "Wyjazd zagraniczny" z checkboxem toggle, wyszukiwarką krajów z flagami/cenami, dodawanie/usuwanie krajów, integracja z API submit. Design z Figmy (node 32-397, 122:1054, 122:1091, 123:1195). +### Phase 7: Hero Search Form — mini formularz w hero ✅ Complete +Kompaktowy widget Elementor "Carei Search Form" osadzany w sekcji hero. Pola: segment, daty od/do, lokalizacja, checkbox zwrotu. Po kliknięciu przycisku otwiera istniejący modal rezerwacji z pre-wypełnionymi danymi. Design z Figmy (Form.svg). + --- ### Backlog (do realizacji gdy API będzie gotowe) diff --git a/.paul/STATE.md b/.paul/STATE.md index 3a84a1a..dc359f6 100644 --- a/.paul/STATE.md +++ b/.paul/STATE.md @@ -3,32 +3,40 @@ ## Current Position Milestone: v0.2 Wyjazd Zagraniczny -Phase: 6 of 6 (Wyjazd zagraniczny — sekcja + wyszukiwarka krajów) — Planning -Plan: 06-01 created, awaiting approval -Status: PLAN created, ready for APPLY -Last activity: 2026-03-30 — Created .paul/phases/06-wyjazd-zagraniczny/06-01-PLAN.md +Phase: 7 of 7 (Hero Search Form) — Complete +Plan: 07-01 complete +Status: Phase 7 complete, Phase 6 plan awaiting execution +Last activity: 2026-04-01 — Phase 7 complete, transitioned Progress: - Milestone v0.1: [██████████] 100% ✅ -- Milestone v0.2: [░░░░░░░░░░] 0% -- Phase 6: [░░░░░░░░░░] 0% +- Milestone v0.2: [█████░░░░░] 50% +- Phase 6 (Wyjazd zagraniczny): Plan created, not applied +- Phase 7 (Hero Search Form): [██████████] 100% ✅ ## Loop Position Current loop state: ``` PLAN ──▶ APPLY ──▶ UNIFY - ✓ ○ ○ [Plan created, awaiting approval] + ✓ ✓ ✓ [Loop complete — Phase 7 done] ``` +## Accumulated Context + +### Decisions +| Decision | Phase | Impact | +|----------|-------|--------| +| Calendar picker opacity:0 stretch | 7 | Natywna ikonka ukryta, kliknięcie zachowane | +| Search form niezależne API loading | 7 | Dwa requesty API na page load | + +### Git State +Branch: main +Feature branches merged: none + ## Session Continuity -Last session: 2026-03-30 -Stopped at: Plan 06-01 created -Next action: Review and approve plan, then run /paul:apply .paul/phases/06-wyjazd-zagraniczny/06-01-PLAN.md -Resume file: .paul/phases/06-wyjazd-zagraniczny/06-01-PLAN.md -Resume context: -- v0.1 complete (5 phases) -- v0.2 Phase 6: wyjazd zagraniczny — wydzielenie WYJAZD ZA GRANICĘ z extras do dedykowanej sekcji z wyszukiwarką krajów -- Dane krajów z istniejącego pricelist API (additionalItems z nazwą WYJAZD ZA GRANIC...) -- Design z Figmy: checkbox toggle + wyszukiwarka z flagami/cenami + karty krajów +Last session: 2026-04-01 +Stopped at: Phase 7 complete +Next action: Execute Phase 6 (/paul:apply .paul/phases/06-wyjazd-zagraniczny/06-01-PLAN.md) or plan new work +Resume file: .paul/ROADMAP.md diff --git a/.paul/phases/07-hero-search-form/07-01-PLAN.md b/.paul/phases/07-hero-search-form/07-01-PLAN.md new file mode 100644 index 0000000..36180ba --- /dev/null +++ b/.paul/phases/07-hero-search-form/07-01-PLAN.md @@ -0,0 +1,263 @@ +--- +phase: 07-hero-search-form +plan: 01 +type: execute +wave: 1 +depends_on: [] +files_modified: + - wp-content/plugins/carei-reservation/includes/class-search-widget.php + - wp-content/plugins/carei-reservation/assets/css/carei-reservation.css + - wp-content/plugins/carei-reservation/assets/js/carei-reservation.js + - wp-content/plugins/carei-reservation/carei-reservation.php +autonomous: false +--- + + +## Goal +Nowy widget Elementor "Carei Search Form" — kompaktowy mini formularz rezerwacji do osadzenia w sekcji hero. Po wypełnieniu i kliknięciu przycisku otwiera istniejący popup formularza rezerwacji z automatycznie uzupełnionymi danymi (segment, daty, lokalizacja). + +## Purpose +Użytkownik widzi formularz już na hero — nie musi szukać przycisku rezerwacji. Skraca ścieżkę konwersji i daje natychmiastowe CTA. + +## Output +- Nowy plik: `class-search-widget.php` (widget Elementor) +- Rozszerzony CSS: style mini formularza +- Rozszerzony JS: logika prefill + otwarcie modala z danymi z mini formularza +- Rejestracja widgetu w `carei-reservation.php` + + + +## Project Context +@.paul/PROJECT.md +@.paul/ROADMAP.md + +## Source Files +@wp-content/plugins/carei-reservation/carei-reservation.php +@wp-content/plugins/carei-reservation/includes/class-elementor-widget.php +@wp-content/plugins/carei-reservation/assets/js/carei-reservation.js +@wp-content/plugins/carei-reservation/assets/css/carei-reservation.css + + + + +## AC-1: Widget renderuje mini formularz +```gherkin +Given strona z osadzonym widgetem "Carei Search Form" w Elementorze +When strona się ładuje +Then widoczny jest kompaktowy formularz z polami: segment (select), daty od/do, miejsce odbioru (select), checkbox "Zwrot w tej samej lokalizacji", przycisk "Złóż zapytanie o rezerwację" +``` + +## AC-2: Selecty ładują dane z API +```gherkin +Given mini formularz jest widoczny na stronie +When strona się załadowała +Then select segmentu zawiera segmenty z API (segments-branches-map) +And select lokalizacji filtruje się po wybranym segmencie +``` + +## AC-3: Przycisk otwiera modal z pre-wypełnionymi danymi +```gherkin +Given użytkownik wypełnił mini formularz (segment, daty, lokalizacja) +When kliknie "Złóż zapytanie o rezerwację" +Then otwiera się istniejący modal rezerwacji +And pola segment, data od, data do, miejsce odbioru są automatycznie wypełnione wartościami z mini formularza +And checkbox zwrotu jest zsynchronizowany +And extras/pricelist ładują się automatycznie (jak po ręcznym wypełnieniu) +``` + +## AC-4: Design zgodny z Figmą +```gherkin +Given mini formularz jest renderowany +When wyświetla się na desktop +Then tło #EDEDF3, zaokrąglone rogi 14px, border #2F2482/10% +And pola mają białe tło, zaokrąglone rogi +And przycisk jest czerwony (#FF0000) z białym tekstem, pełna szerokość +And font Albert Sans, tytuł bold fioletowy (#2F2482) +``` + + + + + + + Task 1: Widget Elementor + HTML mini formularza + wp-content/plugins/carei-reservation/includes/class-search-widget.php, wp-content/plugins/carei-reservation/carei-reservation.php + + 1. Utworzyć `class-search-widget.php` z klasą `Carei_Search_Widget extends \Elementor\Widget_Base`: + - name: `carei-search-form` + - title: `Carei Search Form` + - icon: `eicon-search` + - categories: `['general']` + - style/script depends: te same co główny widget (carei-reservation-css, carei-reservation-js) + - Brak kontrolek Elementor (formularz jest statyczny) + + 2. Metoda `render()` generuje HTML: + - Container `div.carei-search-form` z tłem + - Tytuł: `

Wypełnij formularz rezerwacji.

` + - Select segmentu: `` i `id="carei-search-date-to"` z ikonkami kalendarza i labelami "Od kiedy?" / "Do kiedy?" + - Select lokalizacji: `` z label "Zwrot w tej samej lokalizacji" + - Przycisk: ` + +