Release Notes
Product updates and schedule changes for the Spectra Puppy Vaccine Tracker.
3.12.26
- Changed reminders default channel to `email` for owner accounts.
- Updated reminders preferences UI so SMS can only be selected when a phone number exists on the owner profile.
- Added server-side guard: if SMS is selected without a phone, channel is kept as email.
- Added send-time fallback logic to route SMS reminders to email when no phone is available.
- Added migration `sql/012_default_email_channel_and_phone_gate_sms.sql` to normalize existing owners and pending reminders without phone numbers.
3.11.26
- Added reminder channel selection on `reminders.php` with a slider-style toggle (`Text/SMS` or `Email`) and single-channel enforcement per owner.
- Added Amazon SES email reminder delivery support and kept existing Twilio SMS reminder support.
- Reminder generation now stores each reminder with the owner's selected channel.
- Saving reminder preferences now updates existing pending reminders to the selected channel immediately.
- Added migration `sql/011_add_email_reminder_channel.sql` and updated channel enums to support `email` in `Owner`, `Reminder`, and `ReminderSendLog`.
2.20.26
- Expanded Privacy Policy content for app-store readiness, including scope, data categories, processors, retention, rights, children policy, jurisdiction, and formal contact details.
- Added explicit privacy statement that owner and dog profile data is not sold, rented, or shared for marketing purposes.
- Added account deletion flow from My Profile to a dedicated delete-account page with typed confirmation (`delete`).
- Account deletion now removes owner-associated app data (profile, puppies, vaccine records, reminders, logs, transfer records, and related audit rows) and ends local session.
- Added header login-status indicator on all pages showing `status: not logged in` or `status: logged in (email)` above the brand text.
- Added visitor counter on `index.php` with database-backed storage and migration `sql/010_add_page_counter.sql`.
- Added Google Search Console sitemap at `public/sitemap.xml` for public-facing routes.
2.17.26
- Updated How It Works with a new Vaccination Schedule section, including schedule image support (`assets/img/vaccination-schedule.png`).
- Added end-user schedule guidance: first shot preferred at 6 weeks (or later if needed), then core shots every 3 weeks with proper product alignment per checkpoint.
- Added an About Spectra Vaccines section with product quality/value messaging and user-facing benefit summary points.
- Applied blue-to-green animated glow link styling to inline links on Contact Us and How It Works content.
- Updated header date/time display to a bolder weight for improved readability.
2.16.26
- Added public "How It Works" page with do-it-yourself vaccination guide content and step images (Step 1-4).
- Added public "Spectra Products" page with product-specific details, coverage lists, display ordering (Spectra 5 to 10 + Lyme, then KC3), and tiled card layout.
- Added public "Contact Us" page and footer link placement after Privacy Policy.
- Updated footer links to support wrapped multi-row spacing for better mobile readability.
- Updated header and footer links to use the blue-to-green animated glow text style; logout link remains red.
- Added Google Play "Coming soon" badge callout to the home page and tuned badge sizing.
- Updated header logo to link back to
index.phpfor quick home navigation.
2.14.26
- Updated core timeline logic for late-added puppies: if the puppy is added after 6 weeks old, Week 9/12/15/18 now wait until Week 6 is recorded, then schedule at 3-week intervals from the Week 6 shot date.
- Kept existing DOB-anchored behavior for puppies added on or before 6 weeks old.
- Added timeline state `waiting-first-dose` so future checkpoints clearly show they are not date-scheduled until Week 6 is complete.
- Updated reminder generation to skip checkpoints without a due date, preventing premature reminders for late-added puppies before first shot.
- Added project note: preserve validated working behavior and track changes in release notes/readmes whenever schedule or reminder logic is changed.
2.6.26
- Updated reminder disable/enable behavior to preserve history and mark `pending` as `skipped_disabled` only at send-attempt time (owner-local 8:00 AM to 8:00 PM window).
- Hardened logout flow with Cognito Hosted UI logout support and session cookie cleanup; added logged-out confirmation banner fade on home page.
- Standardized rendered UI date display format to `MM-DD-YYYY` (display only).
- Added puppies page search by puppy name and optional sort by next vaccine due (soonest first).
- Added per-puppy core vaccine progress bars and next-core-due summary details on puppies list cards.
- Added core vaccine progress section to puppy detail page and improved action-button alignment for desktop/mobile.
2.5.26
- Updated reminders disable/enable flow to preserve reminder history rows instead of deleting them.
- Introduced `skipped_disabled` reminder status for reminders not sent while disabled.
- Re-enable behavior rebuilds reminders additively so historical sent/failed/suppressed/skipped statuses remain visible.
2.4.26
- Added default puppy photo fallback behavior for profiles without an uploaded image.
- Fallback image path is `assets/img/puppy-placeholder.png`.
- Documented this behavior to keep it in place for photo-less puppy profiles.
2.2.26
- Fixed reminder processor automation after morning send miss by correcting service execution flow.
- Added CLI reminder processor entrypoint `public/reminder_process_cli.php` for reliable systemd execution.
- Updated reminder service runtime to execute the CLI script directly instead of inline `php -r` code.
- Validated service/timer health: oneshot service returns success and timer continues every 15 minutes.
2.1.26
- Overhauled reminder lifecycle with unified service, idempotent generation, and owner-level enable/disable rebuild behavior.
- Added reminder suppression (no delete) on completed checkpoints; sent reminders now retain sent_at and stay in history.
- Reminder table updated with owner_id, checkpoint_key, suppressed status, and unique dedupe index.
- Added ReminderSendLog table to track successful sends for audit history.
- Reminder queue UI now shows checkpoint label, groups by puppy, and refreshes with success banner after preference updates.
- Puppy DOB is no longer editable; added remove-puppy flow with typed confirmation and full data cleanup.
- Reminder creation now includes puppies exactly 6 weeks old (excludes only those 1+ days older).
- Added owner-local reminder send window of 8:00 AM to 8:00 PM.
- Configured a systemd timer to process reminders automatically every 15 minutes.
1.30.26
- Added release notes, terms of use, and privacy policy pages with footer links.
- Added SMS disclaimer on reminders preferences page.
- Enforced reminder sending after 8:00 AM in the owner’s local timezone.
- Improved mobile styling under 400px and enlarged puppy photos.
- Added checkpoint labels in vaccination history and removed the “Reminders queued” banner.
- Added auto-detect timezone UI toggle and footer link styling updates.
1.29.26
- Added profile management pages (My Profile + Edit Profile) with E.164 phone normalization and auto +1 for US numbers.
- Added success banner fade behavior (starts at 3s, finishes at 7s, hidden at 8s) for profile, reminders, and transfer.
- Updated transfer form to include optional phone input and SMS invite/notify via Twilio.
- Removed ability to record vaccinations before DOB (hard validation on given date).
- Updated UI wording: “Add Vaccination” and “Vaccination History”.
- Puppy list: moved “Add Puppy” button below the list and left-aligned.
- Reminders queue now sorts by earliest due date first.
- Puppy view and export record now display checkpoint labels in vaccination history.
- Puppy view and export record show given dates in the schedule timeline for completed checkpoints.
- Added timezone mode on profile (auto-detect vs manual) with browser-based auto fill and display label.
- Added reminder scheduling at 4 days before, 1 day before, and day-of (via send_on_date).
- Added S3-backed puppy photo uploads with thumbnails on list/detail pages.
- Added S3 env template entries and new S3 upload helper.
1.28.26
- Implemented the DOB-anchored schedule engine with Week 6/9/12/15/18 checkpoints and annual boosters.
- Added optional KC3 tracking without blocking core schedule completion.
- Added checkpoint assignment and manual selection when multiple checkpoints are overdue.
- Added “Next Vaccine Due” card with countdown and CTA behavior.
- Updated timeline and export record to show allowed vaccine options per checkpoint.
- Added checkpoint tracking to dose records via checkpoint_key migration.