{"id":34503460,"url":"https://github.com/netsendo/netsendo","last_synced_at":"2026-02-21T12:08:52.865Z","repository":{"id":330879012,"uuid":"1119843072","full_name":"NetSendo/NetSendo","owner":"NetSendo","description":"Self-hosted professional email marketing \u0026 automation platform with email, SMS, workflows, CRM, analytics and AI integrations. Built with Laravel, Vue.js and Docker.","archived":false,"fork":false,"pushed_at":"2026-02-15T14:51:35.000Z","size":9848,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-15T21:28:58.275Z","etag":null,"topics":["docker","docker-compose","email-campaigns","email-marketing","email-marketing-automation","email-marketing-campaigns","email-marketing-dashboard","email-marketing-software","marketing","marketing-automation","marketing-automation-pipeline","newsletter","newsletter-mail","newsletters","self-hosted","selfhosted","sms-marketing","workflows"],"latest_commit_sha":null,"homepage":"https://NetSendo.com","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NetSendo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-20T00:27:13.000Z","updated_at":"2026-02-15T14:51:28.000Z","dependencies_parsed_at":"2026-01-23T18:02:26.468Z","dependency_job_id":null,"html_url":"https://github.com/NetSendo/NetSendo","commit_stats":null,"previous_names":["netsendo/netsendo"],"tags_count":109,"template":false,"template_full_name":null,"purl":"pkg:github/NetSendo/NetSendo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetSendo%2FNetSendo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetSendo%2FNetSendo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetSendo%2FNetSendo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetSendo%2FNetSendo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NetSendo","download_url":"https://codeload.github.com/NetSendo/NetSendo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetSendo%2FNetSendo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29590679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T18:54:29.675Z","status":"ssl_error","status_checked_at":"2026-02-18T18:50:50.517Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","email-campaigns","email-marketing","email-marketing-automation","email-marketing-campaigns","email-marketing-dashboard","email-marketing-software","marketing","marketing-automation","marketing-automation-pipeline","newsletter","newsletter-mail","newsletters","self-hosted","selfhosted","sms-marketing","workflows"],"created_at":"2025-12-24T02:33:21.190Z","updated_at":"2026-02-18T19:01:04.177Z","avatar_url":"https://github.com/NetSendo.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![NetSendo Logo](https://gregciupek.com/wp-content/uploads/2025/12/Logo-NetSendo-1700-x-500-px.png)\n\n# NetSendo\n\n**Professional Email Marketing \u0026 Automation Platform**\n\n[![Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://github.com/NetSendo/NetSendo/releases)\n[![PHP](https://img.shields.io/badge/PHP-8.5-purple.svg)](https://php.net)\n[![Laravel](https://img.shields.io/badge/Laravel-12-red.svg)](https://laravel.com)\n[![Vue.js](https://img.shields.io/badge/Vue.js-3-green.svg)](https://vuejs.org)\n[![License](https://img.shields.io/badge/License-Proprietary-orange.svg)](LICENSE)\n\n[📖 Documentation](https://docs.netsendo.com) • [🎓 Courses](https://netsendo.com/courses) • [💬 Forum](https://forum.netsendo.com) • [🐛 Report Bug](https://support.netsendo.com)\n\n**[🇺🇸 English](#-about-netsendo)** | [🇵🇱 Polski](#-o-netsendo-pl) | [🇩🇪 Deutsch](#-über-netsendo-de) | [🇪🇸 Español](#-acerca-de-netsendo-es)\n\n\u003c/div\u003e\n\n---\n\n## 🚀 About NetSendo\n\nNetSendo is a modern email marketing and automation platform that enables:\n\n- 📧 **Email Marketing** - Create and send email campaigns with advanced MJML editor\n- 🎥 **Webinars \u0026 Auto-Webinars** - Host live sessions or schedule automated evergreen webinars with simulated chat\n- 👥 **Live Visitors** - Real-time visitor tracking and analytics using WebSockets\n- 🛍️ **E-commerce \u0026 Funnels** - Sell digital products via Stripe, Polar, \u0026 Shopify with built-in sales funnels\n- 🤖 **AI Suite** - Campaign Auditor, Advisor, and Smart Content Generation (OpenAI, Claude, Gemini)\n- 🔌 **MCP Server** - Model Context Protocol integration for AI assistants (Claude, Cursor, VS Code)\n- 📱 **SMS Marketing** - Send SMS messages to your subscribers\n- 🔄 **Automations** - Build complex scenarios and workflows\n- 📦 **Integrations** - Native support for WordPress, WooCommerce, n8n, and more\n- 📊 **Analytics** - Detailed open, click, and conversion statistics\n- 🎨 **Templates** - Drag \u0026 drop email template builder\n- 👥 **CRM** - Manage subscribers, groups, and tags\n- 🔒 **[NMI](docs/NMI.md)** - Professional mail infrastructure with dedicated IPs, IP warming, DKIM, and blacklist monitoring\n\n---\n\n## 📸 Dashboard Preview\n\n\u003cdiv align=\"center\"\u003e\n\n![NetSendo Dashboard](https://gregciupek.com/wp-content/uploads/2025/12/CleanShot-2025-12-20-at-13.58.34.png)\n\n_Modern, intuitive dashboard with real-time analytics and campaign management_\n\n\u003c/div\u003e\n\n---\n\n## 📋 Requirements\n\n- **Docker Desktop** (recommended) or:\n  - PHP 8.5+\n  - MySQL 8.0+\n  - Redis\n  - Node.js 25+\n  - Composer\n  - **PHP GD Extension** (optional, for automatic color extraction from images)\n\n\u003e [!TIP]\n\u003e The PHP GD extension enables automatic color palette extraction from uploaded images in the Media Library. If GD is not installed, image uploads will still work, but color extraction will be skipped.\n\n---\n\n## 🐳 Installation (Docker)\n\n\u003e [!IMPORTANT] \u003e **Required Configuration Before Starting Docker**\n\u003e\n\u003e Before running Docker, you MUST configure the following environment variables in `src/.env.docker`:\n\u003e\n\u003e **1. APP_KEY** (Required - Docker will NOT build without this!):\n\u003e\n\u003e ```env\n\u003e # Find the line: APP_KEY=\n\u003e # Replace with (IMPORTANT: must start with base64:):\n\u003e APP_KEY=base64:YOUR_32_BYTE_KEY_HERE\n\u003e ```\n\u003e\n\u003e Generate a key using: `openssl rand -base64 32`\n\u003e\n\u003e **2. DB_PASSWORD** (Required - change from default):\n\u003e\n\u003e ```env\n\u003e DB_PASSWORD=your_secure_password\n\u003e ```\n\u003e\n\u003e **3. AI API Keys** (Optional - for AI features):\n\u003e\n\u003e ```env\n\u003e OPENAI_API_KEY=sk-...\n\u003e ANTHROPIC_API_KEY=sk-ant-...\n\u003e GOOGLE_AI_API_KEY=...\n\u003e ```\n\n---\n\n### 🚀 Production Deployment\n\n**Option 1: Quick Install Script (Recommended)**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/NetSendo/NetSendo/main/install.sh | bash\n```\n\nTo install a specific version:\n\n```bash\nVERSION=1.0.0 curl -fsSL https://raw.githubusercontent.com/NetSendo/NetSendo/main/install.sh | bash\n```\n\n**Option 2: Manual Production Deployment**\n\n```bash\n# Clone repository\ngit clone https://github.com/NetSendo/NetSendo.git\ncd NetSendo\n\n# Create .env file from example\ncp .env.example .env\n# Edit .env with your production settings\n\n# Start production stack (uses pre-built images)\ndocker compose up -d\n\n# Or specify a version\nNETSENDO_VERSION=1.0.0 docker compose up -d\n```\n\n| Service      | URL                   | Description      |\n| ------------ | --------------------- | ---------------- |\n| **NetSendo** | http://localhost:5029 | Main dashboard   |\n| **Mailpit**  | http://localhost:5031 | Test email inbox |\n| **MySQL**    | localhost:5030        | Database         |\n| **Reverb**   | localhost:8085        | WebSocket Server |\n\n\u003e [!TIP]\n\u003e All ports are bound to `127.0.0.1` for security. Use a reverse proxy (nginx, Caddy) for public access.\n\n---\n\n### 🛠️ Development Setup\n\n```bash\ngit clone https://github.com/NetSendo/NetSendo.git\ncd NetSendo\n\n# Start development stack (builds from source)\ndocker compose -f docker-compose.dev.yml up -d --build\n```\n\nOn first run, the container will automatically:\n\n- ✅ Install Composer and NPM dependencies\n- ✅ Generate application key\n- ✅ Run database migrations\n- ✅ Build frontend assets\n\n| Service      | URL                   | Description            |\n| ------------ | --------------------- | ---------------------- |\n| **NetSendo** | http://localhost:8080 | Main dashboard         |\n| **Mailpit**  | http://localhost:8025 | Test email inbox       |\n| **MySQL**    | localhost:3306        | Database               |\n| **Reverb**   | localhost:8085        | WebSocket Server       |\n| **Vite HMR** | http://localhost:5173 | Hot Module Replacement |\n\n---\n\n## 🔑 Licensing\n\nNetSendo requires an active license to operate.\n\n### License Plans\n\n| Plan       | Price  | Features                                                 |\n| ---------- | ------ | -------------------------------------------------------- |\n| **SILVER** | Free   | All basic features, unlimited contacts                   |\n| **GOLD**   | $97/mo | Advanced automations, priority support, API, white-label |\n\n### License Activation\n\n1. Launch the application and go to the main page\n2. Register an administrator account\n3. On the license page, select SILVER (free) or GOLD plan\n4. Enter your email - the license will be automatically activated\n\n---\n\n## 🛠️ Docker Commands\n\n### Production\n\n```bash\n# Start production stack\ndocker compose up -d\n\n# Stop\ndocker compose down\n\n# View logs\ndocker compose logs -f app\n\n# Shell access\ndocker exec -it netsendo-app bash\n\n# Artisan commands\ndocker exec netsendo-app php artisan \u003ccommand\u003e\n```\n\n### Development\n\n```bash\n# Start development stack\ndocker compose -f docker-compose.dev.yml up -d --build\n\n# Stop\ndocker compose -f docker-compose.dev.yml down\n\n# View logs\ndocker compose -f docker-compose.dev.yml logs -f app\n\n# Shell access\ndocker exec -it netsendo-app bash\n\n# Artisan commands\ndocker exec netsendo-app php artisan \u003ccommand\u003e\n\n# Composer\ndocker exec netsendo-app composer \u003ccommand\u003e\n\n# NPM\ndocker exec netsendo-app npm \u003ccommand\u003e\n```\n\n---\n\n## 📁 Project Structure\n\n```\nNetSendo/\n├── docker/                     # Docker configuration\n│   ├── nginx/                 # Nginx config\n│   └── php/                   # PHP Dockerfile + entrypoint\n├── src/                        # Laravel source code\n│   ├── app/                   # Application logic\n│   ├── config/                # Configuration\n│   ├── database/              # Migrations and seeders\n│   ├── resources/             # Frontend (Vue.js, CSS)\n│   ├── routes/                # Routing\n│   └── public/                # Public files\n├── backups/                    # Database backups\n│   └── db/                    # MySQL backup files\n├── docker-compose.yml          # Production configuration (main)\n├── docker-compose.dev.yml      # Development configuration\n└── README.md                  # This file\n```\n\n---\n\n## 🔧 Configuration\n\nConfiguration is stored in `src/.env` (automatically created from `src/.env.docker`).\n\n\u003e [!CAUTION] \u003e **You MUST configure these variables before building Docker!**\n\n### Required Environment Variables\n\n```env\n# REQUIRED: Application Key (must start with base64:)\n# Generate with: openssl rand -base64 32\nAPP_KEY=base64:YOUR_GENERATED_KEY_HERE\n\nAPP_URL=http://localhost:8080\nAPP_LOCALE=en\n\n# Database (Docker) - CHANGE THE PASSWORD!\nDB_HOST=db\nDB_DATABASE=netsendo\nDB_USERNAME=netsendo\nDB_PASSWORD=your_secure_password_here\n\n# Redis\nREDIS_HOST=redis\n\n# Mail (Mailpit in Docker)\nMAIL_HOST=mailpit\nMAIL_PORT=1025\n```\n\n### Optional: AI Integration Keys\n\n```env\n# OpenAI (for GPT features)\nOPENAI_API_KEY=sk-...\n\n# Anthropic Claude\nANTHROPIC_API_KEY=sk-ant-...\n\n# Google AI (Gemini)\nGOOGLE_AI_API_KEY=...\n```\n\n### WebSocket Configuration (Reverb)\n\n\u003e [!IMPORTANT] \u003e **WebSocket server is required** for real-time features like Live Visitors, notifications, and real-time analytics.\n\nNetSendo uses Laravel Reverb as a WebSocket server. The configuration is already included in `docker-compose.yml` and `docker-compose.dev.yml`.\n\n**Required environment variables:**\n\n```env\n# Enable broadcasting via Reverb\nBROADCAST_CONNECTION=reverb\n\n# Backend configuration (for PHP/Laravel)\nREVERB_APP_ID=netsendo\nREVERB_APP_KEY=netsendo-reverb-key\nREVERB_APP_SECRET=netsendo-reverb-secret\nREVERB_HOST=reverb                    # Docker service name\nREVERB_PORT=8085\nREVERB_SCHEME=http\n\n# Frontend configuration (for browser)\nVITE_REVERB_APP_KEY=\"${REVERB_APP_KEY}\"\nVITE_REVERB_HOST=localhost             # Or your domain for production\nVITE_REVERB_PORT=8085\nVITE_REVERB_SCHEME=http\n```\n\n**Key points:**\n\n- `REVERB_HOST=reverb` - for backend (Docker internal network)\n- `VITE_REVERB_HOST=localhost` - for browser (external access)\n- Port `8085` is exposed by the `reverb` container\n- After changing `VITE_*` variables, rebuild frontend: `npm run build`\n\n### Production Configuration\n\n\u003e [!TIP] \u003e **Auto-detected settings**: NetSendo automatically configures these from `APP_URL`:\n\u003e\n\u003e - `SESSION_DOMAIN` - extracted from APP_URL hostname\n\u003e - `SESSION_SECURE_COOKIE` - set to `true` if APP_URL uses `https://`\n\n```env\n# === REQUIRED ===\nAPP_URL=https://your-domain.com    # Your production URL (with https://)\nAPP_KEY=base64:...                 # Generate with: openssl rand -base64 32\nAPP_ENV=production\nAPP_DEBUG=false\n\n# Database\nDB_CONNECTION=mysql\nDB_HOST=db\nDB_DATABASE=netsendo_prod\nDB_USERNAME=netsendo_user\nDB_PASSWORD=your_secure_password   # CHANGE THIS!\n\n# Redis (recommended for sessions/cache)\nREDIS_HOST=redis\nSESSION_DRIVER=redis\nCACHE_DRIVER=redis\nQUEUE_CONNECTION=redis\n\n# Mail configuration\nMAIL_MAILER=smtp\nMAIL_HOST=your-smtp-server.com\nMAIL_PORT=587\nMAIL_USERNAME=your_username\nMAIL_PASSWORD=your_password\nMAIL_ENCRYPTION=tls\nMAIL_FROM_ADDRESS=noreply@your-domain.com\nMAIL_FROM_NAME=\"${APP_NAME}\"\n\n# === OPTIONAL OVERRIDES ===\n# These are auto-detected from APP_URL, only set if you need custom values:\n\n# SESSION_DOMAIN=.your-domain.com       # Auto-detected from APP_URL\n# SESSION_SECURE_COOKIE=true            # Auto-detected (true for https://)\n# TRUSTED_PROXIES=*                     # Set if behind load balancer/CDN\n```\n\n\u003e [!IMPORTANT] \u003e **Reverse Proxy Configuration**: If using nginx/Caddy as reverse proxy, ensure your proxy passes the correct headers:\n\u003e\n\u003e ```nginx\n\u003e proxy_set_header X-Forwarded-Proto $scheme;\n\u003e proxy_set_header X-Forwarded-Host $host;\n\u003e proxy_set_header X-Real-IP $remote_addr;\n\u003e ```\n\n---\n\n## 🌍 Internationalization\n\nNetSendo supports the following languages:\n\n- 🇺🇸 English (default)\n- 🇵🇱 Polski\n- 🇩🇪 Deutsch\n- 🇪🇸 Español\n\nLanguage switcher is available in the application header.\n\n---\n\n## 📈 Updates\n\nCheck for available updates:\n\n1. In the app: **Settings → Updates**\n2. On GitHub: [Releases](https://github.com/NetSendo/NetSendo/releases)\n\n### Update Process (Standard Docker Workflow)\n\n```bash\n# Stop containers\ndocker compose down\n\n# Pull latest images\ndocker compose pull\n\n# Start with new version\ndocker compose up -d\n```\n\n\u003e [!TIP]\n\u003e That's it! No rebuilding or cache clearing required. Works just like n8n and other Docker apps.\n\n**Update to specific version:**\n\n```bash\nNETSENDO_VERSION=1.1.0 docker compose up -d\n```\n\n## 📖 For detailed instructions, see [DOCKER_INSTALL.md](DOCKER_INSTALL.md)\n\n## 🔧 Troubleshooting\n\n### Container Won't Start\n\n```bash\n# Check logs\ndocker compose logs app\n\n# Verify database is healthy\ndocker compose exec db mysqladmin ping -h localhost\n```\n\n### Clear Caches\n\n```bash\ndocker compose exec app php artisan cache:clear\ndocker compose exec app php artisan config:clear\ndocker compose exec app php artisan view:clear\n```\n\n### Browser Cache Issues\n\nIf changes don't appear after update:\n\n- Hard refresh: `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac)\n- Clear browser cache or use incognito mode\n\n### WebSocket Connection Failed\n\nIf you see errors like:\n\n```\nWebSocket connection to 'ws://localhost:8080/app/...' failed\n```\n\n**Cause:** Reverb is not configured or not running.\n\n**Solution:**\n\n1. **Check Reverb configuration in `.env`:**\n\n   ```env\n   BROADCAST_CONNECTION=reverb\n   REVERB_PORT=8085\n   VITE_REVERB_PORT=8085\n   ```\n\n2. **Verify Reverb container is running:**\n\n   ```bash\n   docker compose ps\n   # Should show netsendo-reverb with status \"Up\"\n   ```\n\n3. **Check Reverb logs:**\n\n   ```bash\n   docker compose logs reverb\n   # Should show: \"Starting server on 0.0.0.0:8085\"\n   ```\n\n4. **Restart Reverb and rebuild frontend:**\n\n   ```bash\n   docker compose restart reverb\n   docker compose exec app npm run build\n   ```\n\n5. **Verify port 8085 is accessible:**\n   ```bash\n   curl http://localhost:8085\n   # Should return Reverb response\n   ```\n\n📖 For more troubleshooting, see [DOCKER_INSTALL.md](DOCKER_INSTALL.md#-troubleshooting)\n\n---\n\n## 🤝 Support\n\n- 📖 **Documentation**: https://docs.netsendo.com\n- 💬 **Forum**: https://forum.netsendo.com\n- 🎓 **Courses**: https://netsendo.com/courses\n- 🐛 **Report Bug**: https://support.netsendo.com\n- 📧 **Email**: support@netsendo.com\n\n---\n\n## 📄 License\n\nNetSendo is proprietary software. See [LICENSE](LICENSE) for details.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n## 🇵🇱 O NetSendo (PL)\n\n\u003c/summary\u003e\n\nNetSendo to nowoczesna platforma e-mail marketingu i automatyzacji. Umożliwia tworzenie kampanii emailowych, SMS, automatyzacji sprzedażowych i szczegółowej analityki.\n\n### Instalacja\n\n```bash\ngit clone https://github.com/NetSendo/NetSendo.git\ncd NetSendo\ndocker compose up -d --build\n```\n\nAplikacja dostępna pod: http://localhost:8080\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n## 🇩🇪 Über NetSendo (DE)\n\n\u003c/summary\u003e\n\nNetSendo ist eine moderne E-Mail-Marketing- und Automatisierungsplattform. Erstellen Sie E-Mail-Kampagnen, SMS, Verkaufsautomatisierungen und detaillierte Analysen.\n\n### Installation\n\n```bash\ngit clone https://github.com/NetSendo/NetSendo.git\ncd NetSendo\ndocker compose up -d --build\n```\n\nAnwendung verfügbar unter: http://localhost:8080\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\n## 🇪🇸 Acerca de NetSendo (ES)\n\n\u003c/summary\u003e\n\nNetSendo es una plataforma moderna de email marketing y automatización. Cree campañas de correo electrónico, SMS, automatizaciones de ventas y análisis detallados.\n\n### Instalación\n\n```bash\ngit clone https://github.com/NetSendo/NetSendo.git\ncd NetSendo\ndocker compose up -d --build\n```\n\nAplicación disponible en: http://localhost:8080\n\n\u003c/details\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with ❤️ by [NetSendo Team](https://netsendo.com)**\n\n![NetSendo Icon](https://gregciupek.com/wp-content/uploads/2025/12/logo-netsendo-kwadrat-ciemne.png)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetsendo%2Fnetsendo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetsendo%2Fnetsendo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetsendo%2Fnetsendo/lists"}