From e860f47d357cb0773944c3e766503a645a999cf1 Mon Sep 17 00:00:00 2001 From: Viktor Miller Date: Fri, 16 Jan 2026 10:53:00 +0900 Subject: [PATCH] docs: initialize umzugsliste MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WordPress plugin for Siegel Umzüge moving list form. Creates PROJECT.md with requirements and constraints. --- .planning/PROJECT.md | 77 +++++++++++++++++++++++++++++++++++++++++++ .planning/config.json | 26 +++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 .planning/PROJECT.md create mode 100644 .planning/config.json diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md new file mode 100644 index 0000000..23c02a2 --- /dev/null +++ b/.planning/PROJECT.md @@ -0,0 +1,77 @@ +# Umzugsliste + +## What This Is + +A WordPress plugin providing a digital moving list form for Siegel Umzüge. Customers calculate the volume of their move by entering inventory items room-by-room, then request quotes for moving services. This plugin migrates the legacy standalone `liste.php` script into a secure, integrated WordPress solution. + +## Core Value + +Email format identical to legacy — office staff workflow depends on the exact HTML table structure. + +## Requirements + +### Validated + +(None yet — ship to validate) + +### Active + +- [ ] Plugin infrastructure with CPT `umzugsliste_entry` for storing all submissions +- [ ] Settings page with receiver email, captcha config (reCAPTCHA v2/v3/hCaptcha), thank you URL +- [ ] Shortcode `[umzugsliste]` renders form matching legacy structure +- [ ] Volume calculations (cbm) matching legacy logic exactly +- [ ] Captcha integration with all three providers +- [ ] Legacy HTML table email format generation +- [ ] i18n support (German primary, English secondary) +- [ ] Form submission saves to CPT before email (data safety) +- [ ] Inline form validation (not JS alerts) + +### Out of Scope + +- PDF generation — email HTML is the only output format +- Customer accounts — simple form submission, no login +- Furniture list admin editing — future feature (extract as-is for v1) +- Frontend redesign — keep existing form look, wrap it properly + +## Context + +**Legacy Code Location:** `/Users/vmiller/Local Sites/siegel-liste/app/public/liste/` +- `liste.php` — Main form with email sending (PHPMailer/SMTP) +- `liste_ENG.php` — English version +- `functions.inc.php` — Email HTML generators, date selectors +- `css/` — Foundation CSS + custom.css +- `js/` — Foundation JS + +**Legacy Structure:** +- 7 room sections: Wohnzimmer, Schlafzimmer, Arbeitszimmer, Bad, Küche/Esszimmer, Kinderzimmer, Keller +- Each furniture item: quantity (v prefix), cbm value (q prefix), montage option (m prefix) +- Additional work sections: Montage, Schrank, Elektriker, Dübelarbeiten, Packarbeiten, Anfahrt +- Sonstiges free text section + +**Environment:** +- Local by WP Engine for development +- WordPress site uses Salient theme +- Plugin directory: `wp-content/plugins/umzugsliste/` + +## Constraints + +- **Theme**: Must integrate with Salient theme +- **Language**: German primary, English secondary +- **Email Format**: Must match legacy HTML table structure exactly +- **Email Delivery**: Use wp_mail() with SMTP plugin support +- **Encoding**: UTF-8 (convert from legacy ISO-8859-1) +- **Access**: Editors and above can view CPT entries +- **Admin UI**: Top-level menu (Umzugsliste with Entries + Settings) + +## Key Decisions + +| Decision | Rationale | Outcome | +|----------|-----------|---------| +| Extract furniture data as static config | Matches legacy, editing is future feature | — Pending | +| Support all 3 captcha providers | Flexibility for admin preference | — Pending | +| Use wp_mail() not PHPMailer directly | WordPress integration, SMTP plugins work | — Pending | +| Inline validation not JS alerts | Modern UX improvement over legacy | — Pending | +| Redirect to configurable thank you URL | Better UX than inline confirmation | — Pending | + +--- +*Last updated: 2026-01-16 after initialization* diff --git a/.planning/config.json b/.planning/config.json new file mode 100644 index 0000000..e252b38 --- /dev/null +++ b/.planning/config.json @@ -0,0 +1,26 @@ +{ + "mode": "yolo", + "depth": "standard", + "parallelization": { + "enabled": true, + "plan_level": true, + "task_level": false, + "skip_checkpoints": true, + "max_concurrent_agents": 3, + "min_plans_for_parallel": 2 + }, + "gates": { + "confirm_project": false, + "confirm_phases": false, + "confirm_roadmap": false, + "confirm_breakdown": false, + "confirm_plan": false, + "execute_next_plan": false, + "issues_review": false, + "confirm_transition": false + }, + "safety": { + "always_confirm_destructive": true, + "always_confirm_external_services": true + } +}