Auto-send on the day, once per year, with a per-contact opt-out.
Settings → Auto-Greetings → enable Birthday + configure the template body. The cron runs every morning, finds contacts whose dateOfBirth matches today's month + day, and sends.
The same applies to anniversaryDate (customer onboarding date, purchase anniversary, whatever you want it to mean).
lastBirthdayGreetedAt to prevent double-sends in the same year.birthdayOptIn / anniversaryOptIn flags override the workspace default.