{"id":39116512,"url":"https://github.com/forbiddencoding/reddit-post-notifier","last_synced_at":"2026-01-17T20:13:57.666Z","repository":{"id":302481036,"uuid":"987929193","full_name":"forbiddencoding/reddit-post-notifier","owner":"forbiddencoding","description":"Reddit Post Notifier allows users to create schedules to be notified via E-Mail with new Reddit Posts containing a specific keyword from user specified subreddits and the ability to set additional filters.","archived":false,"fork":false,"pushed_at":"2025-07-02T15:29:19.000Z","size":119,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-02T16:38:06.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/forbiddencoding.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-05-21T19:54:55.000Z","updated_at":"2025-07-02T15:29:23.000Z","dependencies_parsed_at":"2025-07-02T16:49:23.280Z","dependency_job_id":null,"html_url":"https://github.com/forbiddencoding/reddit-post-notifier","commit_stats":null,"previous_names":["forbiddencoding/reddit-post-notifier"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/forbiddencoding/reddit-post-notifier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forbiddencoding%2Freddit-post-notifier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forbiddencoding%2Freddit-post-notifier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forbiddencoding%2Freddit-post-notifier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forbiddencoding%2Freddit-post-notifier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forbiddencoding","download_url":"https://codeload.github.com/forbiddencoding/reddit-post-notifier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forbiddencoding%2Freddit-post-notifier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28517429,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"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":[],"created_at":"2026-01-17T20:13:56.974Z","updated_at":"2026-01-17T20:13:57.655Z","avatar_url":"https://github.com/forbiddencoding.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reddit Post Notifier\n\n**Reddit Post Notifier** allows users to create schedules to be notified via E-Mail with new Reddit Posts containing a\nspecific keyword from user specified subreddits and the ability to set additional filters. The project uses Temporal for\ncustom schedules and to assist in the interaction with the Reddit API (rate limiting and retries).\n\nThe application exposes a REST API for CRUD operations. A web frontend for your convenience can be\nfound [here](https://github.com/forbiddencoding/reddit-post-notifier-web).\n\n## Getting Started\n\n### Prerequisites\n\nTo get started with the project, you'll need to have the following installed on your machine:\n\n* **Golang 1.24+**: The application is written in Go\n* **Docker** and **Docker Compose**: Used to run Temporal and Databases\n\n### Navigating the Codebase\n\nThe application is structured as a **modular monolith**, with its functionality divided into three services.\nEach service can be run independently.\n\n| Directory           | Description                                                                                                                                                                                        |\n|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `services/app`      | This service provides the REST API that handles user requests for creating, reading, updating, and deleting schedules. It acts as the interface between the web frontend and the Temporal backend. |\n| `services/digester` | A Temporal Worker that runs the Digest Workflow and its associated Activities. This is responsible for compiling the list of matching Reddit posts and sending the email notification.             |\n| `services/redditor` | A Temporal Worker that runs the Post Workflow and its Activities. This worker is dedicated to interacting with the Reddit Data API and handles rate limiting to avoid hitting API call limits.     |\n\n### Supported Databases\n\nThe project natively supports the following databases:\n\n* PostgreSQL v17+\n* MySQL v8+\n* SQLite\n\nOlder versions and other compatible SQL databases should work as well, but have not been tested.\n\n\u003e [!IMPORTANT]\n\u003e When using SQLite, all services have to run on the same host.\n\n### Database Schema\n\nThe schema for the database has to be applied manually. The schema can be found in the\n`schema/sql/{DATABASE_SYSTEM}/reddipostnotifier` directory.\n\n### Running the Application\n\n#### 1. Clone the repository\n\n```bash\ngit clone https://github.com/forbiddencoding/reddit-post-notifier.git\ncd reddit-post-notifier\n```\n\n#### 2. Create a Reddit App\n\nLogin to your Reddit Account and create a Reddit App [here](https://old.reddit.com/prefs/apps).\n\n* Give the application a name you like\n* Select `script` for the type of application\n* Set the `redirect uri` to `http://localhost` (The redirect uri itself does not matter, but it cannot be left blank and\n  needs to be a valid formatted uri)\n* Click on `create app` and make sure to store the ClientID and ClientSecret somewhere safe for the later steps\n\n#### 3. Create a Google Mail App Password\n\nLogin to your Google Account and visit https://myaccount.google.com/apppasswords and enter an App-Name.\nAnd click on `Create`. Make sure to store the App Password somewhere safe, you won't be able to see it again.\n\n#### 4. Configure the Application\n\nBy default, the application expects a `config.yml` file in the `config/` directory. Copy the contents of the\n`config/example.config.yml` file into a new `config.yml` file and populate the missing values with the Reddit App\nCredentials and Google Mail App Password from steps 2. and 3.\n\n* The `reddit.userAgent` value has to be formatted like this:\n  `go:\u003cGITHUB_URL_OF_THE_PROJECT\u003e:v\u003cSEMANTIC_VERSION\u003e (by /u/\u003cYOUR_REDDIT_USERNAME\u003e)`\n* The Google Mail App Password has to be entered without spaces\n* Uncomment one of the three `persistence.driver` and `persistence.dsn` keys or create your own. All example\n  configurations are for local use with one of the compose files.\n\n#### 4. Start the Docker services\n\nThe project comes with two docker compose files:\n\n* `compose.yml`: Uses Postgres for Temporal and is used for the Reddit Post Notifier\n* `compose-mysql.yml` Uses MySQL for Temporal and is used for the Reddit Post Notifier\n\nYour choice of these compose files should depend on the database chosen in the configuration in step 4. For SQLite\neither compose file works.\n\nStart the docker services by running `docker compose up -f \u003cCOMPOSE_FILE_NAME\u003e.yml`\n\n#### 5. Database Setup\n\nChoose one database, according to your configuration from step 4:\n\n##### Postgres\n\n1. Create a database with its name according to your configuration from step 4.\n2. Connect to the database and execute the `schema/sql/postgres/redditpostnotifier/schema.sql`\n\n##### MySQL\n\n1. Create a database with its name according to your configuration from step 4.\n2. Connect to the database and execute the `schema/sql/mysql/redditpostnotifier/schema.sql`\n\n##### SQLite\n\n1. Create a database file (i.e. `data/sqlite/local.db`) with its path according to your configuration from step 4.\n2. Connect to the database and execute the `schema/sql/sqlite/redditpostnotifier/schema.sql`\n\n#### 6. Start the Reddit Post Notifier Services\n\nFrom the root of the project run the following command:\n\n```bash\ngo run cmd/server/main.go start\n```\n\nThis will start all services with the config file being `config/config.yml`.\n\n##### Flags\n\n| Option               | Description                                                                         |\n|----------------------|-------------------------------------------------------------------------------------|\n| `--config` or `-c`   | Config file path relative to the application. Default is `./config/config.yml`.     |\n| `--services` or `-s` | A comma separated list of service(s) to start. Default is `app,digest,reddit` (all) |\n\n## API\n\nShould you use the REST API directly, without the Web UI, the documentation can be found [here](docs/API.md).\n\n## License\n\nThis project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) and [NOTICE](NOTICE) files for\ndetails.\n\n\u003cp align=\"center\"\u003eMade with ❤️ in the Black Forest.\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforbiddencoding%2Freddit-post-notifier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforbiddencoding%2Freddit-post-notifier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforbiddencoding%2Freddit-post-notifier/lists"}