-
released this
2026-05-27 23:06:45 +02:00 | 53 commits to main since this releaseBeta milestone. The Newsletter module is now feature-complete and the toolkit has crossed alpha into beta. Combined with the SMTP, Logging, Contact Form and Captcha modules, the plugin now covers the full email lifecycle: collect → confirm → segment → send → track → engage — without leaving WordPress, without a third-party SaaS, and without bloated dependencies (~800 KB zip, no Composer, no React build).
This release rolls up every commit since v0.3.3 into one beta tag.
📬 Newsletter module — feature complete
Composer + audience
- Compose newsletters in Gutenberg; each newsletter lives on its own card with sender, audience, schedule and tracking settings inline. No metaboxes, no jumping between screens.
- Smart audience picker — pick one or several lists from a grouped dropdown (Subscribers / WP users, system rows last). Live recipient count, with a clear − N opted out indicator showing exactly who will be skipped.
- Default = no one. New newsletters target nobody until you pick a list. Can't accidentally email everyone before making a conscious choice.
- Opt-out review with All / Opted-in / Opted-out tabs in the Show list preview, per-row Send anyway / Exclude overrides. Bypass opt-outs checkbox for legitimate operational messages (with strong warning at send time).
- Schedule sends or send now. Pause / resume / abort mid-send. AJAX + Cron pipeline with SMTP circuit-breaker so a flaky relay pauses the send instead of looping.
Tracking
- Open + click tracking per recipient + per newsletter via HMAC-signed REST endpoints.
- Cold-subscriber detection (sends-since-last-engagement) + bulk unsubscribe.
- RFC 8058 one-click unsubscribe in headers — works with Gmail / Apple Mail's native unsubscribe button.
- IP anonymised before storage (IPv4 /24, IPv6 /48); user-agent stored only on opt-in.
Lists
- Two kinds: Subscribers lists (manual membership) and WP users lists (rule-based — by role, WooCommerce customer status, active WooCommerce subscriptions, or a custom rule plugged in via filter).
- System lists out of the box: All subscribers, All WP members, All WC customers, Active WC subscribers.
- Public / Private visibility. Public lists surface on the subscriber preferences page for self-join; private lists stay admin-managed.
- Per-list exclusions — pin specific users out even when a rule matches.
- Rule preview with sample matched users, pagination, and "− N opted out" hint.
Subscribers admin
- Bulk UX: checkbox column, bulk actions toolbar (Trash / Restore / Delete permanently), per-admin column picker (15 columns).
- CSV / paste import honouring every profile field (email, name, phone, gender, postal address, …).
- Detail modal with prev/next nav, inline list-membership editor.
- Subscriber self-edit: name, phone, postal address, gender editable from the preferences page; email change requires click-to-confirm on the new address with notice to the old.
- Subscription emails (confirmation / reminder / refuse-ack) editable in Gutenberg with multiple variants per purpose and a clear "active template" badge.
Categories → Lists merge ✨
- The legacy Categories concept has been retired. Every former category becomes a public Subscribers list automatically; subscribers who hadn't opted out are carried over. Simpler model: one segmentation primitive instead of two overlapping ones. Subscribers' preferences page now reads Mailing lists instead. Schema migration is automatic and idempotent — if you didn't use categories, the change is invisible.
📝 Subscribe forms (Newsletter module)
- Drag-and-drop form builder with multi-column rows, undo/redo, autosave.
- Field types: text, email, phone (with international country picker + auto-detect), gender (dedicated field type with canonical M/F/Other/Prefer-not options), dropdown, list picker, captcha, submit.
- Field "Maps to" chip on every field — wire it once to a subscriber column (first_name, address_postcode, gender, …) and the submission populates the right slot.
- Quick-add presets: drop Full name / First+Last name / Phone / Postal address and several pre-mapped fields land in one click.
- Full-form templates to start fast: Email-only, Email + name, Contact basics, Full profile.
- Default lists per form (multi-pick) — new subscribers auto-join the picked lists.
- Anti-spam stack: honeypot + time-trap + captcha out of the box.
📩 Contact Form
- File upload field with two-tier security blacklist (always-blocked PHP/ASP/JSP; opt-in for HTML/SVG/JS/EXE), content-type sniffing, image EXIF stripping, per-field delivery mode (save on server / attach to email / both), per-file + total size caps, image thumbnails.
- Submissions inbox rewritten: bulk actions toolbar (mark spam / restore / delete), per-row inline actions, detail modal with ← → arrows + keyboard nav, AJAX filters + search, per-status retention, manual cleanup, captcha-outcome filter.
- Notification email footer carries View in admin / Mark as spam / Delete buttons; spam + delete land on a confirm page (no silent state mutation from email link clicks).
- Per-reason spam recording: keep honeypot/time-trap rows out of the inbox by default, captcha-failed rows in (legitimate users can fail captcha).
- International phone field with country-code picker + flag emoji + auto-detect from browser locale; submits in E.164.
- Theme-aware form text colors — fixes contrast on dark page sections by reading WP's contrast preset for inputs only, inheriting for labels.
📊 Email Logs
- Detail modal with prev/next — click a row's eye icon and step through entries with ←/→ keys.
- Unified Storage modal (Retention + Display + Manual cleanup) replacing the old anchored popovers.
- Shared
RetentionTogglewidget — checkbox + days input, the same idiom Submissions inbox now uses too.
🛡️ Captcha
- Cross-feature wiring: same captcha service feeds Contact Form + Newsletter signup + WordPress comments + lost-password + registration. Per-context routing with Inherit default fall-through.
- Per-action nonces on every destructive endpoint (defense in depth on top of nonces + caps).
- Built-in Math + Image challenges; hCaptcha provider shipped; Turnstile / reCAPTCHA designed to plug in (auto-discovery).
🎨 Admin UX overhaul (Phases 1-5)
- Single page-header chrome across every plugin page:
[Title] [Toggle] [+ New X] →→→ [Tools] | [Nav]. - Design tokens in
admin-base.css— every color, radius, shadow, transition, spacing, input height. Adapt one, adapt all. Sets the stage for the upcoming Light / Dark / LRob theme system. - Shared primitives (
.lrob-etk-card,.lrob-etk-data-table,.lrob-etk-filter-bar,.lrob-etk-icon-btn,.lrob-etk-detail-strip,.lrob-etk-menu--fixed,.lrob-etk-test-result, …) replacing per-module duplicates. window.confirm()retired plugin-wide — every destructive action now goes through an in-modal or inline confirm with palette-aligned styling and Escape / backdrop dismiss.- Autosave everywhere — no explicit Save buttons in admin UIs; every editable field autosaves on blur/change with a Saving… / ✓ Saved / ✗ Error badge near the X button of the modal it sits in.
- Plugin-wide save-status mechanic — modals listen for a bubbling
lrob-etk:save-statusevent, every autosave path dispatches it. - Header buttons categorised: cross-page navigation (muted) vs. page tools (filled), with a vertical divider — admins know at a glance which buttons leave the current page.
- + N other abbreviations dropped — pickers show the full list.
🌍 Languages
- 🇬🇧 English (source) · 🇫🇷 French — 100% coverage (1692 strings)
⬆️ Upgrading
- Schema migration v11 → v14 runs automatically on activation. Migrates categories into lists, drops legacy artifacts, adds subscriber-profile columns + email-change confirm columns. Data preserved.
- Subscribers' preferences URLs stay valid across the migration (tokens are stable).
AUTH_KEYrotation breaks stored SMTP / captcha credentials (encryption keys derived fromAUTH_KEY). If you rotate, re-enter affected credentials.- Auto-update from earlier v0.3.x: this release is picked up by the auto-updater (not flagged as prerelease).
Status
Beta — the surface is stable, the schema is stable, the toolkit drives real sends on production sites. Bug reports + UX feedback welcome on GitHub Issues.
Coming next: theme system (Light / Dark / LRob / Auto), statistics overhaul (Newsletter view + global Email Toolkit dashboard tiles), universal email tracking on Email Logs, marketing automation, bounce handling, GDPR toolkit. See
todo.md.— LRob
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads