Skip to content

πŸŒ…(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

License

tillkuhn/angkor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Angular Kotlin Spring Go Terraform AWS Postgres Docker

Releases GitHub language count License Quality Gate Status kotlin-ci angular-ci Go Report Card

Dynamic JSON Badge Dynamic TOML Badge Dynamic TOML Badge

Project "Angkor" - Angular Golang Kotlin RESTful Webapp Stack

This (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.

Key technologies: Angular based single-page app with Mapbox GL, AWS Cognito for OAuth2, PostgreSQL DB and S3 for persistence and a Spring Boot backend written in Kotlin, various spin-off tools written in Golang, all provisioned to AWS Infrastructure with Terraform and lots of Confidence.

tl;dr

$ make angkor
πŸŒ‡ Successfully Built Angkor 

Modules

Angkor is a monorepo which combines the following modules and technologies:

Path Descriptions Technologies / Tools / Language(s) Build Status
/terraform Cloud Infrastructure as Code Terraform AWS Linux  terraform-ci
/kotlin Server Backend Kotlin Spring, Gradle Postgres Docker  kotlin-ci
/angular Frontend and reverse proxy Angular TypeScript Yarn Nginx Docker  angular-ci
/go Supporting services written in Go Go JWT Docker  golang-ci
/docs Project Documentation Antora, AsciiDoc  antora-ci

Components & Infrastructure

You should have AWS CLI and most importantly Terraform installed. In a nutshell the application's neighborhood looks as follows:

Impressions

Places to Go (Details)

WorldWideMap (Overview)

Wish a Dish (Search)

Angkor wasn't built in a day ...

This project uses the good old GNU 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 to look beyond!

$ make

  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
 β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β• β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—
 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•
 β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—
 β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘
 β•šβ•β•  β•šβ•β•β•šβ•β•  β•šβ•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•

Available Commands:
  api-clean            Cleans up ./kotlin/build folder
  api-build            Assembles backend jar in ./api/build with gradle (alias: assemble)
  api-test             Runs spring boot unit and integration tests in ./kotlin
  api-run              Runs springBoot API in ./kotlin using gradle bootRun (alias: bootrun)
  api-mock             Runs OIDC (and potentially other) mock service for api

  ui-build             Run ng build  in ./ui
  ui-build-prod        Run ng build --prod in ./ui
  ui-test              Runs chromeHeadless tests in ./angular
  ui-run               Run angular with ng serve and opens WebUI in browser (alias: serve,open,angular)
  ui-mocks             Run json-server on foreground to mock API services for UI (alias: mock)

  tf-init              Runs terraform init on working directory ./terraform, switch to
  tf-plan              Runs terraform plan with implicit init and fmt (alias: plan)
  tf-apply             Runs terraform apply with auto-approval (alias: apply)


  docs-clean           Cleanup docs build directory
  docs-build           Generate documentation site using antora-playbook.yml
  docs-push            Generate documentation site and push to s3
  docs-deploy          Deploys docs with subsequent pull and restart of server on EC2 (alias: docs)


  all-clean            Clean up build artifact directories in backend and frontend (alias: clean)
  all-build            Builds frontend and backend (alias: build)
  all-test             Builds frontend and backend (alias: build)
  all-deploy           builds and deploys frontend and backend images (alias deploy)

  angular-clean        Remove angular dist folder ./angular/dist
  angkor               The ultimate target - builds and deploys everything πŸ¦„

  release              create final release tag with semtag

  git-clean            git cleanup, e.g. delete up stale git branches

I want more Documentation

Seriously? Check our Dedicated angkor-docs project built with Antora

Contribute

See CONTRIBUTING.md

About

πŸŒ…(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

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks