{"id":29721037,"url":"https://github.com/rasadov/fertit","last_synced_at":"2025-08-17T12:39:29.895Z","repository":{"id":304740260,"uuid":"1002440802","full_name":"rasadov/Fertit","owner":"rasadov","description":"A Go-based web application for sending newsletters and allowing subscribers to manage their preferences. Designed for ease of deployment (Docker-ready), with a modern web UI and admin dashboard.","archived":false,"fork":false,"pushed_at":"2025-07-22T22:51:04.000Z","size":974,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-23T00:23:42.247Z","etag":null,"topics":["docker","email","email-marketing","email-sender","gin","go","golang","gorm","mail","newsletter","newsletter-management","newsletters","rest-api","smtp"],"latest_commit_sha":null,"homepage":"https://www.fertit.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rasadov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-15T13:38:39.000Z","updated_at":"2025-07-22T22:51:08.000Z","dependencies_parsed_at":"2025-07-15T03:03:01.792Z","dependency_job_id":"53bdc92b-fa8d-4782-8012-51178ada41ac","html_url":"https://github.com/rasadov/Fertit","commit_stats":null,"previous_names":["rasadov/newslettermanager","rasadov/fertit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rasadov/Fertit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasadov%2FFertit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasadov%2FFertit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasadov%2FFertit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasadov%2FFertit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rasadov","download_url":"https://codeload.github.com/rasadov/Fertit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rasadov%2FFertit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270850051,"owners_count":24656443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","email","email-marketing","email-sender","gin","go","golang","gorm","mail","newsletter","newsletter-management","newsletters","rest-api","smtp"],"created_at":"2025-07-24T14:18:03.071Z","updated_at":"2025-08-17T12:39:29.879Z","avatar_url":"https://github.com/rasadov.png","language":"Go","readme":"# Mail List Management App\n\n![thumbnail](thumbnail.jpg)\n\nTry it out: [https://www.fertit.com](https://www.fertit.com)\n\nA Go-based web application for sending newsletters and allowing subscribers to manage their preferences. Designed for ease of deployment (Docker-ready), with a modern web UI and admin dashboard.\n\n## Features\n\n- **Admin dashboard**: Login, manage subscribers, and send newsletters.\n- **Subscriber portal**: Signup, manage email preferences, and unsubscribe.\n- **Rate limiting**: Prevents abuse of subscription endpoints.\n- **JWT authentication**: Secure admin session management.\n- **SMTP integration**: Send emails using your SMTP provider.\n- **PostgreSQL**: Stores subscriber and newsletter data.\n- **Redis**: Used for rate limiting and caching.\n- **Responsive UI**: HTML templates for dashboard, login, preferences, and success messages.\n\n## Technology Stack\n\n- **Backend**: Go (Gin web framework)\n- **Database**: PostgreSQL\n- **Cache/Queue**: Redis\n- **Frontend**: HTML templates (Go's html/template)\n- **Containerization**: Docker, Docker Compose\n\n## Project Structure\n\n```\nFertit/\n├── cmd/server/main.go        # Application entry point\n├── internal/handlers/        # Route handlers (admin, subscriber, static)\n├── internal/services/        # Business logic (auth, email, subscriber, rate limiting)\n├── internal/database/        # Database and Redis connection logic\n├── web/templates/            # HTML templates (dashboard, login, preferences, etc.)\n├── Dockerfile                # Multi-stage build for Go app\n├── docker-compose.yml        # Compose file for app, PostgreSQL, Redis\n├── .env.example              # Example environment variables\n└── ...\n```\n\n## Getting Started\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/rasadov/Fertit.git\ncd Fertit\n```\n\n### 2. Configure Environment Variables\n\nCopy the example file and fill in your SMTP, DB, and other secrets:\n\n```bash\ncp .env.example .env\n# Edit .env with your values\n```\n\n### 3. Run with Docker Compose\n\nThis will start the Go app, PostgreSQL, and Redis:\n\n```bash\ndocker-compose up --build\n```\n\n- App will be available at [http://localhost:8080](http://localhost:8080)\n- PostgreSQL at port 5433 (default user/pass from .env)\n- Redis at port 6379\n\n### 4. Manual Run (without Docker)\n\n- Install Go 1.23+\n- Set up PostgreSQL and Redis (see .env.example for config)\n- Build and run:\n\n```bash\ngo build -o fertit ./cmd/server\n./fertit\n```\n\n## Usage\n\n### Admin\n- Visit `/admin/login` to access the dashboard\n- Credentials set via `ADMIN_USERNAME` and `ADMIN_PASSWORD` in `.env`\n- Send newsletters, manage subscribers\n\n### Subscribers\n- Homepage: subscribe with email\n- `/preferences`: manage subscription topics or unsubscribe\n\n## Environment Variables\n\nSee `.env.example` for all options. Key variables:\n- `POSTGRES_URL` — PostgreSQL connection string\n- `REDIS_ADDR` — Redis address\n- `SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD` — SMTP settings\n- `JWT_SECRET`, `JWT_ISSUER` — JWT auth config\n- `ADMIN_USERNAME`, `ADMIN_PASSWORD` — Admin credentials\n- `BASE_URL` — Public URL of your app\n\n## License\n\n[MIT](LICENSE) or see repository for details.\n\n---\n\nFeel free to open issues or PRs for improvements!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasadov%2Ffertit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frasadov%2Ffertit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasadov%2Ffertit/lists"}