@startuml container
!include https://raw.githubusercontent.com/adrianvlupu/C4-PlantUML/latest/C4_Container.puml

LAYOUT_WITH_LEGEND()

Person(software_developer, "Software Developer", "Any developers that want to publish a cross platform frontend application.")
System_Boundary(beagle, "Beagle"){
  
  Container(beagle_backend, "Beagle Backend", "Kotlin", "It allows screen creation following Beagle's contract.")

  System_Boundary(beagle_frontend, "Beagle Frontend") {
      
    Container(beagle_web_core, "Beagle Web", "Typescript", "Handles the rendering of Web Applications.")
      Container(beagle_android, "Beagle Android", "Kotlin", "Handles the rendering of Android Applications.")
      Container(beagle_ios, "Beagle iOS", "swift", "Handles the rendering of iOS Applications.")
  }
}
System_Ext(frontend_app, "App / Website", "A software that renders Beagle screens.")
System_Ext(infra, "Infrastructure", "The whole infra of the entity that implements beagle.")
Person(sre, "SRE / Devops", "Responsible for configuring and maintaining the environments")

Rel(software_developer, beagle_backend, "Defines using")
Rel(frontend_app, beagle_frontend, "Renders using / Has installed")
Rel(beagle_frontend, beagle_backend, "Requests Beagle UI screens","REST or gRPC")
Rel(infra, beagle_backend, "Hosts")
Rel(sre, infra, "Configures")
Rel(software_developer, frontend_app, "Configures Beagle at")

@enduml
