• v0.6.4 c7bb058a5d

    v0.6.4 Stable

    Robin released this 2026-08-03 03:14:11 +02:00 | 3 commits to main since this release

    Design your forms, then reuse that design everywhere

    0.6.3 gave every contact and newsletter signup form a click-driven style editor. 0.6.4 turns it into a design system.

    Save a look, reuse it, make it the default

    Build a form you like, hit + next to any dropdown, and give it a name. That preset now appears on every form — contact forms and newsletter signup forms share one library, so a colour scheme you saved on one is available on the other.

    Set a preset as your default and it applies to every form that hasn't overridden that setting. Changing your brand colour becomes one edit instead of twenty. A new Styles button in the toolbar (and inside Defaults) opens a manager where you can rename, delete, or promote any preset.

    The Defaults screen now hosts the full editor too — it used to expose three lonely text fields out of twenty available settings.

    Shadows, effects and a lot more control

    • Shadows are their own thing now — form, fields and button, each None → Strong, plus an accent glow. Field and button shadows previously couldn't be changed at all.
    • Effects covers interaction: focused field, field hover, button hover, and an always-on form ambience — Glow, Breathe, Aurora, Rainbow, RGB spin, Plasma, Ember. Each with its own glow size and speed, from Frantic to Glacial.
    • Padding for fields and buttons, and every length is now set with a number box and a unit dropdown — no more guessing whether 8 px was valid (it wasn't).
    • Controls appear only when they're relevant, so the panel stays readable rather than showing a wall of settings that do nothing.

    Four new colour schemes (Midnight, Terminal, Sand, Mint) and nine new presets, including Neon night, Paper, Spa, Bubblegum and Terminal.

    Forms that celebrate

    When a message is sent, the form is replaced by the success message — and you choose how it arrives: a letter flying off, a rocket launch with smoke, confetti with real physics, or a fireworks display with multiple shells. Pick a speed, press play to preview it right in the editor, or turn it off entirely.

    Everything honours prefers-reduced-motion: visitors who ask for less motion keep the colour and the meaning, and lose only the movement.

    Accessibility and correctness

    • Every built-in colour scheme now meets WCAG AA contrast. Some helper and button text sat as low as 2.5:1 and was genuinely hard to read.
    • Fonts and label emphasis actually apply. Body font, label font and label emphasis were silently discarded when saved — they looked right in the preview and reverted on reload.
    • A blocked anti-spam check now says so. If a cookie-consent banner or blocker prevents the captcha from loading, visitors are told immediately instead of having their message rejected after they've written it.
    • Buttons no longer shift under your cursor on hover, which made them harder to click.

    Under the hood

    Releases and updates now come from git.lrob.net.


    Upgrading: no action needed, and no existing form changes appearance. Everything new is opt-in.

    Downloads
  • v0.6.3 09babaea75

    Robin released this 2026-08-01 04:14:08 +02:00 | 17 commits to main since this release

    🎨 Style your forms without writing CSS — first step

    Every contact form and newsletter signup form now has a Style section in its
    card, with a live preview:

    • A Preset dropdown (Default / Dark / Minimal / Card / Ocean / Forest /
      Sunset) that sets the whole look in one click.
    • Behind a Customize toggle, one dropdown per axis — colour scheme
      (Auto / White / Dark / Ocean / Forest / Sunset / Deep blue / Purple party /
      Pink), roundness, spacing, font size, label font, body
      font
      , label emphasis — each with an Edit button that opens the
      individual knobs (colour pickers, sizes) when you want exact control.
    • Anything you tweak by hand flips the preset to Custom; the preview repaints
      as you go.

    This is a first step, not the finished feature. More customization is being
    added in the next releases — saved custom presets, the same editor on the global
    defaults, effects and animations, and inheriting your theme's palette. What ships
    today already covers the common cases; expect the panel to grow.

    Three things to know when you update:

    1. Newsletter signup forms now actually apply their style. They previously
      carried a style setting that did nothing. If you had picked one, those forms
      will change appearance.
    2. If you wrote custom CSS targeting the old preset classes
      (preset--minimal, preset--soft, preset--contrast), it no longer applies
      — presets are now data, not CSS classes.
    3. The CSS variable --lrob-etk-form-error* is renamed to
      --lrob-etk-cf-error*.

    No database migration, no settings to redo.

    🛡️ Captcha fix

    An unfilled homemade captcha (pictogram / math) no longer produces a cryptic
    JSON error. The form shows a single inline "Please complete the anti-spam
    check"
    under the captcha and doesn't submit. And if a server notice pollutes
    the response, the frontend now salvages the real message instead of failing on a
    parse error.

    🏠 New home: git.lrob.net

    Development has moved to
    git.lrob.net/WP/email-toolkit
    source, releases and issue tracker. Automatic updates now come from there, so
    this is the release that carries your installation across. New versions are also
    picked up as soon as WordPress runs its next check, instead of up to an hour
    later.

    Bug reports and suggestions: git.lrob.net/WP/email-toolkit/issues
    or lrob.fr/contact.

    Downloads
  • v0.6.2 630124b47c

    UltimateByte released this 2026-06-28 12:20:10 +02:00 | 20 commits to main since this release

    Smoother, more resilient forms

    This release hardens contact forms and newsletter signup forms against a frustrating real-world case — visitors whose browser, privacy extension, or cookie-consent setup blocks the anti-spam widget from loading.

    Your forms keep working when the captcha can't load. If a content/cookie blocker stops the Cloudflare Turnstile (or hCaptcha / reCAPTCHA) widget from appearing, the form now tells the visitor right away — "the anti-spam check couldn't load — it's likely blocked by your cookie settings or a content blocker" — instead of letting them fill everything out and hit a cryptic error on send. The form simply won't submit until the check is available, so nobody gets a confusing dead-end (or a scary server error page). Visitors on slow connections are unaffected — the form waits patiently for the widget to load rather than crying wolf.

    Messages now appear where you're looking. Success and error messages moved to the bottom of the form, right under the Send button — so on a long form the confirmation no longer scrolls off the top out of view. The page only nudges to the message when it isn't already on screen.

    The "Picture recognition" captcha is legible everywhere. Its icons were turning white-on-white on light form themes; they now stay sharp against whatever background your form uses.

    Spam handling stays tight: bot submissions that skip the captcha entirely are still rejected — they just no longer clutter your submissions inbox, which now keeps only genuine attempts.

    Downloads
  • v0.6.1 d3567cb60b

    UltimateByte released this 2026-06-25 22:51:41 +02:00 | 23 commits to main since this release

    Fix

    The anti-spam choice on a contact form now sticks. When you picked a different captcha directly on a form, the change looked applied but wasn't saved — on reload the form fell back to its previous captcha. Choosing a captcha on a form now saves reliably.

    No action needed: existing forms keep working, and the setting you pick is now remembered.

    Downloads
  • v0.6.0 e0383afd79

    UltimateByte released this 2026-06-12 12:05:35 +02:00 | 25 commits to main since this release

    Fixed a fatal error that could block new-account creation — including WooCommerce checkout and any "add user" flow — on sites running the Newsletter module. If you saw registrations or checkouts failing with a server error, this release resolves it.

    📨 Newsletter delivery, sorted out

    • Your newsletter now actually sends from the identity you choose on it. Until now the per-newsletter sender (SMTP identity + From-name) was saved and shown, but quietly ignored when sending — everything went out through the default route. It's now honored, and the Test send behaves exactly like the real send (same sender, same routing), so what you preview is what your readers receive.
    • Send newsletter and contact-form mail wherever you want. The SMTP → Routing rules screen now lists Newsletter emails and Contact form emails, so you can route (say) all newsletters through a dedicated mailbox while the rest of your mail goes elsewhere. Signup-form confirmation emails follow the same newsletter route.

    Admin quality-of-life

    • Adding an SMTP account is smoother: the Encryption and Force dropdowns now work before the first save, and as you type your address the server suggests a mail host automatically — preferring your domain's real mail server when it responds.
    • The "Saved" indicator now also sits at the bottom of long form cards, so you no longer have to scroll back to the top to confirm a change was saved. List and recipient pickers report autosave too.
    • The email-log preview now fills the full height of its window.

    Builds on v0.5.0 (single branded dark admin theme + accessibility-hardened public forms) and v0.4.0 (full captcha lineup, in-place detail views, resend-safe saved attachments). Pre-1.0: the schema can still change between minor versions.

    Downloads
  • v0.5.0 d2d24e9726

    UltimateByte released this 2026-05-31 02:03:19 +02:00 | 31 commits to main since this release

    New

    • A branded dark admin theme. The whole toolkit now wears one cohesive dark Deep Glass look that matches the lrob.fr site — navy surfaces, amber highlights, comfortable contrast — in place of plain default WordPress styling. One consistent identity across every page, nothing to switch on.
    • SMTP setup that helps you get it right. Configuring sending no longer means hunting for server details: the SMTP host field suggests your domain's real mail servers (common names plus a live DNS/MX lookup), shows a live green/red check that each one actually resolves, and a Test connection button confirms your login works — before you trust it with real mail. A Test email is one click away too.
    • Accessible contact & sign-up forms. Your public forms now work properly with keyboards and screen readers: each field's help text and error is announced, invalid fields are flagged, and "message sent" / "please fix this" is read out — so more of your visitors can actually complete them. (The built-in math anti-spam check was already screen-reader friendly; the picture one stays visual on purpose.)

    💅 Improved

    • A cleaner, more readable admin. Bigger base text, airier spacing, and a thorough legibility pass mean labels, links and helper text all read clearly — and spacing, colours and status badges are now unified across SMTP, Logging, Contact Form, Captcha and Newsletter, so it feels like one product from page to page.
    • A reworked SMTP identity card. A clearer one-row header (enable · transport · name · delete), an Authentication required toggle, and smart "From" fields — leave From email / From name empty and a "Default — …" hint shows exactly what will be used; pick it to inherit automatically. Consistent dropdowns and inputs with steady focus styling (no more text nudging when you click in).
    • Clearer newsletter cards. Action buttons sit in a tidy pinned footer, sent newsletters show their numbers on one compact line (targeted · sent · opens · clicks), and the status note lands right where you'd expect it.
    • A tidier dashboard. The activity chart gets a proper range picker (defaulting to Since beginning).

    🐛 Fixed

    • Disabling a module no longer strands you. Turn a module off from the dashboard and you stay on the dashboard, instead of being dropped onto the page you just disabled.
    • The Newsletter "SMTP not enabled" nag is gone. Newsletter sends fine through PHP mail() or any SMTP plugin, so that warning was misleading and showed on every admin page — it's now a calm, Newsletter-only info note.
    • The Dashboard's contact-form button no longer points at an obsolete editor screen, and old form URLs now land you on the right Forms page.
    • Un-scheduling a newsletter properly clears its scheduled-time note; the admin section tabs (Dashboard / Newsletters / Subscribers …) no longer pick up the wrong link colour.

    🔧 Under the hood

    • A large internal cleanup: the admin's colours, spacing and status badges were consolidated onto a single design system (the groundwork that made the dark theme a clean swap), the big admin screens were split into smaller focused pieces, and dead code was removed. Nothing changes for you today — it just makes future releases faster and safer to build.

    Requirements

    • PHP 8.2+ · WordPress 6.8+
    • A modern browser for the admin UI (CSS color-mix — Chrome/Edge 111+, Firefox 113+, Safari 16.2+, all 2023+). Public-facing forms have no such requirement.

    Existing installs auto-update from this release. Full feature history: docs/done.md.

    Downloads
  • v0.4.0 d7751e1e87

    UltimateByte released this 2026-05-29 12:23:00 +02:00 | 44 commits to main since this release

    New

    • Many more captcha options — and on more of your site. Cloudflare Turnstile and Google reCAPTCHA (both the v2 checkbox and the invisible, score-based v3) join hCaptcha and the built-in Math / Picture challenges. Add as many as you like, each with its own keys.
      • Invisible mode for hCaptcha and reCAPTCHA v2 — no puzzle for visitors, it just runs on submit.
      • Protect more of WordPress: comments, login, lost-password and registration, plus WooCommerce login — not only your contact and newsletter forms.
      • One site-wide default, overridable per use case — a clear "Default" badge shows what's active, and each captcha can be themed (light / dark / auto, normal / compact).
    • Resend emails with their attachments. Switch on Save attachments locally for an SMTP identity and any logged email can be re-sent with its files intact.
    • LRob touches — a small "by LRob" credit and a rotating tip strip across the toolkit pages.

    💅 Improved

    • Detail views open in place. Email log entries and contact-form submissions now open in a modal — no jumping to a separate page and losing your spot.
    • A more consistent admin. The whole interface now runs on one design system (colours, typography, spacing), so it reads consistently from page to page — and it's the groundwork for the light / dark themes coming next.
    • Instant captcha settings. Enable, disable, set-as-default and delete all update live, with no page reloads; disabled captchas and sent newsletters are clearly greyed out.
    • Complete, corrected French. Back to 100% — plus a sweep fixed a batch of incorrect translations (including some email subjects) left by an earlier automated pass.

    🐛 Fixed

    • Contact-form recipient picker: the known emails dropdown is styled correctly, sized to the field, and offers a Default option.
    • The Subject template and Success message dropdowns now work — and choosing Default keeps them dynamic (they follow the site language).
    • The front-end submit button's text colour now matches the rest of the design.
    • Turnstile / reCAPTCHA now preview correctly inside the form editor.
    • The dashboard's recent activity shows proper, translated status labels.

    🔧 Under the hood

    • A large internal cleanup laid the foundations for theming: every colour and every text size in the admin now comes from a single set of design tokens — no hardcoded values left — so an upcoming light / dark / contrast theme becomes a palette swap. Nothing changes visually today; it just makes future releases faster and the UI rock-solid consistent.
    • The captcha settings page was reworked to be fully reactive (no reloads), and shared UI building blocks (cards, the new dimmed/inactive treatment, status pills) were consolidated and reused across modules.

    Requirements

    • PHP 8.2+ · WordPress 6.8+
    • A modern browser for the admin UI (CSS color-mix — Chrome/Edge 111+, Firefox 113+, Safari 16.2+, all 2023+). Public-facing forms have no such requirement.

    Existing installs auto-update from this release. Full feature history: completed.md.

    Downloads
  • v0.3.5 88f3d3e0e7

    UltimateByte released this 2026-05-28 03:06:04 +02:00 | 52 commits to main since this release

    What's new

    👥 Subscribers — WP users now live in the same table

    Email-only subscribers and WordPress users now share one unified table. A new WP users filter dropdown lets you scope to: Include (default — both kinds), Only (WP users alone), or Exclude (legacy subscribers-only behaviour). Rows are deduped by email — when a WP user and a subscriber share the same address, the WP user wins (matching what would actually happen at send-time).

    New columns in the column picker: Type (Subscriber / WP user pill), Opted-in (✓ — and editable inline-checkbox on WP user rows that saves instantly), Opted-out (✓). A small admin-users glyph next to the email flags WP user rows at a glance even when the Type column is hidden.

    The detail modal now opens for both kinds (in-page, no redirect to the WordPress user editor for a quick view), and Prev / Next now walks all visible rows regardless of type — the modal seamlessly transitions from a subscriber to a WP user mid-navigation, with the open row highlighted in the background table.

    📋 Bulk actions extended

    • Opt-in / Opt-out — applies to both subscribers and WP users in one go.
    • Add to list… — pick an eligible list from an inline picker, attach the selection to it.
    • Trash / Restore / Delete stay subscribers-only (WP users in a mixed selection are silently skipped).

    Layout swap: the bulk-action dropdown is now on the left of the toolbar (matching the Contact Form Submissions layout), with the row-count summary + per-page picker + columns icon clustered on the right.

    🔀 Sortable columns plugin-wide

    Every table column with a sort indicator (Subscribers, Email Logs, Contact Form Submissions) is now clickable: first click sorts ascending, second flips to descending, third clears. The ▲ / ▼ glyph appears on the active column. Your sort choice persists in a long-lived cookie per table.

    Each list table grows a small Per page dropdown next to the row-count summary (replaces the old admin-level setting in the Logs Storage modal). The choice is stored in a session cookie and falls back to the default when the cookie is gone — no more being silently locked into a stale preference you forgot you set.

    🐛 Bug fixes

    • Subscriber detail modal & Add subscribers modal: were offering checkboxes for every list in the database — including system lists and WP-user-targeting lists where the toggle had no real effect. Now filtered to manual-membership subscribers-kind lists only, with server-side defence against POST tampering.
    • Dashboard had two horizontal divider lines stacked under the page header (page-header bottom border + section-title top border). The section-title's top border is now suppressed when it follows the page header directly.
    • CF Submissions sort-by-Date emptied the table (column is submitted_at, not created_at — silent SQL failure).
    • Email Logs can now be sorted by the To column too (recipient list — lexical sort on the first recipient).
    • Confirm prompt modal was anchoring top-left of the viewport instead of being centered — a CSS rule was overriding the modal's flexbox centering.
    • Sortable column hover had a slight flicker on first pass — caused by a CSS transition firing before the browser had cached the pseudo-state. Hover swap is now instant.

    🎨 Design tokens

    A new text-size family — --etk-text-{xxs, xs, sm, md, lg} (10 / 11 / 12 / 13 / 14px) — joins the existing spacing / radius / shadow / palette tokens in admin-base.css. This is groundwork for the theme system + density setting coming in v0.4.x and v0.5.x.

    What's next — v0.4.x

    Three meaty pillars:

    • Captcha enrichment — Cloudflare Turnstile + Google reCAPTCHA providers, invisible mode support, theme / size customization per identity.
    • CSS cleanup — finish migrating every hardcoded chrome value to design tokens, plugin-wide. Prerequisite for the upcoming Theme system (Light / Dark / Auto / LRob / Contrast) + Density setting (Compact / Comfortable / Spacious) in v0.5.x.
    • LRob branding — discrete "made with ❤️ by LRob.fr" placements, branded plugin polish.

    Full roadmap (v0.4.x → v1.0.0) is locked in todo.md.

    Upgrading

    Drop-in. No schema migration. Settings preserved. If you had configured Entries per page in the Email Logs Storage modal: that setting is gone (no longer admin-level), and the new inline per-page picker on the list view defaults to 20 — pick your preference once and it'll stick (per browser).

    Downloads
  • v0.3.4 592ead1da6

    UltimateByte released this 2026-05-27 23:06:45 +02:00 | 53 commits to main since this release

    Beta 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 RetentionToggle widget — 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-status event, 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_KEY rotation breaks stored SMTP / captcha credentials (encryption keys derived from AUTH_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
  • v0.3.3 418514bf5a

    UltimateByte released this 2026-05-26 19:21:54 +02:00 | 63 commits to main since this release

    This release sharpens how SMTP cooperates with other plugins, extends the captcha to more parts of WordPress, and polishes the admin.

    What's new

    Captcha now protects more than contact forms. WordPress comments, the lost-password screen, and the user-registration form can each be guarded by any of the captcha challenges (built-in math / picture, hCaptcha — more soon). Each context is opt-in — comments / lost-password / registration are off by default; contact forms and newsletter signups keep their existing protection. Configure it under Email Toolkit → Captcha → Captcha assignments.

    Pick how aggressively SMTP overrides other plugins' senders. The old "Force From" toggle becomes a three-option dropdown:

    • Always override — your identity wins, even against plugins that set their own sender.
    • Only when no sender is set (the new default for fresh identities) — respect WooCommerce, contact forms, etc. when they pick a sender themselves, but fill in for emails that didn't.
    • Never override — let any caller's choice pass through.

    Existing identities keep doing what they did before (they migrate to Always override).

    Captcha admin redesigned. The assignments section now uses the same dropdown style as the rest of the plugin. Each per-context row shows what Inherit default actually resolves to, so you always know what's going to be used. Every built-in challenge and every hCaptcha identity has a Set as default button — clicking it makes that one the site-wide default and updates everywhere else instantly.

    Newsletter cards now show click stats. Below the open rate, you'll see the click-through rate too. A display bug that kept all tracking counters at 0 on the cards is also fixed — opens and clicks were being recorded all along, they just weren't shown.

    Polish + reliability

    • The Active toggle on an SMTP identity now actually deactivates the identity when you untick it (it was silently re-saving as active).
    • Auto-save on SMTP identity cards is more reliable: shows an Unsaved changes indicator while you're typing, handles edits made during an in-flight save without losing them, and no longer fires a spurious second save when you leave a field after the save already succeeded.
    • Schema migration for existing installs applies cleanly on upgrade — previously some identity edits appeared saved but weren't actually persisted.
    • Destructive admin actions (delete identity, set default, save routing) get a stronger per-action security check on top of the existing protections.

    Notes

    The Newsletter module is still alpha — field testing welcome. Issues + feature requests: https://github.com/LRob-FR/wp-lrob-email-toolkit/issues

    Downloads