{"id":19473309,"url":"https://github.com/tillkuhn/angkor","last_synced_at":"2025-04-25T12:31:37.489Z","repository":{"id":38440769,"uuid":"219713329","full_name":"tillkuhn/angkor","owner":"tillkuhn","description":"🌅(Mostly) educational app to manage favorite locations and recipes. Techstack Frontend: Angular 16 (TypeScript, Mapbox GL), Backend: Spring Boot 3.2 (JDK 21, Kotlin, PostgreSQL, Kafka, Cognito), Go Microservices, Docker, Terraform managed AWS Infrastructure ","archived":false,"fork":false,"pushed_at":"2025-04-24T21:32:44.000Z","size":16302,"stargazers_count":16,"open_issues_count":15,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-24T21:33:52.099Z","etag":null,"topics":["angular","antora","aws","cognito","docker-compose","golang","kafka","kotlin","letsencrypt","mapbox-gl","postgresql","restful","spring-boot","terraform","typescript"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/tillkuhn.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2019-11-05T10:03:24.000Z","updated_at":"2025-04-24T21:25:13.000Z","dependencies_parsed_at":"2023-10-17T02:05:33.364Z","dependency_job_id":"c6dc1fea-7278-4334-952a-d4c11ccb389d","html_url":"https://github.com/tillkuhn/angkor","commit_stats":{"total_commits":1891,"total_committers":5,"mean_commits":378.2,"dds":"0.17768376520359597","last_synced_commit":"7507a18c67c5b77a1b85ee18bbbc9aff7ebb0876"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillkuhn%2Fangkor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillkuhn%2Fangkor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillkuhn%2Fangkor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tillkuhn%2Fangkor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tillkuhn","download_url":"https://codeload.github.com/tillkuhn/angkor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250817684,"owners_count":21492199,"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":["angular","antora","aws","cognito","docker-compose","golang","kafka","kotlin","letsencrypt","mapbox-gl","postgresql","restful","spring-boot","terraform","typescript"],"created_at":"2024-11-10T19:18:03.505Z","updated_at":"2025-04-25T12:31:32.468Z","avatar_url":"https://github.com/tillkuhn.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"image:https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge\u0026logo=angular\u0026logoColor=white[Angular]\nimage:https://img.shields.io/badge/kotlin-%230095D5.svg?style=for-the-badge\u0026logo=kotlin\u0026logoColor=white[Kotlin]\nimage:https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge\u0026logo=spring\u0026logoColor=white[Spring]\nimage:https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge\u0026logo=go\u0026logoColor=white[Go]\nimage:https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge\u0026logo=terraform\u0026logoColor=white[Terraform]\nimage:https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge\u0026logo=amazon-aws\u0026logoColor=white[AWS]\nimage:https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white[Postgres]\nimage:https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white[Docker]\n\nimage:https://img.shields.io/github/v/tag/tillkuhn/angkor?color=blue[Releases,link=https://github.com/tillkuhn/angkor/releases]\nimage:https://img.shields.io/github/languages/count/tillkuhn/angkor[GitHub language count]\nimage:https://img.shields.io/github/license/tillkuhn/angkor?color=blue[License,link=https://github.com/tillkuhn/angkor/blob/master/LICENSE]\nimage:https://sonarcloud.io/api/project_badges/measure?project=angkor-api\u0026metric=alert_status[Quality Gate Status,link=https://sonarcloud.io/dashboard?id=angkor-api]\nimage:https://github.com/tillkuhn/angkor/workflows/kotlin-ci/badge.svg[kotlin-ci]\nimage:https://github.com/tillkuhn/angkor/workflows/angular-ci/badge.svg[angular-ci]\nimage:https://goreportcard.com/badge/github.com/tillkuhn/angkor[Go Report Card,link=https://goreportcard.com/report/github.com/tillkuhn/angkor]\n\nimage:https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftillkuhn%2Fangkor%2Fmain%2Fangular%2Fpackage.json\u0026query=%24.dependencies%5B'%40angular%2Fcore'%5D\u0026label=angular\u0026color=%23c3002f[Dynamic JSON Badge]\n\n// Todo fix broken kotlin / spring boot labels after adoc migration\n// image:https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftillkuhn%2Fangkor%2Fmain%2Fkotlin%2Fgradle%2Flibs.versions.toml\u0026query=%24.versions%5B'kotlin'%5D\u0026label=kotlin\u0026color=%23B125EA[Dynamic TOML Badge]\n// image:https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftillkuhn%2Fangkor%2Fmain%2Fkotlin%2Fgradle%2Flibs.versions.toml\u0026query=%24.versions%5B'spring-boot'%5D\u0026label=spring-boot\u0026color=#6DB33F[Dynamic TOML Badge]\n\n== Project \"Angkor\" - Angular Golang Kotlin RESTful Webapp Stack\n\nimage::docs/modules/ROOT/images/img_4075_angkor_sunrise_pano.jpg[]\n\nThis (almost) purely educational app manages places I'd like to visit some day, and helps me to keep track of more or less exotic dishe recipes.\n\nKey technologies: https://angular.io/[Angular] based single-page app with https://docs.mapbox.com/mapbox-gl-js/api/[Mapbox GL], https://aws.amazon.com/cognito/[AWS Cognito] for OAuth2, https://www.postgresql.org/[PostgreSQL] DB and https://aws.amazon.com/s3/[S3] for persistence and a https://spring.io/projects/spring-boot[Spring Boot] backend written in https://kotlinlang.org/[Kotlin], various spin-off tools written in https://golang.org/[Golang], all provisioned to AWS Infrastructure with https://www.terraform.io/[Terraform] and lots of Confidence.\n\n== tl;dr\n\n[source,shell]\n----\n$ make angkor\n🌇 Successfully Built Angkor\n----\n\n== Modules\n\nAngkor is a *monorepo* that combines the following modules and technologies:\n\n|===\n| Path   | Descriptions                         | Technologies / Tools / Language(s)                                                    | Build Status\n\n| `/terraform` | Cloud Infrastructure as Code\n|image:https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge\u0026logo=terraform\u0026logoColor=white[Terraform]\n image:https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge\u0026logo=amazon-aws\u0026logoColor=white[AWS]\n image:https://img.shields.io/badge/Linux-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black[Linux]\n| image:https://github.com/tillkuhn/angkor/workflows/terraform-ci/badge.svg[ terraform-ci]\n\n| `/kotlin`   | Server Backend\n|image:https://img.shields.io/badge/kotlin-%230095D5.svg?style=for-the-badge\u0026logo=kotlin\u0026logoColor=white[Kotlin]\n image:https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge\u0026logo=spring\u0026logoColor=white[Spring]\n image:https://img.shields.io/badge/Gradle-02303A.svg?style=for-the-badge\u0026logo=Gradle\u0026logoColor=white[Gradle]\n image:https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white[Postgres]\n image:https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white[Docker]\n|image:https://github.com/tillkuhn/angkor/workflows/kotlin-ci/badge.svg[ kotlin-ci]\n\n| `/angular`    | Frontend and reverse proxy\n|image:https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge\u0026logo=angular\u0026logoColor=white[Angular]\n image:https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white[TypeScript]\n image:https://img.shields.io/badge/yarn-%232C8EBB.svg?style=for-the-badge\u0026logo=yarn\u0026logoColor=white[Yarn]\n image:https://img.shields.io/badge/nginx-%23009639.svg?style=for-the-badge\u0026logo=nginx\u0026logoColor=white[Nginx]\n image:https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white[Docker]\n|image:https://github.com/tillkuhn/angkor/workflows/angular-ci/badge.svg[ angular-ci]\n\n| `/go` | Supporting services written in Go\n|image:https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge\u0026logo=go\u0026logoColor=white[Go]\n image:https://img.shields.io/badge/JWT-black?style=for-the-badge\u0026logo=JSON%20web%20tokens[JWT]\n image:https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white[Docker]\n|image:ttps://github.com/tillkuhn/angkor/workflows/golang-ci/badge.svg[ golang-ci]\n\n| `/docs`  | Project Documentation\n| https://antora.org/[Antora], https://asciidoc-py.github.io/[AsciiDoc]\n| https://github.com/tillkuhn/angkor/workflows/antora-ci/badge.svg)[ antora-ci]\n|===\n\n== Components \u0026 Infrastructure\n\nYou should have [AWS CLI](http://docs.aws.amazon.com/cli/latest/userguide/installing.html) and most importantly [Terraform](https://www.terraform.io/intro/getting-started/install.html) installed.\nIn a nutshell the application's neighborhood looks as follows:\n\nimage:https://timafe.files.wordpress.com/2021/05/anchorarch5.png[]\n\n== Impressions\n\n=== Places to Go (Details)\n\nimage:docs/modules/ROOT/images/preview_places.jpg[]\n\n=== WorldWideMap (Overview)\n\nimage:docs/modules/ROOT/images/preview_map.jpg[]\n\n=== Wish a Dish (Search)\n\nimage:docs/modules/ROOT/images/preview_dishes.jpg[]\n\n=== Angkor wasn't built in a day ...\n\nThis project uses the good old [GNU Make](https://www.gnu.org/software/make/) utility to manage all tasks for terraform, gradle, yarn and whatever else we have in our ecosystem. Run `make` without args to see what's possible, open the [Makefile](./Makefile) to look beyond!\n\n[source,shell]\n----\n$ make\n\n  █████╗ ███╗   ██╗ ██████╗ ██╗  ██╗ ██████╗ ██████╗\n ██╔══██╗████╗  ██║██╔════╝ ██║ ██╔╝██╔═══██╗██╔══██╗\n ███████║██╔██╗ ██║██║  ███╗█████╔╝ ██║   ██║██████╔╝\n ██╔══██║██║╚██╗██║██║   ██║██╔═██╗ ██║   ██║██╔══██╗\n ██║  ██║██║ ╚████║╚██████╔╝██║  ██╗╚██████╔╝██║  ██║\n ╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═╝\n\nAvailable Commands:\n  api-clean            Cleans up ./kotlin/build folder\n  api-build            Assembles backend jar in ./api/build with gradle (alias: assemble)\n  api-test             Runs spring boot unit and integration tests in ./kotlin\n  api-run              Runs springBoot API in ./kotlin using gradle bootRun (alias: bootrun)\n  api-mock             Runs OIDC (and potentially other) mock service for api\n\n  ui-build             Run ng build  in ./ui\n  ui-build-prod        Run ng build --prod in ./ui\n  ui-test              Runs chromeHeadless tests in ./angular\n  ui-run               Run angular with ng serve and opens WebUI in browser (alias: serve,open,angular)\n  ui-mocks             Run json-server on foreground to mock API services for UI (alias: mock)\n\n  tf-init              Runs terraform init on working directory ./terraform, switch to\n  tf-plan              Runs terraform plan with implicit init and fmt (alias: plan)\n  tf-apply             Runs terraform apply with auto-approval (alias: apply)\n\n\n  docs-clean           Cleanup docs build directory\n  docs-build           Generate documentation site using antora-playbook.yml\n  docs-push            Generate documentation site and push to s3\n  docs-deploy          Deploys docs with subsequent pull and restart of server on EC2 (alias: docs)\n\n\n  all-clean            Clean up build artifact directories in backend and frontend (alias: clean)\n  all-build            Builds frontend and backend (alias: build)\n  all-test             Builds frontend and backend (alias: build)\n  all-deploy           builds and deploys frontend and backend images (alias deploy)\n\n  angular-clean        Remove angular dist folder ./angular/dist\n  angkor               The ultimate target - builds and deploys everything 🦄\n\n  release              create final release tag with semtag\n\n  git-clean            git cleanup, e.g. delete up stale git branches\n----\n\n== I want more Documentation\n\nSeriously? Check our Dedicated *https://dev.timafe.net/angkor-docs/angkor-docs/[angkor-docs]*  project built with https://antora.org/[Antora]\n\n== Star History\n\nimage::https://api.star-history.com/svg?repos=tillkuhn/angkor\u0026type=Date[Star History Chart,link=https://star-history.com/#tillkuhn/angkor\u0026Date]\n\n== Contribute\n\nSee xref:./CONTRIBUTING.md[CONTRIBUTING.md]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftillkuhn%2Fangkor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftillkuhn%2Fangkor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftillkuhn%2Fangkor/lists"}