{"id":15096057,"url":"https://github.com/solomonbaez/hyacinth","last_synced_at":"2026-02-08T08:07:13.537Z","repository":{"id":194906849,"uuid":"691837616","full_name":"solomonbaez/hyacinth","owner":"solomonbaez","description":"Enterprise newsletter API built in Go.","archived":false,"fork":false,"pushed_at":"2023-12-08T09:32:40.000Z","size":9204,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T22:59:17.805Z","etag":null,"topics":["gin","golang","newsletter","rest-api"],"latest_commit_sha":null,"homepage":"https://solomonbaez.dev","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/solomonbaez.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}},"created_at":"2023-09-15T02:05:54.000Z","updated_at":"2023-11-08T21:20:06.000Z","dependencies_parsed_at":"2024-06-21T05:49:00.377Z","dependency_job_id":"6d177cc7-f7e9-487b-bbb3-fc4b9cfdfb66","html_url":"https://github.com/solomonbaez/hyacinth","commit_stats":null,"previous_names":["solomonbaez/sb-go-newsletter-api","solomonbaez/hyacinth"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/solomonbaez/hyacinth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solomonbaez%2Fhyacinth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solomonbaez%2Fhyacinth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solomonbaez%2Fhyacinth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solomonbaez%2Fhyacinth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solomonbaez","download_url":"https://codeload.github.com/solomonbaez/hyacinth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solomonbaez%2Fhyacinth/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29225092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T06:05:31.539Z","status":"ssl_error","status_checked_at":"2026-02-08T05:58:33.853Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["gin","golang","newsletter","rest-api"],"created_at":"2024-09-25T15:45:14.820Z","updated_at":"2026-02-08T08:07:13.522Z","avatar_url":"https://github.com/solomonbaez.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hyacinth\n\nHyacinth is a cloud-native, enterprise-level newsletter service built in Go utilizing Gin routing, PostgreSQL as a database, and Redis for caching/session support. The service is designed to be secure, scalable, and highly customizable.\n\n## Table of Contents\n\n- [Pre-requisites](#pre-requisites)\n    - [Linux](#linux)\n    - [macOS](#macos)\n    - [Windows](#windows)\n- [Configuration](#configuration)\n- [Usage](#usage)\n  - [Launch](#launch)\n  - [Admin Interface](#admin-interface)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Pre-requisites\n\n- [Go](https://go.dev/doc/install)\n```bash\n# Verify your Go installation by running the following command\ngo version\n```\n\n- [PostgreSQL](https://www.postgresql.org/download/)\n```bash\n# Verify your psql installation by running the following command\npsql --version\n```\n\n### Linux\n- PostgreSQL CLI\n```bash\n# Ubuntu \nsudo apt-get update\nsudo apt-get install postgresql-client\n# Arch \nsudo pacman -S postgresql\n```\n\n- Go Migrate\n```\ngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest\n```\n\n### macOS\n- PostgreSQL CLI\n```bash\nbrew doctor\nbrew update\nbrew install libpq\nbrew link --force libpq\n```\n\n- Go Migrate\n```\ngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest\n```\n\n### Windows\n- Go Migrate\n```\n# Go Migrate\ngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest\n```\n\n## Configuration\n\nThe Service can be customized to suit your specific requirements by cloning the `dev.yaml` file located within `api/configs` into a separate `production.yaml` file within the same directory. Below are the key configuration options and their explanations:\n\n### Application Configuration\n\n- `port`: The port on which the service will listen for incoming requests (e.g., `8000`).\n- `host`: The host address to bind the service to (e.g., `0.0.0.0` to listen on all available network interfaces).\n\n### Database Configuration\n\n- `host`: The hostname or IP address of your PostgreSQL database server (e.g., `\"localhost\"`).\n- `port`: The port on which PostgreSQL is running (e.g., `\"5432\"`).\n- `username`: The username to connect to the PostgreSQL database (e.g., `\"postgres\"`).\n- `password`: The password for the PostgreSQL user (e.g., `\"password\"`).\n- `database_name`: The name of the PostgreSQL database (e.g., `\"newsletter\"`).\n\n### Email Client Configuration\n\n- `server`: The base server for your email service (e.g., `\"postmark\"`).\n- `port`: The port on which the server is running (e.g., `597`).\n- `username`: The username required for server access (e.g., `\"username\"`).\n- `password`: The password required for server access (e.g., `\"password\"`).\n- `sender`: The sender email registered to the server (e.g., `\"name@example.com\"`\n\n### Redis Configuration\n\n- `host`: The hostname or IP address of your Redis database server (e.g., `\"localhost\"`).\n- `port`: The port on which Redis is running (e.g., `\"6379\"`).\n- `conn`: The connection type (e.g., `\"tcp\"`).\n\nTo customize your service, open the `production.yaml` file you created within `api/configs` and update the desired values according to your environment and requirements. After making changes, be sure to rebuild and restart the service with the `-cfg production` flag (as described below) for the new configuration to take effect.\n\nPlease ensure that sensitive information such as passwords, authentication tokens, and cryptographic secrets are kept secure and are not exposed in your version control system.\n\n## Usage\n### Launch\n\n1. Initialize the PostgreSQL and Redis containers:\n\n```bash\n./scripts/init_db.sh\n./scripts/init_redis.sh\n```\n\n3. Build and run via 'go':\n```bash\ngo build ./api\ngo run ./api\n```\n\n4. (OPTIONAL) Build and run via 'go' with a production configuration:\n```bash\ngo build ./api\ngo run ./api -cfg production\n```\n\n### Admin interface\nAccess the admin interface at http://127.0.0.1:8000/login\n\n    Default account:\n        Username: admin\n        Password: gloriainvigilata\n\n## Contributing\n\nContributions are welcome! If you'd like to contribute to this project, please follow these steps:\n\n1. Fork the repository on GitHub.\n2. Clone your forked repository to your local machine.\n3. Create a new branch for your feature or bug fix.\n4. Make your changes and commit them.\n5. Push your changes to your fork on GitHub.\n6. Open a pull request to the main repository.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolomonbaez%2Fhyacinth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolomonbaez%2Fhyacinth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolomonbaez%2Fhyacinth/lists"}