=== Sprint Birthdays ===
Contributors: sprintplugins
Tags: birthday, users, email, acf, members
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Automatically send personalized birthday emails to WordPress users from an existing user meta key or an ACF date field.

== Description ==

Sprint Birthdays reads a birth date already stored in a WordPress user profile and automatically sends a personalized birthday email. It can use an existing user meta key or a detected ACF date field.

= Birthday source and recipients =

* Select an existing user meta key or a detected ACF date field.
* Support for common date formats and automatic format detection.
* Filter recipients by WordPress user role.
* Let an individual user opt out from birthday emails in their profile.
* Choose how February 29 birthdays are handled outside leap years.

= Emails and notifications =

* Send on the birthday or a configurable number of days beforehand.
* Customize the subject, message, signature, logo, colors, button, and footer.
* Use standard variables and custom user meta variables such as `{user_meta:my_key}`.
* Preview the rendered email and send test messages.
* Optionally inform selected responsible roles before the birthday.
* Optionally send a separate notification to responsible roles after delivery.
* Use Cc or Bcc for grouped responsible-role notifications.

= Reliability and administration =

* Daily WP-Cron processing with configurable batch size and delay.
* Catch-up processing after missed scheduled tasks.
* Annual duplicate protection for automatic deliveries.
* Delivery history, manual retry, diagnostics, and configurable log retention.
* Administrator alerts when processing fails or the configuration is unusable.
* Integration with WordPress personal-data export and erasure tools.
* Optional detection by Sprint Club without sharing birth-date data.

Sprint Birthdays does not use an external service, add open tracking, or collect telemetry. Email delivery uses the mail system configured for the WordPress site.

= Personal data =

Depending on the configuration, birthday emails may contain the member's name, email address, birthday, age, and selected custom user metadata.

The technical log stores only the information required to monitor delivery: the WordPress user ID, destination address, event type, status, timestamps, and an optional error message. The complete birth date is not stored in the log.

The plugin registers a personal-data exporter and eraser. The source birth-date field is not deleted by Sprint Birthdays because it may belong to WordPress, ACF, or another plugin that owns that profile field.

== Installation ==

1. Install and activate Sprint Birthdays.
2. Open the “Sprint Birthdays” menu in WordPress administration.
3. Select the user meta key or ACF date field that contains the birth date.
4. Configure recipients and the email template.
5. Send a test email.
6. Enable daily automatic processing.

== Screenshots ==

1. Birthday source, recipient roles, delivery timing, and February 29 settings.
2. Email customization with variables, visual settings, preview, and test delivery.
3. Upcoming birthdays and the daily scheduled processing queue.
4. Delivery history with status details and manual retry actions.
5. Individual opt-out preference and administration diagnostics.

== Frequently Asked Questions ==

= Does the plugin create a new birth-date field? =

No. It is designed to use an existing user meta key or an ACF date field. A key can also be entered manually.

= Is ACF required? =

No. ACF integration is optional. Any existing scalar user meta value can be used when its date format is supported.

= Can the same birthday email be sent more than once? =

Automatic processing stores an annual event key to prevent duplicates. An administrator can still force a manual resend from the delivery history.

= How are February 29 birthdays handled? =

The settings can send on February 28, March 1, or only on February 29 during leap years.

= Does Sprint Club need to be installed? =

No. Sprint Birthdays works independently. When Sprint Club is active, it can detect the plugin and provide a direct administration link.

= Does the plugin send data to an external service? =

No. It uses `wp_mail()` and the mail delivery configuration of the WordPress site. No telemetry or remote tracking is included.

== Changelog ==

= 1.0.0 =
* Initial public release.
* Automatic personalized birthday emails from user meta or ACF date fields.
* Role filtering, individual opt-out, responsible-role notifications, previews, and test emails.
* Batch processing, catch-up jobs, duplicate protection, delivery logs, diagnostics, and privacy tools.
* Lightweight Sprint Club integration with a direct administration link.

== Upgrade Notice ==

= 1.0.0 =
Initial public release.
