From feeae6eb40fc9c4762a5ebafd225722877de788b Mon Sep 17 00:00:00 2001 From: louispaulb Date: Fri, 22 May 2026 10:47:58 -0400 Subject: [PATCH] feat(campaigns/templates): visible wrapper-expiry date in the email MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two new template variables are auto-derived from r.gift_expires_at at render time (separately by the worker and the /view fallback to keep them consistent): {{expires_at_date}} locale-formatted FR/EN long date — "21 août 2026" / "August 21, 2026". Empty when no wrapper token. {{expires_in_days}} remaining days as string (rounded up). Useful for tight deadlines where a date is too distant to convey urgency. Templates: a small centered badge appears between the CTA button and the prorata disclaimer, wrapped in a Mustache section so it disappears cleanly on campaigns that pre-date the wrapper feature. ⏰ Cadeau valide jusqu'au 21 août 2026 ⏰ Gift valid until August 21, 2026 Editor merge-tag panel updated so authors can drop these into custom copy without remembering the exact variable names. The legacy {{expiry}} field stays — it's still the right tool for promotion-end dates that don't track the gift link's own deadline. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 --- .../campaigns/pages/TemplateEditorPage.vue | 10 +++--- .../campaigns/templates/gift-email-en.html | 15 +++++++++ .../campaigns/templates/gift-email-en.json | 2 +- .../campaigns/templates/gift-email-fr.html | 21 ++++++++++++ .../campaigns/templates/gift-email-fr.json | 2 +- services/targo-hub/lib/campaigns.js | 32 +++++++++++++++++++ .../targo-hub/templates/gift-email-en.html | 15 +++++++++ .../targo-hub/templates/gift-email-en.json | 2 +- .../targo-hub/templates/gift-email-fr.html | 21 ++++++++++++ .../targo-hub/templates/gift-email-fr.json | 2 +- 10 files changed, 114 insertions(+), 8 deletions(-) diff --git a/apps/ops/src/modules/campaigns/pages/TemplateEditorPage.vue b/apps/ops/src/modules/campaigns/pages/TemplateEditorPage.vue index 627aa5b..0de6fbb 100644 --- a/apps/ops/src/modules/campaigns/pages/TemplateEditorPage.vue +++ b/apps/ops/src/modules/campaigns/pages/TemplateEditorPage.vue @@ -278,10 +278,12 @@ const editorOptions = { { name: 'Offre', mergeTags: [ - { name: 'Montant', value: '{{amount}}', sample: '60 $' }, - { name: 'Lien cadeau (URL)', value: '{{gift_url}}', sample: 'https://gft.link/abc' }, - { name: "Date d'expiration", value: '{{expiry}}', sample: '31 décembre 2026' }, - { name: 'Engagement (mois)', value: '{{commitment_months}}', sample: '3' }, + { name: 'Montant', value: '{{amount}}', sample: '60 $' }, + { name: 'Lien cadeau (URL)', value: '{{gift_url}}', sample: 'https://gft.link/abc' }, + { name: "Date d'expiration (texte)", value: '{{expiry}}', sample: '31 décembre 2026' }, + { name: 'Expiration auto (date)', value: '{{expires_at_date}}', sample: '21 août 2026' }, + { name: 'Expiration auto (jours)', value: '{{expires_in_days}}', sample: '90' }, + { name: 'Engagement (mois)', value: '{{commitment_months}}', sample: '3' }, ], }, { diff --git a/scripts/campaigns/templates/gift-email-en.html b/scripts/campaigns/templates/gift-email-en.html index 02e9db1..7cf6029 100644 --- a/scripts/campaigns/templates/gift-email-en.html +++ b/scripts/campaigns/templates/gift-email-en.html @@ -493,6 +493,21 @@ table, td { color: #1B2E24; } #u_body a { color: #00C853; text-decoration: under + + {{#expires_at_date}} + +
+ + +
+
+ ⏰ Gift valid until {{expires_at_date}} +
+
+
+ + {{/expires_at_date}} + diff --git a/scripts/campaigns/templates/gift-email-en.json b/scripts/campaigns/templates/gift-email-en.json index 1706418..f8d88d3 100644 --- a/scripts/campaigns/templates/gift-email-en.json +++ b/scripts/campaigns/templates/gift-email-en.json @@ -20,7 +20,7 @@ "id": "HTML-1", "type": "html", "values": { - "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Because great connections aren't just about fiber — they're about people too.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Because great connections aren't just about fiber — they're about people too.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Hey {{firstname}},
\n \n \n \n \n \n \n Summer is here, and so is something special — for a limited time.\n Thank you for choosing local. Your support helps keep our community connected.
\n Because great connections aren't just about fiber — they're about people too.\n \n \n \n\n \n \n \n Because our customers trust us, we're now able to offer the fastest plans around, with speeds up to 3.5 Gbit/s.
\n Whether you're looking for more speed, want to beat another offer, or just need to optimize your gear, don't be shy! We're right next door — and we genuinely love lending a hand.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} to spend at hundreds of your favorite stores

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeand more
\n \n \n \n \n \n \n \n ⚡ Instantly available on Giftbit — just click your {{amount}} to claim it!\n \n \n \n \n \n \n \n 🤝 You just need to keep your subscription for {{commitment_months}} months or more.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Cancellation before {{commitment_months}} months: only the prorated amount for the remaining months is refundable.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Do nothing. No changes to your current subscription.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Thanks for helping keep our local economy buzzing!
\n \n \n \n \n \n \n \n The TARGO Team\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n You're getting this email because you're a TARGO customer at {{description}}.
\n Got a question? Feel free to email us at\n support@targo.ca\n or call us at\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · All rights reserved.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", + "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Because great connections aren't just about fiber — they're about people too.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Because great connections aren't just about fiber — they're about people too.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Hey {{firstname}},
\n \n \n \n \n \n \n Summer is here, and so is something special — for a limited time.\n Thank you for choosing local. Your support helps keep our community connected.
\n Because great connections aren't just about fiber — they're about people too.\n \n \n \n\n \n \n \n Because our customers trust us, we're now able to offer the fastest plans around, with speeds up to 3.5 Gbit/s.
\n Whether you're looking for more speed, want to beat another offer, or just need to optimize your gear, don't be shy! We're right next door — and we genuinely love lending a hand.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} to spend at hundreds of your favorite stores

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeand more
\n \n \n \n \n \n \n \n ⚡ Instantly available on Giftbit — just click your {{amount}} to claim it!\n \n \n \n \n \n \n \n 🤝 You just need to keep your subscription for {{commitment_months}} months or more.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{#expires_at_date}}\n \n
\n \n \n
\n
\n ⏰ Gift valid until {{expires_at_date}}\n
\n
\n
\n \n {{/expires_at_date}}\n\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Cancellation before {{commitment_months}} months: only the prorated amount for the remaining months is refundable.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Do nothing. No changes to your current subscription.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Thanks for helping keep our local economy buzzing!
\n \n \n \n \n \n \n \n The TARGO Team\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n You're getting this email because you're a TARGO customer at {{description}}.
\n Got a question? Feel free to email us at\n support@targo.ca\n or call us at\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · All rights reserved.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", "hideDesktop": false, "displayCondition": null, "containerPadding": "0px", diff --git a/scripts/campaigns/templates/gift-email-fr.html b/scripts/campaigns/templates/gift-email-fr.html index 1835aed..9d00876 100644 --- a/scripts/campaigns/templates/gift-email-fr.html +++ b/scripts/campaigns/templates/gift-email-fr.html @@ -497,6 +497,27 @@ table, td { color: #1B2E24; } #u_body a { color: #00C853; text-decoration: under + + {{#expires_at_date}} + +
+ + +
+
+ ⏰ Cadeau valide jusqu'au {{expires_at_date}} +
+
+
+ + {{/expires_at_date}} + diff --git a/scripts/campaigns/templates/gift-email-fr.json b/scripts/campaigns/templates/gift-email-fr.json index 7ba76f9..cb03df9 100644 --- a/scripts/campaigns/templates/gift-email-fr.json +++ b/scripts/campaigns/templates/gift-email-fr.json @@ -20,7 +20,7 @@ "id": "HTML-1", "type": "html", "values": { - "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Comme toi, on aime les connexions stables et les relations durables.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Comme toi, on aime les connexions stables et les relations durables.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Bonjour {{firstname}},
\n \n \n \n \n \n \n Avec l'arrivée de l'été, voici un cadeau pour toi, disponible pour un temps limité. \n On veut te remercier pour ta loyauté envers l'achat local.
\n Comme toi, on aime les connexions stables et les relations durables.\n \n \n \n\n \n \n \n Grâce à la confiance de nos clients, on offre maintenant les forfaits à la plus haute vitesse dans le secteur, jusqu'à 3.5 Gbit/s.
\n Que tu souhaites plus de vitesse, battre une autre offre ou faire optimiser des équipements, n'hésite pas. On est juste à côté et on aime aider.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} chez des centaines de marques

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeet plus
\n \n \n \n \n \n \n \n ⚡ Disponible instantanément sur Giftbit en cliquant sur ton montant\n \n \n \n \n \n \n \n 🤝 Condition : Maintenir l'abonnement {{commitment_months}} mois ou +\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Annulation avant {{commitment_months}} mois : seulement à rembourser au prorata des mois restants.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Ne rien faire. Aucun changement à ton abonnement actuel.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Merci de faire rouler l'économie de notre région avec nous !
\n \n \n \n \n \n \n \n L'équipe TARGO\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Tu reçois ce courriel parce que tu es client(e) TARGO à {{description}}.
\n Une question ? N'hésite pas à nous écrire à\n support@targo.ca\n ou nous appeler au\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · Tous droits réservés.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", + "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Comme toi, on aime les connexions stables et les relations durables.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Comme toi, on aime les connexions stables et les relations durables.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Bonjour {{firstname}},
\n \n \n \n \n \n \n Avec l'arrivée de l'été, voici un cadeau pour toi, disponible pour un temps limité. \n On veut te remercier pour ta loyauté envers l'achat local.
\n Comme toi, on aime les connexions stables et les relations durables.\n \n \n \n\n \n \n \n Grâce à la confiance de nos clients, on offre maintenant les forfaits à la plus haute vitesse dans le secteur, jusqu'à 3.5 Gbit/s.
\n Que tu souhaites plus de vitesse, battre une autre offre ou faire optimiser des équipements, n'hésite pas. On est juste à côté et on aime aider.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} chez des centaines de marques

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeet plus
\n \n \n \n \n \n \n \n ⚡ Disponible instantanément sur Giftbit en cliquant sur ton montant\n \n \n \n \n \n \n \n 🤝 Condition : Maintenir l'abonnement {{commitment_months}} mois ou +\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{#expires_at_date}}\n \n
\n \n \n
\n
\n ⏰ Cadeau valide jusqu'au {{expires_at_date}}\n
\n
\n
\n \n {{/expires_at_date}}\n\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Annulation avant {{commitment_months}} mois : seulement à rembourser au prorata des mois restants.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Ne rien faire. Aucun changement à ton abonnement actuel.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Merci de faire rouler l'économie de notre région avec nous !
\n \n \n \n \n \n \n \n L'équipe TARGO\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Tu reçois ce courriel parce que tu es client(e) TARGO à {{description}}.
\n Une question ? N'hésite pas à nous écrire à\n support@targo.ca\n ou nous appeler au\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · Tous droits réservés.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", "hideDesktop": false, "displayCondition": null, "containerPadding": "0px", diff --git a/services/targo-hub/lib/campaigns.js b/services/targo-hub/lib/campaigns.js index 9cdb499..57504ac 100644 --- a/services/targo-hub/lib/campaigns.js +++ b/services/targo-hub/lib/campaigns.js @@ -948,6 +948,20 @@ async function sendCampaignAsync (id) { r.gift_redirected_count = 0 tokenIndex.set(r.gift_token, { campaign_id: id, row: i }) } + // Format the wrapper's own expiry date for display in the email body. + // Locale matches the recipient's language so "May 31, 2026" / "31 mai 2026" + // appear naturally. expires_in_days is a friendlier shorter format for + // tight deadlines (≤ 60 days). The two are intentionally redundant + // so the template author can pick the one that fits their layout. + const expiryLocale = lang === 'en' ? 'en-CA' : 'fr-CA' + let expiresAtDate = '' + let expiresInDays = '' + if (r.gift_expires_at) { + const exp = new Date(r.gift_expires_at) + expiresAtDate = exp.toLocaleDateString(expiryLocale, { day: 'numeric', month: 'long', year: 'numeric' }) + const days = Math.max(0, Math.ceil((exp - new Date()) / 86400000)) + expiresInDays = String(days) + } const vars = { firstname: r.firstname || (lang === 'en' ? 'dear customer' : 'cher client'), lastname: r.lastname || '', @@ -958,6 +972,11 @@ async function sendCampaignAsync (id) { gift_url: r.gift_token ? wrapperUrl(r.gift_token) : r.gift_url, amount: displayAmount, expiry: p.expiry || '', + // Auto-derived from the wrapper's gift_expires_at — distinct from + // the manual {{expiry}} field above which is for promotion-end dates + // unrelated to the gift link wrapper. + expires_at_date: expiresAtDate, + expires_in_days: expiresInDays, commitment_months: p.commitment_months || '3', year: new Date().getFullYear(), view_url: viewUrl, @@ -1764,6 +1783,17 @@ async function handle (req, res, method, path) { ? `${cents / 100} $` : `${(cents / 100).toFixed(2)} $` } + // Locale-formatted wrapper expiry — same logic as the worker so the + // /view fallback renders the exact same date the recipient saw at first. + const expiryLocale = lang === 'en' ? 'en-CA' : 'fr-CA' + let expiresAtDate = '' + let expiresInDays = '' + if (r.gift_expires_at) { + const exp = new Date(r.gift_expires_at) + expiresAtDate = exp.toLocaleDateString(expiryLocale, { day: 'numeric', month: 'long', year: 'numeric' }) + const days = Math.max(0, Math.ceil((exp - new Date()) / 86400000)) + expiresInDays = String(days) + } const vars = { firstname: r.firstname || (lang === 'en' ? 'dear customer' : 'cher client'), lastname: r.lastname || '', @@ -1775,6 +1805,8 @@ async function handle (req, res, method, path) { gift_url: r.gift_token ? wrapperUrl(r.gift_token) : r.gift_url, amount: displayAmount, expiry: p.expiry || '', + expires_at_date: expiresAtDate, + expires_in_days: expiresInDays, commitment_months: p.commitment_months || '3', year: new Date().getFullYear(), // Empty so the {{#view_url}} section block in the template collapses diff --git a/services/targo-hub/templates/gift-email-en.html b/services/targo-hub/templates/gift-email-en.html index 02e9db1..7cf6029 100644 --- a/services/targo-hub/templates/gift-email-en.html +++ b/services/targo-hub/templates/gift-email-en.html @@ -493,6 +493,21 @@ table, td { color: #1B2E24; } #u_body a { color: #00C853; text-decoration: under + + {{#expires_at_date}} + +
+ + +
+
+ ⏰ Gift valid until {{expires_at_date}} +
+
+
+ + {{/expires_at_date}} + diff --git a/services/targo-hub/templates/gift-email-en.json b/services/targo-hub/templates/gift-email-en.json index 1706418..f8d88d3 100644 --- a/services/targo-hub/templates/gift-email-en.json +++ b/services/targo-hub/templates/gift-email-en.json @@ -20,7 +20,7 @@ "id": "HTML-1", "type": "html", "values": { - "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Because great connections aren't just about fiber — they're about people too.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Because great connections aren't just about fiber — they're about people too.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Hey {{firstname}},
\n \n \n \n \n \n \n Summer is here, and so is something special — for a limited time.\n Thank you for choosing local. Your support helps keep our community connected.
\n Because great connections aren't just about fiber — they're about people too.\n \n \n \n\n \n \n \n Because our customers trust us, we're now able to offer the fastest plans around, with speeds up to 3.5 Gbit/s.
\n Whether you're looking for more speed, want to beat another offer, or just need to optimize your gear, don't be shy! We're right next door — and we genuinely love lending a hand.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} to spend at hundreds of your favorite stores

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeand more
\n \n \n \n \n \n \n \n ⚡ Instantly available on Giftbit — just click your {{amount}} to claim it!\n \n \n \n \n \n \n \n 🤝 You just need to keep your subscription for {{commitment_months}} months or more.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Cancellation before {{commitment_months}} months: only the prorated amount for the remaining months is refundable.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Do nothing. No changes to your current subscription.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Thanks for helping keep our local economy buzzing!
\n \n \n \n \n \n \n \n The TARGO Team\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n You're getting this email because you're a TARGO customer at {{description}}.
\n Got a question? Feel free to email us at\n support@targo.ca\n or call us at\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · All rights reserved.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", + "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Because great connections aren't just about fiber — they're about people too.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Because great connections aren't just about fiber — they're about people too.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Hey {{firstname}},
\n \n \n \n \n \n \n Summer is here, and so is something special — for a limited time.\n Thank you for choosing local. Your support helps keep our community connected.
\n Because great connections aren't just about fiber — they're about people too.\n \n \n \n\n \n \n \n Because our customers trust us, we're now able to offer the fastest plans around, with speeds up to 3.5 Gbit/s.
\n Whether you're looking for more speed, want to beat another offer, or just need to optimize your gear, don't be shy! We're right next door — and we genuinely love lending a hand.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} to spend at hundreds of your favorite stores

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeand more
\n \n \n \n \n \n \n \n ⚡ Instantly available on Giftbit — just click your {{amount}} to claim it!\n \n \n \n \n \n \n \n 🤝 You just need to keep your subscription for {{commitment_months}} months or more.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{#expires_at_date}}\n \n
\n \n \n
\n
\n ⏰ Gift valid until {{expires_at_date}}\n
\n
\n
\n \n {{/expires_at_date}}\n\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Cancellation before {{commitment_months}} months: only the prorated amount for the remaining months is refundable.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Do nothing. No changes to your current subscription.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Thanks for helping keep our local economy buzzing!
\n \n \n \n \n \n \n \n The TARGO Team\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n You're getting this email because you're a TARGO customer at {{description}}.
\n Got a question? Feel free to email us at\n support@targo.ca\n or call us at\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · All rights reserved.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", "hideDesktop": false, "displayCondition": null, "containerPadding": "0px", diff --git a/services/targo-hub/templates/gift-email-fr.html b/services/targo-hub/templates/gift-email-fr.html index 1835aed..9d00876 100644 --- a/services/targo-hub/templates/gift-email-fr.html +++ b/services/targo-hub/templates/gift-email-fr.html @@ -497,6 +497,27 @@ table, td { color: #1B2E24; } #u_body a { color: #00C853; text-decoration: under + + {{#expires_at_date}} + +
+ + +
+
+ ⏰ Cadeau valide jusqu'au {{expires_at_date}} +
+
+
+ + {{/expires_at_date}} + diff --git a/services/targo-hub/templates/gift-email-fr.json b/services/targo-hub/templates/gift-email-fr.json index 7ba76f9..cb03df9 100644 --- a/services/targo-hub/templates/gift-email-fr.json +++ b/services/targo-hub/templates/gift-email-fr.json @@ -20,7 +20,7 @@ "id": "HTML-1", "type": "html", "values": { - "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Comme toi, on aime les connexions stables et les relations durables.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Comme toi, on aime les connexions stables et les relations durables.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Bonjour {{firstname}},
\n \n \n \n \n \n \n Avec l'arrivée de l'été, voici un cadeau pour toi, disponible pour un temps limité. \n On veut te remercier pour ta loyauté envers l'achat local.
\n Comme toi, on aime les connexions stables et les relations durables.\n \n \n \n\n \n \n \n Grâce à la confiance de nos clients, on offre maintenant les forfaits à la plus haute vitesse dans le secteur, jusqu'à 3.5 Gbit/s.
\n Que tu souhaites plus de vitesse, battre une autre offre ou faire optimiser des équipements, n'hésite pas. On est juste à côté et on aime aider.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} chez des centaines de marques

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeet plus
\n \n \n \n \n \n \n \n ⚡ Disponible instantanément sur Giftbit en cliquant sur ton montant\n \n \n \n \n \n \n \n 🤝 Condition : Maintenir l'abonnement {{commitment_months}} mois ou +\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Annulation avant {{commitment_months}} mois : seulement à rembourser au prorata des mois restants.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Ne rien faire. Aucun changement à ton abonnement actuel.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Merci de faire rouler l'économie de notre région avec nous !
\n \n \n \n \n \n \n \n L'équipe TARGO\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Tu reçois ce courriel parce que tu es client(e) TARGO à {{description}}.
\n Une question ? N'hésite pas à nous écrire à\n support@targo.ca\n ou nous appeler au\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · Tous droits réservés.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", + "html": "\n \n \n \n \n \n \n \n \n \n \n \n \n
\n Comme toi, on aime les connexions stables et les relations durables.\n
\n \n \n\n\n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
Comme toi, on aime les connexions stables et les relations durables.
\n \n \n \n {{#view_url}}\n \n {{/view_url}}\n\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Bonjour {{firstname}},
\n \n \n \n \n \n \n Avec l'arrivée de l'été, voici un cadeau pour toi, disponible pour un temps limité. \n On veut te remercier pour ta loyauté envers l'achat local.
\n Comme toi, on aime les connexions stables et les relations durables.\n \n \n \n\n \n \n \n Grâce à la confiance de nos clients, on offre maintenant les forfaits à la plus haute vitesse dans le secteur, jusqu'à 3.5 Gbit/s.
\n Que tu souhaites plus de vitesse, battre une autre offre ou faire optimiser des équipements, n'hésite pas. On est juste à côté et on aime aider.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ✅ Option 1
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁 {{amount}} chez des centaines de marques

\"Tim\"Walmart\"\"Home\"IGA\"\"Homeet plus
\n \n \n \n \n \n \n \n ⚡ Disponible instantanément sur Giftbit en cliquant sur ton montant\n \n \n \n \n \n \n \n 🤝 Condition : Maintenir l'abonnement {{commitment_months}} mois ou +\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🎁  {{amount}}\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{#expires_at_date}}\n \n
\n \n \n
\n
\n ⏰ Cadeau valide jusqu'au {{expires_at_date}}\n
\n
\n
\n \n {{/expires_at_date}}\n\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🪂 Annulation avant {{commitment_months}} mois : seulement à rembourser au prorata des mois restants.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ⏭️ Option 2
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Ne rien faire. Aucun changement à ton abonnement actuel.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 🤝 Merci de faire rouler l'économie de notre région avec nous !
\n \n \n \n \n \n \n \n L'équipe TARGO\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Tu reçois ce courriel parce que tu es client(e) TARGO à {{description}}.
\n Une question ? N'hésite pas à nous écrire à\n support@targo.ca\n ou nous appeler au\n 514-448-0773.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n www.targo.ca\n  ·  1867 ch. de la rivière, Ste-Clotilde, QC
\n © {{year}} TARGO Communications · Tous droits réservés.
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n\n \n \n\n\n \n \n \n\n\n\n\n \n \n \n \n \n \n ", "hideDesktop": false, "displayCondition": null, "containerPadding": "0px",