# Listmonk Integration Guide This guide covers the complete setup and usage of the Listmonk integration for the Map application. ## Overview The Map application integrates seamlessly with [Listmonk](https://listmonk.app/), a self-hosted newsletter and mailing list manager, to provide advanced email marketing capabilities. This integration enables: - **Real-time subscriber synchronization** - **Automated list segmentation** - **Professional email campaigns** - **Advanced analytics and reporting** - **Bi-directional data sync** ## Prerequisites 1. **Listmonk Instance**: You need a running Listmonk instance (typically deployed via Docker Compose) 2. **Admin Access**: Listmonk admin credentials for API access 3. **Network Connectivity**: Map application must be able to reach Listmonk instance 4. **Environment Configuration**: Proper `.env` setup ## Quick Setup ### 1. Configure Environment Variables Add these variables to your `.env` file: ```env # Listmonk Integration LISTMONK_URL=http://listmonk:9000 LISTMONK_USERNAME=admin LISTMONK_PASSWORD=your-secure-password LISTMONK_ENABLED=true LISTMONK_SYNC_ON_STARTUP=true LISTMONK_AUTO_CREATE_LISTS=true ``` **Important Notes:** - Use `http://listmonk:9000` for Docker Compose deployments (service name) - Use `http://localhost:9000` for local development - Ensure the password matches your Listmonk admin password ### 2. Restart the Application ```bash docker-compose restart map-viewer ``` ### 3. Verify Integration 1. **Check Admin Panel**: Go to `/admin.html` and look for the "Listmonk Integration" section 2. **Status Indicator**: Green status means successful connection 3. **View Logs**: Check terminal for sync messages 4. **Listmonk Dashboard**: Verify lists were created in Listmonk ## Automated List Management The integration automatically creates and maintains these subscriber lists: ### Core Lists - **All Locations** - Every location with contact information - **All Users** - Every registered Map application user ### Support Level Lists - **Support Level 1** - Strongest supporters (Green markers) - **Support Level 2** - Moderate supporters (Yellow markers) - **Support Level 3** - Weak supporters (Orange markers) - **Support Level 4** - Opponents (Red markers) ### Sign Status Lists - **Has Sign** - Locations with campaign signs - **No Sign** - Locations without signs ### Combined Segmentation Lists - **Support 1 with Signs** - Strong supporters who have signs - **Support 2 with Signs** - Moderate supporters who have signs - **Support 3 with Signs** - Weak supporters who have signs - **Support 4 with Signs** - Opponents who have signs (for tracking) - **Support 1-3** - All positive supporters (Levels 1, 2, and 3) - **Sign Requests** - Supporters without signs (potential sign placements) ## Real-Time Sync Features ### Automatic Synchronization - **New Location Added**: Instantly added to appropriate lists - **Location Updated**: Support level or sign status changes trigger list updates - **Location Deleted**: Removed from all lists - **User Created**: Added to "All Users" list - **User Deleted**: Removed from all lists ### Bi-Directional Sync - **Unsubscribes**: When users unsubscribe in Listmonk, their records are updated in the Map database - **Email Updates**: Email address changes sync both ways - **List Management**: Changes in Listmonk are reflected in Map data ## Admin Management Features ### Status Dashboard - **Connection Status**: Live indicator (🟢 Connected, 🔴 Error, ⚪ Disabled) - **Sync Statistics**: Total subscribers, lists, and sync operations - **Last Sync Times**: When each data type was last synchronized - **Error Notifications**: Pop-up alerts for sync failures ### Manual Operations - **Full Resync**: Completely rebuild all lists from current data - **Selective Sync**: Sync only locations or users - **Test Connection**: Verify Listmonk connectivity - **Reinitialize**: Delete and recreate all lists - **Progress Tracking**: Visual progress bars for bulk operations ### Bulk Sync Controls ```javascript // Available admin actions POST /api/listmonk/sync/full // Complete resync POST /api/listmonk/sync/locations // Sync locations only POST /api/listmonk/sync/users // Sync users only POST /api/listmonk/test-connection // Test connectivity POST /api/listmonk/reinitialize // Recreate lists ``` ## Error Handling & Troubleshooting ### Common Issues #### Connection Failed **Symptoms**: Red status indicator, "Connection failed" in logs **Solutions**: 1. Verify `LISTMONK_URL` is correct 2. Check Listmonk is running: `docker-compose ps` 3. Test network connectivity: `curl http://listmonk:9000` 4. Verify credentials in Listmonk admin panel #### Sync Errors **Symptoms**: Yellow status indicator, specific error messages in logs **Solutions**: 1. Check Listmonk API limits and performance 2. Verify subscriber data format (valid emails, etc.) 3. Review Listmonk logs: `docker-compose logs listmonk` 4. Try manual resync from admin panel #### Missing Lists **Symptoms**: Lists not appearing in Listmonk **Solutions**: 1. Ensure `LISTMONK_AUTO_CREATE_LISTS=true` 2. Restart application to trigger initialization 3. Use "Reinitialize" button in admin panel 4. Check Listmonk permissions and API access #### Slow Sync Performance **Symptoms**: Long delays during sync operations **Solutions**: 1. Monitor Listmonk server resources 2. Check network latency between services 3. Consider reducing sync frequency for large datasets 4. Review database performance (both NocoDB and Listmonk) ### Debug Logging Enable detailed logging by setting: ```env NODE_ENV=development ``` This provides verbose sync operation details in the terminal. ## Email Campaign Workflow ### 1. Segment Selection Use the automatically created lists in Listmonk to target specific audience segments: - **Fundraising**: Target "Support Level 1" for donation requests - **Volunteer Recruitment**: Target "Support 1-3" for volunteer opportunities - **Sign Placement**: Target "Sign Requests" for new sign installations - **Opposition Research**: Monitor "Support Level 4" engagement ### 2. Campaign Creation Create campaigns in Listmonk using the segmented lists: 1. Go to Listmonk admin panel 2. Create new campaign 3. Select appropriate subscriber lists 4. Design email content 5. Schedule or send immediately ### 3. Analytics & Follow-up - **Track Opens**: Monitor engagement by support level - **Click Tracking**: Measure action rates across segments - **Unsubscribe Monitoring**: Identify potential support level changes - **A/B Testing**: Test messaging effectiveness across segments ## Advanced Configuration ### Custom List Creation To create additional custom lists, modify the Listmonk service configuration: ```javascript // app/services/listmonk.js const customLists = [ { name: 'High Value Voters', description: 'Support Level 1 & 2 with voting history', // Add custom segmentation logic } ]; ``` ### Sync Frequency Tuning Adjust sync timing based on your needs: ```env # Sync immediately on data changes (default: true) LISTMONK_REALTIME_SYNC=true # Startup sync (default: true) LISTMONK_SYNC_ON_STARTUP=true # Batch size for large syncs (default: 100) LISTMONK_BATCH_SIZE=50 ``` ### Webhook Integration For advanced use cases, consider setting up Listmonk webhooks to trigger Map application updates: ```env # Enable webhook endpoint LISTMONK_WEBHOOK_ENABLED=true LISTMONK_WEBHOOK_SECRET=your-webhook-secret ``` ## Security Considerations ### Credentials Management - **Store securely**: Use environment variables, never commit passwords - **Rotate regularly**: Change Listmonk passwords periodically - **Limit access**: Create dedicated API user with minimal required permissions - **Network security**: Use HTTPS in production, restrict network access ### Data Privacy - **GDPR Compliance**: Ensure proper consent and unsubscribe handling - **Data Minimization**: Only sync necessary contact information - **Retention Policies**: Configure appropriate data retention in Listmonk - **Audit Logging**: Monitor access and changes to subscriber data ## Integration Monitoring ### Health Checks The system provides several monitoring endpoints: ```javascript GET /api/listmonk/status // Connection and sync status GET /api/listmonk/lists // List information and counts GET /health // Overall application health ``` ### Performance Metrics Monitor these key metrics: - **Sync Duration**: Time to complete full synchronization - **Error Rate**: Percentage of failed sync operations - **List Growth**: Subscriber count changes over time - **API Response Time**: Listmonk API performance ### Alerting Set up monitoring for: - **Connection failures** (implement external monitoring) - **Sync errors** (check application logs) - **List count discrepancies** (compare Map vs Listmonk counts) - **Performance degradation** (sync time increases) ## Backup & Recovery ### Data Backup - **Listmonk Data**: Regular database backups of Listmonk - **Map Data**: NocoDB backup includes all source data - **Configuration**: Version control `.env` files (without secrets) ### Disaster Recovery In case of data loss: 1. **Restore Listmonk**: From database backup 2. **Reinitialize**: Use admin panel "Reinitialize" function 3. **Full Resync**: Rebuild all lists from Map data 4. **Verify**: Check list counts and subscriber data ## Best Practices ### Campaign Management - **Consistent Messaging**: Maintain brand voice across all campaigns - **Segmentation Strategy**: Use meaningful, actionable segments - **Testing**: A/B test subject lines and content - **Compliance**: Follow CAN-SPAM and GDPR requirements - **Analytics**: Track and analyze campaign performance ### Data Quality - **Email Validation**: Verify email addresses before adding to lists - **Duplicate Prevention**: System handles duplicates automatically - **Regular Cleanup**: Remove bounced and inactive subscribers - **Contact Updates**: Keep contact information current ### Performance Optimization - **Batch Operations**: Use bulk sync for large data changes - **Off-Peak Sync**: Schedule heavy operations during low-usage periods - **Resource Monitoring**: Watch server resources during sync operations - **Network Optimization**: Ensure reliable connectivity between services ## Support & Documentation ### Additional Resources - **Listmonk Documentation**: https://listmonk.app/docs/ - **Map Application Docs**: See main README.md - **API Reference**: Available at `/api` endpoints - **Community Support**: GitHub issues and discussions ### Getting Help If you encounter issues: 1. **Check Status**: Admin panel shows current integration status 2. **Review Logs**: Terminal output provides detailed error information 3. **Test Connection**: Use admin panel connection test 4. **Documentation**: Refer to this guide and Listmonk docs 5. **Community**: Ask questions in project GitHub issues This integration significantly enhances the Map application's email marketing capabilities while maintaining data consistency and providing powerful segmentation options for targeted campaigns.