gigafibre-fsm/apps/ops
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
..
.quasar feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
infra Events: creation, capacity cap, language-tagged attachments, additive audience list 2026-07-09 10:10:43 -04:00
public/icons feat: add ops app + CONTEXT.md, simplify URL to /ops/ 2026-03-30 22:41:58 -04:00
src Events: reminder ("Petit rappel") for non-registered invitees 2026-07-24 09:56:15 -04:00
src-pwa feat: nested tasks, project wizard, n8n webhooks, inline task editing 2026-04-01 13:01:20 -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
.env.production security: harden payments/hub auth + remove leaked ERPNext token from source 2026-06-16 06:17:17 -04:00
.gitignore ops: MapLibre/OSM basemap (drop Mapbox) + satellite toggle, unified Créer flow, wizard pricing, infra-first reverse client 2026-07-06 21:52:14 -04:00
deploy.sh infra: deploy.sh renders ops nginx.conf from versioned template w/ server-side token injection 2026-07-08 15:59:48 -04:00
index.html feat: add ops app + CONTEXT.md, simplify URL to /ops/ 2026-03-30 22:41:58 -04:00
knip.json feat(ops): dispatch auto complet + perf Boîte/rapports + fix session 2026-07-02 08:49:35 -04:00
package-lock.json ops: MapLibre/OSM basemap (drop Mapbox) + satellite toggle, unified Créer flow, wizard pricing, infra-first reverse client 2026-07-06 21:52:14 -04:00
package.json ops: MapLibre/OSM basemap (drop Mapbox) + satellite toggle, unified Créer flow, wizard pricing, infra-first reverse client 2026-07-06 21:52:14 -04:00
quasar.config.js ops: MapLibre/OSM basemap (drop Mapbox) + satellite toggle, unified Créer flow, wizard pricing, infra-first reverse client 2026-07-06 21:52:14 -04:00