{"id":23758727,"url":"https://github.com/anton-augustsson/customer-portal","last_synced_at":"2026-04-11T06:04:22.657Z","repository":{"id":223102192,"uuid":"759323915","full_name":"Anton-Augustsson/customer-portal","owner":"Anton-Augustsson","description":"An example application of a scalable customer portal developed in Golang using gin for the backend and Angular for the frontend.","archived":false,"fork":false,"pushed_at":"2024-05-16T19:28:05.000Z","size":322,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-16T20:39:18.231Z","etag":null,"topics":["docker","docker-com","gin","go","golang","nginx","openapi","openapi-generator"],"latest_commit_sha":null,"homepage":"","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/Anton-Augustsson.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":"2024-02-18T09:15:56.000Z","updated_at":"2024-06-01T13:16:44.408Z","dependencies_parsed_at":"2024-05-16T20:56:35.286Z","dependency_job_id":null,"html_url":"https://github.com/Anton-Augustsson/customer-portal","commit_stats":null,"previous_names":["anton-augustsson/customer-portal"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anton-Augustsson%2Fcustomer-portal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anton-Augustsson%2Fcustomer-portal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anton-Augustsson%2Fcustomer-portal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anton-Augustsson%2Fcustomer-portal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Anton-Augustsson","download_url":"https://codeload.github.com/Anton-Augustsson/customer-portal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239928089,"owners_count":19719881,"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":["docker","docker-com","gin","go","golang","nginx","openapi","openapi-generator"],"created_at":"2024-12-31T19:55:33.009Z","updated_at":"2025-12-30T22:58:15.302Z","avatar_url":"https://github.com/Anton-Augustsson.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Customer portal\nAn example application of a scalable customer portal developed in Golang using gin for the backend and Angular for the frontend.\n\n## Quick start\n### Requirements\n- Docker \n- Protobuf and gRPC\n- Kind\n- Kubectl\n- Helm\n\n\n### Generate Client and server stub\n```bash\ngit clone git@github.com:googleapis/googleapis.git ../googleapis\ncd backend\n./update-grpc.sh ../../googleapis\n```\n\n### Build images\nAll microservices needs currently needs to be build manually.\nAn example is shown how it works for subscription-service.\n```bash\ncd backend/subscription-service\ndocker build . --tag subscription-service\nkind load docker-image subscription-service:latest\n```\n\n### Deploy\nSetup kind\n```bash\nkind create cluster --config kind-config.yaml\n```\n\n```bash\nkind load docker-image facade-service:latest\nkind load docker-image robot-remote-controller-service:latest\nkind load docker-image subscription-service:latest\nkind load docker-image web:latest\n```\n\n```bash\nhelm install customer-portal-test customer-portal\n```\n\nCurrently, when deploying with kind the port is not exposed to the \nhost, so you need to run an exposure command manually.\nYou need to first find the name of the pod you want to expose.\n```bash\nkubectl get pods\n```\nThen you can use the pod to expose the port. Note that this is not required \nif you have created the kind cluster with the `kind-config.yaml` file.\n```bash\nkubectl port-forward robot-remote-controller-deployment-7b775fd47c-n9x59 8182:50051\n```\nNote: exchange `robot-remote-controller-deployment-7b775fd47c-n9x59` with \nyour pod.\n\n\n### Remove\n```bash\nhelm uninstall customer-portal-test\n```\n\nCAUTION: only run this command if you are not have any other cluster.\n```bash\nkind delete cluster\n```\n\n\n\n## The example\nThe functionality that the system provides is viewing a camera on a remote device, e.g. a \nraspberry pi. Each customer has a subscriber account and they have a subscription to \neach of the cameras they want to view, i.e. one subscription for one camera.\nBoth using the remote camera viewer and managing subscriptions is accessible through \nthe customer portal.\n\n\n## Domain concepts (resources)\n- Subscriber \n- Subscription\n- Camera\n\n\n## Resources\n\n### Security\n\n#### Between Microservices\n- [Isto get started](https://istio.io/latest/docs/setup/getting-started/)\n- [Isto](https://istio.io/latest/docs/examples/microservices-istio/istio-ingress-gateway/)\n\n#### Client-server\n- [keycloak getting started](https://www.keycloak.org/getting-started/getting-started-kube)\n- [keycloak](https://www.keycloak.org/)\n- [keycloak angular](https://pretius.com/blog/keycloak-angular-integration/)\n\n\n### gRPC\n- [Introduction to gRPC](https://grpc.io/docs/what-is-grpc/introduction/)\n- [Quick start](https://grpc.io/docs/languages/go/quickstart/)\n\n\n### API design\n- [Better API Design with OpenAPI (Cloud Next '18)](https://www.youtube.com/watch?v=uBs6dfUgxcI)\n- [RESTful web API design](https://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design)\n- [Google Cloud API design](https://cloud.google.com/apis/design)\n\n\n### GO\n- [Effective Go](https://go.dev/doc/effective_go#interfaces_and_types)\n\n\n### NGINX\n- [NGINX: Full Example Configuration](https://www.nginx.com/resources/wiki/start/topics/examples/full/)\n- [NGINX Tutorial for Beginners](https://www.youtube.com/watch?v=9t9Mp0BGnyI)\n- [CREATE AN ANGULAR APP AND DEPLOY USING IN NGINX AND DOCKER.](https://www.arunyadav.in/codehacks/blogs/post/19/create-an-angular-app-and-deploy-using-in-nginx-and-docker)\n\n\n### Angular\n- [Angular Basics: How To Use HttpClient in Angular](https://www.telerik.com/blogs/angular-basics-how-to-use-httpclient) \n- [ng-openapi-gen: An OpenAPI 3 code generator for Angular](https://www.npmjs.com/package/ng-openapi-gen)\n- [HttpClient Angular](https://angular.io/guide/http-send-data-to-server)\n- [HttpClient Angular](https://angular.io/guide/http-send-data-to-server)\n\n\n### Live streaming service\n- [How Does Live Streaming Platform Work? (YouTube live, Twitch, TikTok Live)](https://www.youtube.com/watch?v=7AMRfNKwuYo)\n- [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)\n- [libav RTMP streaming](https://github.com/juniorxsound/libav-RTMP-Streaming)\n- [Go Video Transcoder - Govitra](https://github.com/bqqbarbhg/go-video-transcoder)\n- [transcoder](https://pkg.go.dev/cloud.google.com/go/video/transcoder/apiv1beta1)\n- [goDASH — GO Accelerated HAS Framework for Rapid Prototyping](https://ieeexplore.ieee.org/abstract/document/9123103)\n- [go-segment](https://github.com/cwinging/go-segment)\n- [go-ts-segmenter](https://github.com/jordicenzano/go-ts-segmenter)\n- [livego](https://github.com/qieangel2013/livego)\n- [goDash Application](https://github.com/uccmisl/godash)\n- [Angular video transformations](https://cloudinary.com/documentation/angular_video_transformations)\n- [Set up a LiveSwitch Angular Project](https://developer.liveswitch.io/liveswitch-server/get-started/js/set-up-a-liveswitch-angular-project.html)\n\n\n### Further reading\n\n### OpenAPI\n- [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator)\n- [Documentation for the spring Generator](https://openapi-generator.tech/docs/generators/spring/)\n- [Open API Server Implementation Using OpenAPI Generator](https://www.baeldung.com/java-openapi-generator-server)\n- [Spring Documentation Overview](https://docs.spring.io/spring-boot/docs/current/reference/html/documentation.html#documentation)\n- [OpenAPI data types](https://swagger.io/docs/specification/data-models/data-types/)\n- [OpenAPI Guide](https://swagger.io/docs/specification/about/)\n- [OpenAPI 3.0 Tutorial](https://support.smartbear.com/swaggerhub/docs/en/get-started/openapi-3-0-tutorial.html)\n- [OpenAPI Specification v3.1.0](https://spec.openapis.org/oas/v3.1.0)\n- Swagger Viewer for VSCode: Allows you to view the OpenAPI specification in a more intuitive way. It also provides linting.\n\n\n### Spring boot\nAn alternative to Golang for microservices is JAVA using the spring boot framework.\nHowever, it is slower and have become unessesaraly more complex over the year,\nand arguably Golang is more suited for microservices.\n\n- [Spring Boot Tutorial | Full Course [2023] [NEW]](https://www.youtube.com/watch?v=9SGDpanrc8U)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanton-augustsson%2Fcustomer-portal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanton-augustsson%2Fcustomer-portal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanton-augustsson%2Fcustomer-portal/lists"}