gigafibre-fsm/services
louispaulb d961c57f9e Events: reminder ("Petit rappel") for non-registered invitees
- New reminder engine (events.js): reminderCandidates(eventId, sourceCampaignId)
  targets recipients from a past invitation send who haven't submitted an RSVP
  yet — covering both "never clicked" and "clicked but didn't register" — while
  excluding pending/failed/excluded rows. Returns a status breakdown (not
  opened / opened not clicked / clicked not registered) for preview before
  sending. reminderSend() creates+starts a new tracked campaign (reminder_of
  linking back to the source), reusing the same send worker with an
  isReminder flag.
- isReminder threads through inviteSubject (prefixes "Petit rappel — "/
  "Reminder — ") and inviteEmailFestive (adds a 🔔 badge above the title);
  exposed on invite-preview and test-send too so the look can be checked
  before a real reminder blast.
- New routes: GET /events/:id/campaigns (past sends for the picker),
  GET /events/:id/reminder-preview (count + breakdown + sample, no side
  effects), POST /events/:id/reminder-send.
- campaigns.js: listCampaigns() summary gains event_id/type/reminder_of
  (same read, no extra cost) and is now exported, so events.js can list an
  event's past campaigns without loading each one in full.
- EventsPage.vue: new "Rappel" tab in the send dialog — pick a source send,
  see the live count/breakdown/recipient list, confirm-to-send. Test tab
  gains a toggle to preview the reminder look via a real test-send.
- CampaignDetailPage.vue: "Ouvert le"/"Cliqué le" columns on the recipient
  table (shared by gift and event campaigns).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 09:56:15 -04:00
..
cogeco-checker fix(cogeco-checker): disable browser cache to rule it out as 401 cause 2026-06-01 21:47:19 -04:00
docuseal refactor: major cleanup — remove dead dispatch app, commit all backend code, extract client composables 2026-04-08 17:38:38 -04:00
email-editor feat(email-editor): persist easy-email JSON state for instant restore on reload 2026-05-22 06:04:48 -04:00
legacy-bridge feat(ops): wireless on the same status cards + DHCP leases (F parity) 2026-07-21 15:17:34 -04:00
legacy-db refactor: major cleanup — remove dead dispatch app, commit all backend code, extract client composables 2026-04-08 17:38:38 -04:00
modem-bridge feat: flow editor, Gemini QR scanner with offline queue, dispatch planning v2 2026-04-22 10:44:17 -04:00
osrm feat(dispatch): OSRM road-time matrix for the VRP optimizer (Phase 2) 2026-07-02 13:48:43 -04:00
roster-solver hub+solveur : compétences multi par job + réservation + matérialisation quarts + app terrain natif 2026-07-07 20:46:42 -04:00
targo-hub Events: reminder ("Petit rappel") for non-registered invitees 2026-07-24 09:56:15 -04:00