{"id":16145694,"url":"https://github.com/choonster/catalogue-scanner","last_synced_at":"2026-02-15T04:33:49.939Z","repository":{"id":37980894,"uuid":"238453496","full_name":"Choonster/catalogue-scanner","owner":"Choonster","description":"Scans catalogues for specific items","archived":false,"fork":false,"pushed_at":"2025-03-08T14:29:29.000Z","size":1890,"stargazers_count":2,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T17:49:25.847Z","etag":null,"topics":["azure","azure-functions","blazor","catalog","catalogue","csharp","dotnet","dotnet6"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Choonster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-02-05T13:12:13.000Z","updated_at":"2025-03-08T11:53:53.000Z","dependencies_parsed_at":"2023-02-14T17:46:28.440Z","dependency_job_id":"ce2238e1-2f67-424d-89fd-eec5ae242fc7","html_url":"https://github.com/Choonster/catalogue-scanner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Choonster/catalogue-scanner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choonster%2Fcatalogue-scanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choonster%2Fcatalogue-scanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choonster%2Fcatalogue-scanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choonster%2Fcatalogue-scanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Choonster","download_url":"https://codeload.github.com/Choonster/catalogue-scanner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Choonster%2Fcatalogue-scanner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29469328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T04:33:36.478Z","status":"ssl_error","status_checked_at":"2026-02-15T04:33:36.033Z","response_time":118,"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":["azure","azure-functions","blazor","catalog","catalogue","csharp","dotnet","dotnet6"],"created_at":"2024-10-10T00:17:14.917Z","updated_at":"2026-02-15T04:33:49.919Z","avatar_url":"https://github.com/Choonster.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catalogue Scanner\n\nCatalogue Scanner is a .NET 6 Azure Functions app that periodically checks online catalogues for specials matching configurable rules and sends a notification email when it finds matching items.\n\nIt currently only supports Coles and Woolworths catalogues, but the app has been built with extensibility in mind and support for more stores is planned.\n\nThere is also a configuration UI built with Blazor that can be used to edit the match rules and various other settings.\n\nThe app and its related resources can be hosted on Azure for around AU$5.00 per month.\n\n## Deployment\n\n### SendGrid\n\nCatalogue Scanner uses SendGrid to send the catalogue digest emails. You can use any SendGrid account, but it's easiest to create through Azure.\n\n- In the Azure Portal, create a SendGrid account.\n- Open the new SendGrid account and click \"Manage\" to open the SendGrid dashboard for the account.\n- Open the Settings \u003e API Keys page.\n- Create an API Key with Restricted Access and only grant it the \"Mail Send\" permission.\n- Copy the API Key so you can use it in the following deployment steps and save it in a secure location so you can access it again if needed.\n\nYou may also need to set up Sender Authentication in SendGrid before you can send emails.\n\n### Application Resources\n\nCatalogue Scanner and the Configuration UI can be deployed to Azure with their related resources using the **arm/main.bicep** ARM template, the parameters are explained in the template file. See [this page](https://docs.microsoft.com/en-au/azure/azure-resource-manager/bicep/deploy-to-resource-group) for more details about how to use the template.\n\n**arm/deploy.ps1** can also be used as a convenient way to deploy the template directly from the PowerShell command-line. **arm/parameters/deployment-test.parameters.json** is an example of a parameter file that can be used with the template.\n\nThe template uses the lowest possible SKUs for Catalogue Scanner and Configuration UI (**Consumption** and **Free**, respectively); but uses **Standard** for the Azure App Configuration instance, this can be changed to **Free** if you don't already have a Free instance in the subscription.\n\nThe Configuration UI is a Blazor Server app that can be hosted on any platform supported by Blazor, but hosting it in Azure App Service is the most convenient option and is what the template does.\n\n### Application Code\n\nThe application code can be deployed to Azure using GitHub Actions, see the workflows in the **.github** folder for examples of this. Deployment from other CI/CD services should also be possible, but Catalogue Scanner must not be deployed from Windows as Playwright (a dependency used for web scraping) relies on Linux file permissions to be set.\n\n**CatalogueScanner.DefaultHost** can be customised to only include the plugins you want or replaced entirely with your own host application, the actual logic is provided by the referenced projects and plugins.\n\n### Authentication\n\nThe Function App and App Service can use the built-in Azure AD authentication provided by Azure App Service. For the Configuration UI to access the Catalogue Scanner API, you should [manually register](https://docs.microsoft.com/en-au/azure/app-service/configure-authentication-provider-aad#advanced) them both with Azure AD and change the Configuration UI to request the `user_impersonation` permission in Catalogue Scanner.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchoonster%2Fcatalogue-scanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchoonster%2Fcatalogue-scanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchoonster%2Fcatalogue-scanner/lists"}