tractatus/public/js
TheFlow 973be3e61d feat: Implement newsletter email sending functionality (Phase 3)
Complete implementation of newsletter sending system with SendGrid integration:

Backend Implementation:
- EmailService class with template rendering (Handlebars)
- sendNewsletter() method with subscriber iteration
- Preview and send controller methods
- Admin routes with CSRF protection and authentication
- findByInterest() method in NewsletterSubscription model

Frontend Implementation:
- Newsletter send form with validation
- Preview functionality (opens in new window)
- Test send to single email
- Production send to all tier subscribers
- Real-time status updates

Dependencies:
- handlebars (template engine)
- @sendgrid/mail (email delivery)
- html-to-text (plain text generation)

Security:
- Admin-only routes with authentication
- CSRF protection on all POST endpoints
- Input validation and sanitization
- Confirmation dialogs for production sends

Next steps: Configure SendGrid API key in environment variables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 11:32:39 +13:00
..
admin feat: Implement newsletter email sending functionality (Phase 3) 2025-11-04 11:32:39 +13:00
components feat: Add Phase 2 newsletter enhancements and email templates 2025-11-04 11:13:15 +13:00
demos fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
utils fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
admin-disk-monitoring.js fix(disk-monitoring): use correct admin_token from localStorage 2025-10-29 11:58:26 +13:00
auto-reload.js fix: add auto-reload mechanism for service worker updates 2025-10-29 15:03:27 +13:00
blog-post.js docs: complete research documentation publication (Phases 1-6) 2025-10-25 20:10:04 +13:00
blog.js fix(newsletter): resolve CSRF token issue for static HTML pages 2025-10-25 09:37:16 +13:00
case-submission.js feat(i18n): add multilingual support to case-submission and media-inquiry pages 2025-10-26 16:41:54 +13:00
check-version.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
docs-app.js fix: remove undefined showTranslationFallbackNotice function call 2025-11-01 11:11:38 +13:00
docs-search-enhanced.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
docs-viewer-app.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
faq.js docs(faq): fix Cultural DNA compliance and add leader-focused Q&As 2025-10-28 23:31:16 +13:00
i18n-simple.js feat: add i18n support for Agent Lightning page and navbar feedback 2025-11-03 15:58:12 +13:00
koha-donation.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
koha-success.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
koha-transparency.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
leader-page.js feat(leader): WCAG accessibility with 9 accordions, keyboard navigation 2025-10-23 00:19:23 +13:00
media-inquiry.js feat(i18n): add multilingual support to case-submission and media-inquiry pages 2025-10-26 16:41:54 +13:00
media-triage-transparency.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
page-transitions.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
researcher-page.js fix(navigation): use modal for research collaboration and fix values.html paths 2025-10-30 23:38:50 +13:00
scroll-animations.js fix(submissions): restructure Economist package and fix article display 2025-10-24 08:47:42 +13:00
share-cta.js fix: make share buttons visible with blue theme 2025-10-29 15:20:41 +13:00
sw-reset.js feat: Complete Phase 2 Agent Lightning website integration 2025-11-03 14:38:20 +13:00
version-manager.js feat: Complete Phase 2 Agent Lightning website integration 2025-11-03 14:38:20 +13:00