{"id":20068598,"url":"https://github.com/cowienduckie/promag","last_synced_at":"2026-04-06T08:31:45.408Z","repository":{"id":196251147,"uuid":"695612377","full_name":"cowienduckie/promag","owner":"cowienduckie","description":"Graduated project using Microservices architecture, K8S, .NET and ReactJS","archived":false,"fork":false,"pushed_at":"2026-02-11T17:36:10.000Z","size":8695,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-12T01:50:10.154Z","etag":null,"topics":["dotnet-core","graphql","identity-server","k8s"],"latest_commit_sha":null,"homepage":"https://gw.promag.minhtrandev.com/graphql","language":"C#","has_issues":false,"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/cowienduckie.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-23T17:41:37.000Z","updated_at":"2025-12-18T17:50:24.000Z","dependencies_parsed_at":"2025-01-12T23:39:18.270Z","dependency_job_id":null,"html_url":"https://github.com/cowienduckie/promag","commit_stats":null,"previous_names":["cowienduckie/promag"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cowienduckie/promag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowienduckie%2Fpromag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowienduckie%2Fpromag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowienduckie%2Fpromag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowienduckie%2Fpromag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cowienduckie","download_url":"https://codeload.github.com/cowienduckie/promag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cowienduckie%2Fpromag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31464604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"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":["dotnet-core","graphql","identity-server","k8s"],"created_at":"2024-11-13T14:07:43.032Z","updated_at":"2026-04-06T08:31:45.386Z","avatar_url":"https://github.com/cowienduckie.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ProMag - A Project Management Web Application\n\n[![wakatime](https://wakatime.com/badge/github/cowienduckie/promag.svg)](https://wakatime.com/badge/github/cowienduckie/promag)\n\n## Introduction\n\n**ProMag** is the graduated project for my engineering degree. It is a web application that helps members in a project team can easily to collaborate and manage personal tasks, and the project's progress too!\n\nThe project is built with microservice architecture using .NET 8 and ReactJS. In addition, it can run locally with Docker or any Kubernetes cluster, or cloud services. Moreover, it also provide monitoring tools for tracing logging and metrics, CI/CD pipelines for building and testing.\n\n## Technical Stacks\n\n- .NET 8\n- GraphQL with [HotChocolate](https://chillicream.com/products/hotchocolate) using as a GraphQL Server and Gateway\n- Inter-service communication with [gRPC](https://grpc.io/)\n- Message Broker with [RabbitMQ](https://www.rabbitmq.com/) and [MassTransit](https://masstransit.io/)\n- SQL Database with [PostgreSQL](https://www.postgresql.org/)\n- Secrets Management with [Vault](https://www.vaultproject.io/)\n- Accessing database with [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/)\n- In-process messaging with [MediatR](https://github.com/jbogard/MediatR)\n- Logging with [Serilog](https://serilog.net/), [Seq](https://datalust.co/seq)\n- OAuth2 and OIDC implementation with [Duende IdentityServer](https://duendesoftware.com/products/identityserver)\n- Containerization and manage them with [Docker](https://www.docker.com/), [Docker Compose](https://docs.docker.com/compose/), [Kubernetes](https://kubernetes.io/), [Helm](https://helm.sh/)\n\n- Frontend with [ReactJS](https://reactjs.org/), [Apollo Client](https://www.apollographql.com/docs/react/), [Ant Design](https://ant.design/)\n\n## Local Development\n\n### Prepare For Development\n\n```SHELL\nnpm install\ndotnet build Promag.sln\n```\n\n### Docker Compose\n\nFrom the root directory `promag` of the project, run the following command:\n\n```SHELL\ndocker compose -f docker-compose.yml -f docker-compose.override.yml -p promag up -d --build\n```\n\n### Kubernetes\n\n#### Prerequisites\n\n- [Docker Desktop](https://www.docker.com/products/docker-desktop)\n- [Docker Compose](https://docs.docker.com/compose/)\n- [Kubernetes](https://kubernetes.io/)\n- [Helm](https://helm.sh/)\n- [Lens](https://k8slens.dev/) (Optional)\n\n#### Prepare Steps\n\n**Step 1.** Enable **Kubernetes** in Docker Desktop and enable `dns`, `helm3`, `registry`, `storage`\n\n**Step 2.** Get into the `promag` directory:\n\n```SHELL\ncd \u003cpath-to-promag-directory\u003e\n```\n\n**Step 3.** Create a namespace for the project named `local`:\n\n```SHELL\nkubectl create namespace local\n```\n\n**Step 4.** Run a local registry using this command at port `32000`:\n\n```SHELL\ndocker run -d -p 32000:5000 --restart=always --name registry registry:2\n```\n\n#### Deploy Steps\n\n**Step 1.** Build the images:\n\n```SHELL\nsh ./deploy-all.sh --image-build --skip-infrastructure --skip-service\n```\n\n**Step 2.** Push the images to the local registry:\n\n```SHELL\nsh ./deploy-all.sh --image-push --skip-clean --skip-service --skip-infrastructure\n```\n\n**Step 3.** Deploy the infrastructure using helm for `secret`, `pvc`, `rabbitmq`, `mailhog`, `postgresql`:\n\n```SHELL\nsh ./deploy-all.sh --skip-clean --skip-service\n```\n\n**Step 4.** Deploy the services, including `identity server`, `graphql gateway`, `api gateway`, `masterdata api`, `personaldata api`, `portal api`, `communication`, `services status`:\n\n```SHELL\nsh ./deploy-all.sh --skip-clean --skip-infrastructure\n```\n\n**Step 5.** Checking the status of the components:\n\n```SHELL\nkubectl get pods --namespace=local\nkubectl get services --namespace=local\n```\n\nAfter all the pods are running, you can access the services via the following URLs:\n\n- GraphQL Gateway: [http://localhost:31100/graphql](http://localhost:31100/graphql)\n- Identity Server: [http://localhost:31101](http://localhost:31101)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcowienduckie%2Fpromag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcowienduckie%2Fpromag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcowienduckie%2Fpromag/lists"}