gigafibre-fsm/services/targo-hub
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
..
data refactor: reduce token count, DRY code, consolidate docs 2026-04-13 08:39:58 -04:00
docs feat(fsm): platform build — comms UI, F→ERPNext sync/billing, roster, campaigns, network, reports 2026-06-15 06:12:12 -04:00
lib Events: reminder ("Petit rappel") for non-registered invitees 2026-07-24 09:56:15 -04:00
preview feat: flow editor, Gemini QR scanner with offline queue, dispatch planning v2 2026-04-22 10:44:17 -04:00
public feat(field-app): refonte accessibilité terrain (gros texte/contraste/cibles + flux guidé) 2026-07-19 10:23:19 -04:00
scripts feat(ops): wireless backfill + signal interval coloring + device/AP links 2026-07-20 18:38:33 -04:00
templates feat(ops+hub): sender picker, per-user notifs, editable rating emails, planif & tickets UX 2026-06-16 22:41:51 -04:00
test Phase 1 (hygiène) : utils partagés + logique pure testable + observabilité erp + 1ers tests 2026-06-07 10:36:41 -04:00
.env.example feat(hub+ops): user invite flow sends temp password via Mailjet + dev .env.example 2026-05-05 19:50:06 -04:00
docker-compose.yml fix(hub): templates volume mount must be RW for editor saves 2026-05-22 06:49:48 -04:00
package-lock.json feat(campaigns/editor): MJML mode — proper email-focused visual builder 2026-05-21 22:29:42 -04:00
package.json Phase 1 (hygiène) : utils partagés + logique pure testable + observabilité erp + 1ers tests 2026-06-07 10:36:41 -04:00
server.js chore(reconcile): commit MES hunks déployés dans les fichiers co-édités (split via git apply --cached) 2026-07-19 20:06:47 -04:00