@startuml
skinparam componentStyle rectangle
 
package HomePC {
  component ObsidianDesktop
  database "Pc File System" as PcFileSystem
  component FolderSyncDesktop
  
  ObsidianDesktop --> PcFileSystem : edit
  PcFileSystem <-- FolderSyncDesktop : monitor
  
}
 
package Mobile {
  component ObsidianMobile
  database "Mobile File System" as MobileFileSystem
  component FolderSyncMobile
  component NtfyApp
  
  ObsidianMobile --> MobileFileSystem : edit
  MobileFileSystem <-- FolderSyncMobile : monitor
}
 
package Server {
  database Nextcloud
  database "Quartz Content Folder" as Content
  database "Quartz Publish Folder" as Publish
 
  package "systemd service" as ChangeDetector {
    component entr
    component Quartz
    
    entr --> Quartz : call
    Quartz --> Publish : publish site files
  }
 
  component NextcloudDesktop
  
  package Docker {
    component GatewayNginx
    component QuartzNginx
  }
  
  Publish <-- QuartzNginx : serve
}
 
package Internet {
  component NtfyService
}
 
package OutsideWorld {
  component WebBrowser
}
 
entr --> NtfyService : call
 
FolderSyncDesktop --> Nextcloud : sync
FolderSyncMobile --> Nextcloud : sync
NextcloudDesktop --> Nextcloud : monitor
Content <-- NextcloudDesktop : sync
Content --> entr : change detected
 
WebBrowser --> GatewayNginx
GatewayNginx --> QuartzNginx : proxy
 
NtfyService --> NtfyApp : push notify
@enduml