{"id":17902670,"url":"https://github.com/philtasticguy/hobbystacks-react-aspnetcore-postgresql","last_synced_at":"2026-04-09T11:37:26.908Z","repository":{"id":176863027,"uuid":"514065368","full_name":"PhiltasticGuy/hobbystacks-react-aspnetcore-postgresql","owner":"PhiltasticGuy","description":"Minimal cost technology stack for React, ASP.NET Core and PostgreSQL with sample implementations for anyone with commercial hobby projects.","archived":false,"fork":false,"pushed_at":"2022-07-14T23:01:30.000Z","size":308,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-16T01:43:19.524Z","etag":null,"topics":["aspnetcore","csharp","docker","hobbystacks","postgresql","react","typescript"],"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/PhiltasticGuy.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":"2022-07-14T22:32:29.000Z","updated_at":"2024-02-12T15:47:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"31c26437-ae24-4a87-8cf0-e441bcb4e581","html_url":"https://github.com/PhiltasticGuy/hobbystacks-react-aspnetcore-postgresql","commit_stats":null,"previous_names":["philtasticguy/hobbystacks-react-aspnetcore-postgresql"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhiltasticGuy%2Fhobbystacks-react-aspnetcore-postgresql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhiltasticGuy%2Fhobbystacks-react-aspnetcore-postgresql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhiltasticGuy%2Fhobbystacks-react-aspnetcore-postgresql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PhiltasticGuy%2Fhobbystacks-react-aspnetcore-postgresql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PhiltasticGuy","download_url":"https://codeload.github.com/PhiltasticGuy/hobbystacks-react-aspnetcore-postgresql/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237864038,"owners_count":19378257,"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","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":["aspnetcore","csharp","docker","hobbystacks","postgresql","react","typescript"],"created_at":"2024-10-28T16:36:37.002Z","updated_at":"2025-12-30T23:10:10.692Z","avatar_url":"https://github.com/PhiltasticGuy.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hobby Stacks - React / ASP.NET Core / PostgreSQL\n\n[![StackShare](http://img.shields.io/badge/tech-stack-0690fa.svg?style=flat)](https://stackshare.io/PhiltasticGuy/hobbystacks)\n\n## Why create *Hobby Stacks*?\n\nOur goal is to define a technology stack for hobby projects with **minimal costs**. We also want to offer real-world examples that go beyond canned tutorials showcasing isolated technologies or features.\n\nWe decided to gear this tech stack towards **commercial projects** which meant opting for a private container registry and code repository.\n\nThis example application uses **React**, **.NET Core (ASP.NET Core)** and **PostgreSQL**.\n\n| Features                         | Tools                                  | Alternatives       | Costs |\n| -------------------------------- | -------------------------------------- | ------------------ | ----- |\n| Hosting                          | [DigitalOcean](https://www.digitalocean.com/pricing/#Compute) | [Vultur](https://www.vultr.com/products/cloud-compute/#pricing) | **5$**    |\n| Container Registry (**Private**) | [Azure Container Registry](https://azure.microsoft.com/en-ca/services/container-registry/) | [GitLab Container Registry](https://docs.gitlab.com/ee/user/project/container_registry.html)* | **5$** / Free |\n| Repositories (**Private**)       | [Azure DevOps](https://azure.microsoft.com/en-ca/services/devops/git-repos/) | GitLab, GitHub      | *Free*  |\n| CI/CD Pipelines                  | [Azure Pipelines](https://azure.microsoft.com/en-ca/services/devops/pipelines/) | GitLab, CircleCI, [Travis CI](https://travis-ci.com/plans/) | *Free*  |\n| Web Server (Reverse Proxy)       | Nginx                                  |                    | *Free*  |\n| Web Performance \u0026 Security       | [Cloudflare](https://www.cloudflare.com/plans/#compare-features) | | *Free*  |\n| SSL Certificates                 | [Let's Encrypt](https://letsencrypt.org/about/) + [Certbot](https://certbot.eff.org/about/) | | *Free*  |\n| Multi-Container Tool             | Docker Compose                         |                    | *Free*  |\n| IDE                              | [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/) | [Visual Studio Code](https://code.visualstudio.com/) | *Free*  |\n| Front-end + UI                   | ASP.NET Core - MVC + React             |                    | *Free*  |\n| APIs                             | ASP.NET Core - Web API                 |                    | *Free*  |\n| Database                         | PostgreSQL                             |                    | *Free*  |\n\n*\\* GitLab Container Registry is only available for projects hosted on GitLab.*\n\n## Getting Started\n\n1. DigitalOcean\n    - [Prerequisites](#prerequisites-digitalocean)\n    - [Provision Droplet on DigitalOcean](#provision-droplet-on-digitalocean)\n1. Azure DevOps\n    - [Prerequisites](#prerequisites-azure-devops)\n    - [Fork Project in Azure DevOps](#fork-project-in-azure-devops)\n    - [Provision Azure Container Registry](#provision-azure-container-registry)\n    - [Update Deployment Files](#update-deployment-files)\n    - [Configure Service Connections](#configure-service-connections)\n    - [Create Azure Pipelines](#create-azure-pipelines)\n    - [Configure Variables in Azure Pipelines](#configure-variables-in-azure-pipelines)\n1. Deployment\n    - [Create Build from Azure DevOps](#create-build-from-azure-devops)\n\n### DigitalOcean\n\n#### Prerequisites (DigitalOcean)\n\nIn order to provision Droplets on DigitalOcean you will need:\n\n- **DigitalOcean Account**:\n  - If you don't have one, [create your free DigitalOcean account](https://www.digitalocean.com/products/droplets/).\n- **Domain Name**: A domain name from any registrar that you can point to your Droplet. You can refer to this tutorial on DigitalOcean about how to point custom domains from common domain registrars to your Droplet.\n\n#### Provision Droplet on DigitalOcean\n\nMore details.\n\n### Azure DevOps\n\n#### Prerequisites (Azure DevOps)\n\nIn order to use all of the tools in this stack you will need:\n\n- **Azure DevOps Services Organization**:\n  - If you don't have one, [create your free Azure DevOps Services account](https://aka.ms/SignupAzureDevOps).\n- **Azure Account and Subscription**: You will need an active Azure account and subscription to provision the private Azure Container Registry.\n  - If you don't have one, [create your free Azure account](https://azure.microsoft.com/en-us/free/);\n  - If you have an active *Visual Studio subscription*, you are entitled to free Azure credit every month. You can refer to this [link](https://azure.microsoft.com/en-us/pricing/member-offers/msdn-benefits-details/) to read more about the offer and how to start using your monthly Azure credit.\n\n#### Fork Project in Azure DevOps\n\nMore details.\n\n#### Provision Azure Container Registry\n\nFor convenience, the steps to provision the Azure Container Registry have been scripted in PowerShell. The `provisionContainerRegistry.ps1` script can be found under `/src/infrastructure` in the [Azure DevOps repository](https://dev.azure.com/PhiltasticGuy/_git/aspnetcore-react-hobby-tech-stack).\n\nIn order to run the PowerShell script, you will need to [install the Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). You can refer to [Microsoft's quickstart guide](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-azure-cli) to learn more about the commands used in the script.\n\n```PowerShell\n.\\provisionContainerRegistry.ps1 -resourceGroupName \"hobbystacks-rg\" -resourceGroupLocation \"EastUS\" -containerRegistryName \"hobbystacksRegistry\" -containerRegistrySku \"Basic\"\n```\n\n#### Update Deployment Files\n\n1. Docker Compose\n    - Azure Container Registry\n1. Nginx\n    - server_name\n    - ssl_certificate\n    - ssl_Certificate_key\n\nMore details.\n\n#### Configure Service Connections\n\n1. Docker Registry\n    - Azure Container Registry\n1. SSH\n    - DigitalOcean\n\nMore details.\n\n#### Create Azure Pipelines\n\n1. Build\n    - YAML\n1. Release\n    - Enable CD.\n    - Add Copy files over SSH step.\n    - Add SSH step.\n\nMore details.\n\n#### Configure variables in Azure Pipelines\n\n1. Secret Variables\n    - Azure Container Registry - Username\n    - Azure Container Registry - Password\n1. Variables\n    - Certbot - Domains\n    - Certbot - Main Domain\n    - Certbot - Email\n    - Certbot - Data Path\n\nMore details.\n\n#### Setup Project in Azure DevOps (Azure DevOps Demo Template)\n\nMore details.\n\n### Deployment\n\n#### Create Build from Azure DevOps\n\nMore details.\n\n#### View Results in Browser\n\nMore details.\n\n## Authors\n\n- **Philippe Turcotte** - *Initial work*\n\nSee also the list of [contributors](https://github.com/PhiltasticGuy/hobbystacks-react-aspnetcore-postgresql/contributors) who participated in this project.\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%2Fphiltasticguy%2Fhobbystacks-react-aspnetcore-postgresql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphiltasticguy%2Fhobbystacks-react-aspnetcore-postgresql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphiltasticguy%2Fhobbystacks-react-aspnetcore-postgresql/lists"}