20260626-services architecture.plantuml
@startuml
title Wikimedia LEADS - services architecture

top to bottom direction
skinparam ranksep 40

rectangle "Wikimedia services\necosystem" {

  rectangle "Wikimedia Movement\n//Body of Knowledge//\n(BoK)" as LEADS {
    artifact "credential definition" as CreDef {
    }
    artifact "practice" 
    artifact "competence"
    practice --> competence : requires
    competence --> practice : enables
    [Wikibase] #LightSlateGrey
    [BoK Explorer] #DDDDDD
  note left of practice
    practices describe
    Wikimedian ways 
    of working
  end note
  }
  note top of LEADS: information stored as\nlinked open data

  competence --> CreDef : requires
  CreDef --> competence : enables
  rectangle "Learn.wiki" as Lwiki {
    [Open edX] as OpenEdX #LightSlateGrey
    [Open edX\ncredentials\nextension] as EdxExt #DDDDDD
    artifact "course" as course
    artifact "learning\nevidence" as Evidence
    EdxExt .. course : uses
    EdxExt .. Evidence : uses
    course --> Evidence : produces
    course --> EdxExt : completion data
    note bottom of course
  Each course targets exactly
  one credential: either one
  microcredential definition 
  or one learning path
  definition.
  end note
  }
  course "1" o-- "0..*" practice : includes


  course ..> CreDef : target

  rectangle "Wikimedian backpack" as Backpack {
    artifact "verifiable\ncredential" as VC
    [SOLID pod] #DDDDDD
    [backpack UI] #DDDDDD
    note bottom of VC
  A verifiable credential 
  certifies one credential:
  - one microcredential, or
  - one learning path
  end note
 
  }

  note bottom of Backpack: User-controlled\nstorage 


  EdxExt --> VC : issues

  rectangle "Capacity Exchange service" as CapX  {
    [matching\napplication] as Matcher #DDDDDD
    [CapX integration] as CapXExt #DDDDDD
    [Capacity Exchange app] #LightSlateGrey
    Matcher -- CapXExt
  }

  CapXExt ..> VC : reads 

  rectangle "Wikimedia projects" as Wprojects {
    collections "sister projects" as SisterProjects
    rectangle "Wikiversity" {
     artifact "course\ncontent" as Content
    }
    [MediaWiki] #LightSlateGrey
  }
  rectangle "Outreach\nDashboard\nservice" as ORDB {
    artifact "tracking\nrecord" as Tracking
    [Outreach Dashboard app] #LightSlateGrey
  }

  CreDef --> Content : specify curriculum
  course --> Content : uses

  Evidence --> Tracking : links to
  Wprojects <-- Tracking :  learner\nreal contributions

  VC ..> CreDef : certified target
  VC --> Evidence : links to
  VC --> Tracking : links to

legend right
    |Color| Type |
    |<#LightSlateGrey>| existing application|
    |<#DDDDDD>| applications to be developed |
endlegend
}

@enduml