workspace "Bluesky" "Bluesky architecture" { model { properties { "structurizr.groupSeparator" "/" } socialUser = person "Social Media User" "A regular social media user" typical socialAdmin = person "Social Media Administrator" "The admin of a social media site" adminey socialModerator = person "Social Media Moderator" "The moderator of a social media site" moderation genericSocial = softwareSystem "A generic social media site" "A generic Social media site" typical { group genericSocialTypical { genericSocialApp = container "Social App" "Application to access the social media site" "" typical genericSocialDB = container "Social database" "Database of social media service" "" "database,typical" genericSocialAPI = container "Social API" "API for accessing database" "" typical } genericSocialAppToGenericSocialDB = genericSocialApp -> genericSocialAPI "Interacts" genericSocialAPIToGenericSocialDB = genericSocialAPI -> genericSocialDB "Read and write" socialUserToGenericSocialApp = socialUser -> genericSocialApp "Uses" } socialUserToGenericSocial = socialUser -> genericSocial "Enjoys" socialAdminToGenericSocial = socialAdmin -> genericSocial "Manages" socialModeratorToGenericSocial = socialModerator -> genericSocial "Builds trust" realisticSocial = softwareSystem "A more realistic social media site" "A more realistic social media site" typical { group realisticSocialTypical { realisticSocialApp = container "Social App" "Application to access the social media site" "" typical realisticSocialAPI = container "Social API" "API for accessing database" "" typical realisticSocialPostsDB = container "Posts database" "Posts, replies, likes, re-posts, follows, media, etc." "" "database,typical" } group realisticSocialModeration { realisticSocialModeratingApp = container "Moderating App" "Application to label posts or users for moderation" "" moderation realisticSocialModerationAPI = container "Social Moderation API" "API for accessing database" "" moderation } group realisticSocialFeeds { realisticSocialFeeds = container "Feed algorithms" "What posts to present, in what order" "" algorithmic realisticSocialFeedDesigner = container "Feed algorithm designer" "Tooling for designing algorithms" "" algorithmic realisticSocialProfileDB = container "User and use profile database" "Public user profiles, network graphs, viewing histories, like histories, demographics, etc." "" "database,algorithmic" } realisticSocialAPI -> realisticSocialFeeds "Reads" realisticSocialFeedDesigner -> realisticSocialFeeds "Writes" realisticSocialAPI -> realisticSocialPostsDB "Writes" realisticSocialAPI -> realisticSocialProfileDB "Writes" realisticSocialApp -> realisticSocialAPI "Reads and writes" realisticSocialFeeds -> realisticSocialPostsDB "Consumes" realisticSocialFeeds -> realisticSocialProfileDB "Consumes" realisticSocialModerationAPI -> realisticSocialPostsDB "Writes" realisticSocialModeratingApp -> realisticSocialModerationAPI "Interacts" socialUserToRealisticSocialApp = socialUser -> realisticSocialApp "Uses" socialModeratorToRealisticSocialModeratingApp = socialModerator -> realisticSocialModeratingApp "Labels" socialAdminToRealisticSocialFeedDesigner = socialAdmin -> realisticSocialFeedDesigner "Design feeds" } socialUserToRealisticSocial = socialUser -> realisticSocial "Enjoys" socialAdminToRealisticSocial = socialAdmin -> realisticSocial "Manages" socialModeratorToRealisticSocial = socialModerator -> realisticSocial "Builds trust" federatedSocial1User = person "User of a federated service" "User of a federated service" typical federatedSocial1Admin = person "Administrator of a federated service" "Administrator of a federated service" adminey federatedSocial2User = person "User of another federated service" "User of a federated service" typical federatedSocial2Admin = person "Administrator of another federated service" "Administrator of a federated service" adminey federatedSocial3User = person "User of a third federated service" "User of a federated service" typical federatedSocial3Admin = person "Administrator of a third federated service" "Administrator of a federated service" adminey federatedSocial4User = person "User of a fourth federated service" "User of a federated service" typical federatedSocial4Admin = person "Administrator of a fourth federated service" "Administrator of a federated service" adminey federatedSocial1 = softwareSystem "A federated social media site" "A federated social media site" federation { group federatedSocial1Typical { federatedSocial1App = container "Social App" "Application to access the social media site" "" typical federatedSocial1API = container "Social API" "API for accessing database" "" typical federatedSocial1PostsDB = container "Posts database" "Posts, replies, likes, re-posts, follows, media, etc." "" "database,typical" } group federatedSocial1Moderation { federatedSocial1ModeratingApp = container "Moderating App" "Application to label posts or users for moderation" "" moderation federatedSocial1ModerationAPI = container "Social Moderation API" "API for accessing database" "" moderation } group federatedSocial1Federation { federatedSocial1Federation = container "Federation" "Shares posts with other federated services" "" federation federatedSocial1FederationAPI = container "Federation API" "Takes posts from other federated services" "" federation federatedSocial1FederatedPostsDB = container "Federated Posts database" "Posts and related metadata from other" "" "database,federation" } federatedSocial1Federation -> federatedSocial1PostsDB "Reads" federatedSocial1FederationAPI -> federatedSocial1FederatedPostsDB "Writes" federatedSocial1API -> federatedSocial1PostsDB "Reads and writes" federatedSocial1API -> federatedSocial1FederatedPostsDB "Reads" federatedSocial1App -> federatedSocial1API "Reads and writes" federatedSocial1ModerationAPI -> federatedSocial1PostsDB "Writes" federatedSocial1ModerationAPI -> federatedSocial1FederatedPostsDB "Writes" federatedSocial1ModeratingApp -> federatedSocial1ModerationAPI "Interacts" federatedSocial1UserToFederatedSocial1App = federatedSocial1User -> federatedSocial1App "Uses" federatedSocial1AdminToFederatedSocial1ModeratingApp = federatedSocial1Admin -> federatedSocial1ModeratingApp "Labels" } federatedSocial1UserToFederatedSocial1 = federatedSocial1User -> federatedSocial1 "Enjoys" federatedSocial1AdminToFederatedSocial1Admin = federatedSocial1Admin -> federatedSocial1 "Manages" federatedSocial1AdminToFederatedSocial1Moderates = federatedSocial1Admin -> federatedSocial1 "Builds trust" federatedSocial2 = softwareSystem "Another federated social media site" "A federated social media site" federation { group federatedSocial2Typical { federatedSocial2App = container "Social App" "Application to access the social media site" "" typical federatedSocial2API = container "Social API" "API for accessing database" "" typical federatedSocial2PostsDB = container "Posts database" "Posts, replies, likes, re-posts, follows, media, etc." "" "database,typical" } group federatedSocial2Moderation { federatedSocial2ModeratingApp = container "Moderating App" "Application to label posts or users for moderation" "" moderation federatedSocial2ModerationAPI = container "Social Moderation API" "API for accessing database" "" moderation } group federatedSocial2Federation { federatedSocial2Federation = container "Federation" "Shares posts with other federated services" "" federation federatedSocial2FederationAPI = container "Federation API" "Takes posts from other federated services" "" federation federatedSocial2FederatedPostsDB = container "Federated Posts database" "Posts and related metadata from other" "" "database,federation" } federatedSocial2Federation -> federatedSocial2PostsDB "Reads" federatedSocial2FederationAPI -> federatedSocial2PostsDB "Writes" federatedSocial2API -> federatedSocial2PostsDB "Reads and writes" federatedSocial2API -> federatedSocial2FederatedPostsDB "Reads" federatedSocial2App -> federatedSocial2API "Reads and writes" federatedSocial2ModerationAPI -> federatedSocial2PostsDB "Writes" federatedSocial2ModerationAPI -> federatedSocial2FederatedPostsDB "Writes" federatedSocial2ModeratingApp -> federatedSocial2ModerationAPI "Interacts" socialUserToFederatedSocial2App = socialUser -> federatedSocial2App "Uses" socialAdminToFederatedSocial2ModeratingApp = socialAdmin -> federatedSocial2ModeratingApp "Labels" } federatedSocial2UserToFederatedSocial2 = federatedSocial2User -> federatedSocial2 "Enjoys" federatedSocial2AdminToFederatedSocial2Admin = federatedSocial2Admin -> federatedSocial2 "Manages" federatedSocial2AdminToFederatedSocial2Moderates = federatedSocial2Admin -> federatedSocial2 "Builds trust" federatedSocial3 = softwareSystem "A third federated social media site" "A federated social media site" federation { group federatedSocial3Typical { federatedSocial3App = container "Social App" "Application to access the social media site" "" typical federatedSocial3API = container "Social API" "API for accessing database" "" typical federatedSocial3PostsDB = container "Posts database" "Posts, replies, likes, re-posts, follows, media, etc." "" "database,typical" } group federatedSocial3Moderation { federatedSocial3ModeratingApp = container "Moderating App" "Application to label posts or users for moderation" "" moderation federatedSocial3ModerationAPI = container "Social Moderation API" "API for accessing database" "" moderation } group federatedSocial3Federation { federatedSocial3Federation = container "Federation" "Shares posts with other federated services" "" federation federatedSocial3FederationAPI = container "Federation API" "Takes posts from other federated services" "" federation federatedSocial3FederatedPostsDB = container "Federated Posts database" "Posts and related metadata from other" "" "database,federation" } federatedSocial3Federation -> federatedSocial3PostsDB "Reads" federatedSocial3FederationAPI -> federatedSocial3PostsDB "Writes" federatedSocial3API -> federatedSocial3PostsDB "Reads and writes" federatedSocial3API -> federatedSocial3FederatedPostsDB "Reads" federatedSocial3App -> federatedSocial3API "Reads and writes" federatedSocial3ModerationAPI -> federatedSocial3PostsDB "Writes" federatedSocial3ModerationAPI -> federatedSocial3FederatedPostsDB "Writes" federatedSocial3ModeratingApp -> federatedSocial3ModerationAPI "Interacts" socialUserToFederatedSocial3App = socialUser -> federatedSocial3App "Uses" socialAdminToFederatedSocial3ModeratingApp = socialAdmin -> federatedSocial3ModeratingApp "Labels" } federatedSocial3UserToFederatedSocial3 = federatedSocial3User -> federatedSocial3 "Enjoys" federatedSocial3AdminToFederatedSocial3Admin = federatedSocial3Admin -> federatedSocial3 "Manages" federatedSocial3AdminToFederatedSocial3Moderates = federatedSocial3Admin -> federatedSocial3 "Builds trust" federatedSocial4 = softwareSystem "A fourth federated social media site" "A federated social media site" federation { group federatedSocial4Typical { federatedSocial4App = container "Social App" "Application to access the social media site" "" typical federatedSocial4API = container "Social API" "API for accessing database" "" typical federatedSocial4PostsDB = container "Posts database" "Posts, replies, likes, re-posts, follows, media, etc." "" "database,typical" } group federatedSocial4Moderation { federatedSocial4ModeratingApp = container "Moderating App" "Application to label posts or users for moderation" "" moderation federatedSocial4ModerationAPI = container "Social Moderation API" "API for accessing database" "" moderation } group federatedSocial4Federation { federatedSocial4Federation = container "Federation" "Shares posts with other federated services" "" federation federatedSocial4FederationAPI = container "Federation API" "Takes posts from other federated services" "" federation federatedSocial4FederatedPostsDB = container "Federated Posts database" "Posts and related metadata from other" "" "database,federation" } federatedSocial4Federation -> federatedSocial4PostsDB "Reads" federatedSocial4FederationAPI -> federatedSocial4PostsDB "Writes" federatedSocial4API -> federatedSocial4PostsDB "Reads and writes" federatedSocial4API -> federatedSocial4FederatedPostsDB "Reads" federatedSocial4App -> federatedSocial4API "Reads and writes" federatedSocial4ModerationAPI -> federatedSocial4PostsDB "Writes" federatedSocial4ModerationAPI -> federatedSocial4FederatedPostsDB "Writes" federatedSocial4ModeratingApp -> federatedSocial4ModerationAPI "Interacts" socialUserToFederatedSocial4App = socialUser -> federatedSocial4App "Uses" socialAdminToFederatedSocial4ModeratingApp = socialAdmin -> federatedSocial4ModeratingApp "Labels" } federatedSocial4UserToFederatedSocial4 = federatedSocial4User -> federatedSocial4 "Enjoys" federatedSocial4AdminToFederatedSocial4Admin = federatedSocial4Admin -> federatedSocial4 "Manages" federatedSocial4AdminToFederatedSocial4Moderates = federatedSocial4Admin -> federatedSocial4 "Builds trust" federatedSocial1Federation -> federatedSocial2FederationAPI "Sends" federatedSocial1Federation -> federatedSocial3FederationAPI "Sends" federatedSocial1Federation -> federatedSocial4FederationAPI "Sends" federatedSocial2Federation -> federatedSocial1FederationAPI "Sends" federatedSocial2Federation -> federatedSocial3FederationAPI "Sends" federatedSocial2Federation -> federatedSocial4FederationAPI "Sends" federatedSocial3Federation -> federatedSocial1FederationAPI "Sends" federatedSocial3Federation -> federatedSocial2FederationAPI "Sends" federatedSocial3Federation -> federatedSocial4FederationAPI "Sends" federatedSocial4Federation -> federatedSocial1FederationAPI "Sends" federatedSocial4Federation -> federatedSocial2FederationAPI "Sends" federatedSocial4Federation -> federatedSocial3FederationAPI "Sends" typicalBlueskyUser1 = person "Bluesky User 1" "A typical user of Bluesky, @user1.bsky.social" typical typicalBlueskyUser2 = person "Bluesky User 2" "Another typical user of Bluesky, @user2.bsky.social" typical otherIDBlueskyUser1 = person "Bluesky User at example.com" "A Bluesky user with ID @user.example.com" federation otherIDBlueskyUser2 = person "Bluesky User at example.me" "A Bluesky user with ID @user.example.me" federation blueskyStaffMemberAsAdmin = person "A Bluesky admin" "A member of Bluesky staff operating as an admin" algorithmic blueskyStaffMemberAsModerator = person "A Bluesky moderator" "A member of Bluesky staff operating as a moderator" moderation externalBlueskyModerator1 = person "An external Bluesky moderator" "An external labeller" moderation group controlledByBluesky { centralBluesky = softwareSystem "Central Bluesky" "The original Bluesky implementation" atproto { group blueskyTypical { centralBlueskyAppView = container "Central Bluesky App View" "A view into the network for users" "" typical group Entryway { centralBlueskyPDS1 = container "Central Bluesky PDS" "A Personal Data Server in the Bluesky-hosted environment." "" "database,typical" centralBlueskyPDS2 = container "Central Bluesky PDS 2" "Another Personal Data Server in the Bluesky-hosted environment." "" "database,typical" centralBlueskyPDS3 = container "Central Bluesky PDS 3" "A third Personal Data Server in the Bluesky-hosted environment." "" "database,typical" } centralBlueskyIdentityResolver = container "Central Bluesky ID resolver" "Identity resolver for @.bsky.social users" "" typical } group blueskyModeration { centralBlueskyModeration = container "Central Bluesky moderation" "The network's initial, and non-optional, labelling and moderation service" "" moderation } group blueskyFeeds { centralBlueskyFeeds = container "Central Bluesky feeds generation" "A service providing subscribable algorithmic feeds" "" algorithmic } centralBlueskyAppViewToCentralBlueskyIdentityResolver = centralBlueskyAppView -> centralBlueskyIdentityResolver "Validates" centralBlueskyAppViewToCentralBlueskyPDS1 = centralBlueskyAppView -> centralBlueskyPDS1 "App View reads and writes" centralBlueskyAppViewToCentralBlueskyPDS2 = centralBlueskyAppView -> centralBlueskyPDS2 "App View reads and writes" centralBlueskyAppViewToCentralBlueskyPDS3 = centralBlueskyAppView -> centralBlueskyPDS3 "App View reads and writes" centralBlueskyAppViewToCentralBlueskyFeeds = centralBlueskyAppView -> centralBlueskyFeeds "App View reads" centralBlueskyAppViewToCentralBlueskyModeration = centralBlueskyAppView -> centralBlueskyModeration "App View reads" centralBlueskyFeedsToCentralBlueskyPDS1 = centralBlueskyFeeds -> centralBlueskyPDS1 "Feeds reads" centralBlueskyFeedsToCentralBlueskyPDS2 = centralBlueskyFeeds -> centralBlueskyPDS2 "Feeds reads" centralBlueskyFeedsToCentralBlueskyPDS3 = centralBlueskyFeeds -> centralBlueskyPDS3 "Feeds reads" centralBlueskyFeedsToCentralBlueskyModeration = centralBlueskyFeeds -> centralBlueskyModeration "Feeds reads" centralBlueskyModerationToCentralBlueskyPDS1 = centralBlueskyModeration -> centralBlueskyPDS1 "Moderation reads" centralBlueskyModerationToCentralBlueskyPDS2 = centralBlueskyModeration -> centralBlueskyPDS2 "Moderation reads" centralBlueskyModerationToCentralBlueskyPDS3 = centralBlueskyModeration -> centralBlueskyPDS3 "Moderation reads" typicalBlueskyUser1ToCentralBlueskyIdentityResolver = typicalBlueskyUser1 -> centralBlueskyIdentityResolver "Registers" typicalBlueskyUser2ToCentralBlueskyIdentityResolver = typicalBlueskyUser2 -> centralBlueskyIdentityResolver "Registers" typicalBlueskyUser1ToCentralBlueskyAppView = typicalBlueskyUser1 -> centralBlueskyAppView "Uses" typicalBlueskyUser2ToCentralBlueskyAppView = typicalBlueskyUser2 -> centralBlueskyAppView "Uses" otherIDBlueskyUser1ToCentralBlueskyAppView = otherIDBlueskyUser1 -> centralBlueskyAppView "Uses" otherIDBlueskyUser2ToCentralBlueskyAppView = otherIDBlueskyUser2 -> centralBlueskyAppView "Uses" blueskyStaffMemberAsAdminToCentralBlueskyFeeds = blueskyStaffMemberAsAdmin -> centralBlueskyFeeds "Creates" blueskyStaffMemberAsModeratorToCentralBlueskyModeration = blueskyStaffMemberAsModerator -> centralBlueskyModeration "Labels" } blueskyAppView = softwareSystem "Bluesky's App View" "Bluesky's App View implementation as a separate application" typical { blueskyAppViewApp = container "Bluesky's App View Application" "An App View app for the user" "Web Application" typical blueskyAppViewAPI = container "Bluesky's App View API" "An API, for use by third-party applications and bots" "" typical blueskyAppViewServices = container "Bluesky's App View Services" "Data retrieval services" "" typical blueskyAppViewIndex = container "Bluesky's App View Index" "Index of posts and related data" "" typical blueskyAppViewApp -> blueskyAppViewAPI "Accesses" blueskyAppViewAPI -> blueskyAppViewServices "Consumes" blueskyAppViewServices -> blueskyAppViewIndex "Consults" } blueskyRelay = softwareSystem "A Bluesky Relay" "A service making available all data in the bluesky network" atproto { blueskyRelayAPI = container "Relay API" "An API for writing to and reading from the Relay" "" atproto blueskyRelayDB = container "Relay database" "The database holding metadata of all posts" "" "database,atproto" blueskyRelayAPI -> blueskyRelayDB "Reads and writes" } blueskyFeedsGenerator = softwareSystem "Bluesky's Feed Generation" "A service building and exposing algorithmic feeds" algorithmic { blueskyFeedsGeneratorApp = container "Feed generator App" "An application for building algorithmic feeds" "" algorithmic blueskyFeedsGeneratorAPI = container "Feed generator API" "An API for accessing algorithmic feeds" "" algorithmic blueskyFeedsGeneratorService = container "Feed generator data capture service" "The database holding details of the algorithmic feeds" "" algorithmic blueskyFeedsGeneratorDB = container "Feed generator database" "The database holding details of the algorithmic feeds" "" "database,algorithmic" blueskyFeedsGeneratorApp -> blueskyFeedsGeneratorAPI "For management" blueskyFeedsGeneratorAPI -> blueskyFeedsGeneratorService "Consumes" blueskyFeedsGeneratorService -> blueskyFeedsGeneratorDB "Writes" } blueskyModeration = softwareSystem "Bluesky Moderation" "An independent service building and exposing moderation decisions" moderation { blueskyModerationApp = container "Moderation labelling app" "An application for labelling items" "" moderation blueskyModerationAPI = container "Moderation API" "An API for accessing decisions and for applying labels" "" moderation blueskyModerationService = container "Moderation data capture service" "Service to provide access to posts for moderation actions" "" moderation blueskyModerationDB = container "Moderation decisions database" "The database holding details of the moderation decisions" "" "database,moderation" blueskyModerationApp -> blueskyModerationAPI "For management" blueskyModerationAPI -> blueskyModerationService "Consumes" blueskyModerationService -> blueskyModerationDB "Writes" } } typicalBlueskyUser1ToCentralBluesky = typicalBlueskyUser1 -> centralBluesky "Enjoys" typicalBlueskyUser2ToCentralBluesky = typicalBlueskyUser2 -> centralBluesky "Enjoys" otherIDBlueskyUser1ToCentralBluesky = otherIDBlueskyUser1 -> centralBluesky "Enjoys" otherIDBlueskyUser2ToCentralBluesky = otherIDBlueskyUser2 -> centralBluesky "Enjoys" blueskyStaffMemberAsAdminToCentralBluesky = blueskyStaffMemberAsAdmin -> centralBluesky "Manages" blueskyStaffMemberAsModeratorToCentralBluesky = blueskyStaffMemberAsModerator -> centralBluesky "Builds trust" typicalBlueskyUser1 -> blueskyAppViewApp "Uses" typicalBlueskyUser2 -> blueskyAppViewApp "Uses" blueskyAppViewServicesToCentralBlueskyPDS1 = blueskyAppViewServices -> centralBlueskyPDS1 "Reads and writes" blueskyAppViewServicesToCentralBlueskyPDS2 = blueskyAppViewServices -> centralBlueskyPDS2 "Reads and writes" blueskyAppViewServicesToCentralBlueskyPDS3 = blueskyAppViewServices -> centralBlueskyPDS3 "Reads and writes" blueskyAppViewServices -> centralBlueskyFeeds "Reads" blueskyAppViewServices -> centralBlueskyModeration "Reads" group controlledBySelfHosters { independentExampleComIDSystem = softwareSystem "External Identity Management for example.com users" "An external system for managing user identities in example.com" atproto { independentExampleComIdentityResolver = container "External ID resolver" "Identity resolver for @.example.com users" ".well-known" typical otherIDBlueskyUser1ToIndependentExampleComIdentityResolver = otherIDBlueskyUser1 -> independentExampleComIdentityResolver "Registers" } independentExampleMeIDSystem = softwareSystem "External Identity Management for example.me users" "An external system for managing user identities in example.me" atproto { independentExampleMeIdentityResolver = container "External ID resolver" "Identity resolver for @.example.me users" "DNS TXT" typical otherIDBlueskyUser2ToIndependentExampleMeIdentityResolver = otherIDBlueskyUser2 -> independentExampleMeIdentityResolver "Registers" } independentPDS1 = softwareSystem "A selfhosted PDS" "A Personal Data Server hosted and maintain by the Bluesky user" atproto { independentPDS1PDSAPI = container "PDS API" "The API to access the Personal Data Server for @.example.social." "" typical independentPDS1PDSService = container "PDS publish service" "A service to publish activity into the PDS to the Relay" "" typical independentPDS1PDSDB = container "PDS DB" "The database for the Personal Data Server for @.example.social." "" "database,typical" independentPDS1PDSAPI -> independentPDS1PDSDB "API Reads and writes" independentPDS1PDSService -> independentPDS1PDSDB "Reads" } independentPDS2 = softwareSystem "Another selfhosted PDS" "A Personal Data Server hosted and maintain by the Bluesky user" atproto { independentPDS2PDSAPI = container "PDS 2 API" "The API to access the Personal Data Server." "" typical independentPDS2PDSService = container "PDS 2 publish service" "A service to publish activity into the PDS to the Relay" "" typical independentPDS2PDSDB = container "PDS 2 DB" "The database for the Personal Data Server." "" "database,typical" independentPDS2PDSAPI -> independentPDS2PDSDB "API Reads and writes" independentPDS2PDSService -> independentPDS2PDSDB "Reads" } independentAppView = softwareSystem "An Independent App View" "Bluesky's App View implementation as a separate application" typical { independentAppViewApp = container "An Independent App View Application" "An App View app for the user" "Web Application" typical independentAppViewAPI = container "An Independent App View API" "An API, for use by third-party applications and bots" "" typical independentAppViewServices = container "An Independent App View Services" "Data retrieval services" "" typical independentAppViewIndex = container "An Independent App View Index" "Index of posts and related data" "" typical independentAppViewApp -> independentAppViewAPI "Accesses" independentAppViewAPI -> independentAppViewServices "Consumes" independentAppViewServices -> independentAppViewIndex "Consults" } independentFeedGenerator = softwareSystem "Independent Feed Generation" "An independent service building and exposing algorithmic feeds" algorithmic { independentFeedGeneratorApp = container "Feed generator App" "An application for building algorithmic feeds" "" algorithmic independentFeedGeneratorAPI = container "Feed generator API" "An API for accessing algorithmic feeds" "" algorithmic independentFeedGeneratorService = container "Feed generator data capture service" "The database holding details of the algorithmic feeds" "" algorithmic independentFeedGeneratorDB = container "Feed generator database" "The database holding details of the algorithmic feeds" "" "database,algorithmic" independentFeedGeneratorApp -> independentFeedGeneratorAPI "For management" independentFeedGeneratorAPI -> independentFeedGeneratorService "Consumes" independentFeedGeneratorService -> independentFeedGeneratorDB "Writes" } independentModeration = softwareSystem "Independent Moderation" "An independent service building and exposing moderation decisions" moderation { independentModerationApp = container "Moderation labelling app" "An application for labelling items" "" moderation independentModerationAPI = container "Moderation API" "An API for accessing decisions and for applying labels" "" moderation independentModerationService = container "Moderation data capture service" "Service to provide access to posts for moderation actions" "" moderation independentModerationDB = container "Moderation decisions database" "The database holding details of the moderation decisions" "" "database,moderation" independentModerationApp -> independentModerationAPI "For management" independentModerationAPI -> independentModerationService "Consumes" independentModerationService -> independentModerationDB "Writes" } } group genericBSkyServices { genericBSkyIDSystem = softwareSystem "Generic Bluesky Identity Management for users" "A generic system for managing user identities for the AT Protocol" atproto { genericBSkyIdentityResolver = container "Independent ID resolver" "Identity resolver for" "DNS TXT or .well-known" atproto } genericFeedGenerator = softwareSystem "Generic Feed Generation" "An generic service building and exposing algorithmic feeds" algorithmic { genericFeedGeneratorApp = container "Feed generator App" "An application for building algorithmic feeds" "" algorithmic genericFeedGeneratorAPI = container "Feed generator API" "An API for accessing algorithmic feeds" "" algorithmic genericFeedGeneratorService = container "Feed generator data capture service" "The database holding details of the algorithmic feeds" "" algorithmic genericFeedGeneratorDB = container "Feed generator database" "The database holding details of the algorithmic feeds" "" "database,algorithmic" genericFeedGeneratorApp -> genericFeedGeneratorAPI "For management" genericFeedGeneratorAPI -> genericFeedGeneratorService "Consumes" genericFeedGeneratorService -> genericFeedGeneratorDB "Writes" } genericAppView = softwareSystem "A Generic App View" "Bluesky's App View implementation as a separate application" typical { genericAppViewApp = container "A Generic App View Application" "An App View app for the user" "Web Application" typical genericAppViewAPI = container "A Generic App View API" "An API, for use by third-party applications and bots" "" typical genericAppViewServices = container "A Generic App View Services" "Data retrieval services" "" typical genericAppViewIndex = container "A Generic App View Index" "Index of posts and related data" "" typical genericAppViewApp -> genericAppViewAPI "Accesses" genericAppViewAPI -> genericAppViewServices "Consumes" genericAppViewServices -> genericAppViewIndex "Consults" } genericPDS = softwareSystem "A generic PDS" "A Personal Data Server hosted and maintain by the Bluesky user" atproto { genericPDSPDSAPI = container "PDS API" "The API to access the Personal Data Server for @.example.social." "" typical genericPDSPDSService = container "PDS publish service" "A service to publish activity into the PDS to the Relay" "" typical genericPDSPDSDB = container "PDS DB" "The database for the Personal Data Server for @.example.social." "" "database,typical" genericPDSPDSAPI -> genericPDSPDSDB "API Reads and writes" genericPDSPDSService -> genericPDSPDSDB "Reads" } } // AppView reads from moderation API genericAppViewServices -> blueskyModerationAPI "App View reads" genericAppViewServices -> independentModerationAPI "App View reads" // Moderatory uses the app blueskyStaffMemberAsModerator -> blueskyModerationApp "Labels" externalBlueskyModerator1 -> independentModerationApp "Labels" // Moderation reads the relay (not the PDS!) blueskyModerationService -> blueskyRelayAPI "Reads and writes" independentModerationService -> blueskyRelayAPI "Reads and writes" typicalBlueskyUser1 -> independentAppViewApp "Uses" typicalBlueskyUser2 -> independentAppViewApp "Uses" independentAppViewServicesToCentralBlueskyPDS1 = independentAppViewServices -> centralBlueskyPDS1 "Reads and writes" independentAppViewServicesToCentralBlueskyPDS2 = independentAppViewServices -> centralBlueskyPDS2 "Reads and writes" independentAppViewServicesToCentralBlueskyPDS3 = independentAppViewServices -> centralBlueskyPDS3 "Reads and writes" independentAppViewServices -> centralBlueskyFeeds "Reads" independentAppViewServices -> centralBlueskyModeration "Reads" typicalBlueskyUser1 -> genericAppViewApp "Uses" typicalBlueskyUser2 -> genericAppViewApp "Uses" genericAppViewServicesToCentralBlueskyPDS1 = genericAppViewServices -> centralBlueskyPDS1 "Reads and writes" genericAppViewServicesToCentralBlueskyPDS2 = genericAppViewServices -> centralBlueskyPDS2 "Reads and writes" genericAppViewServicesToCentralBlueskyPDS3 = genericAppViewServices -> centralBlueskyPDS3 "Reads and writes" genericAppViewServices -> centralBlueskyFeeds "Reads" genericAppViewServices -> centralBlueskyModeration "Reads" centralBlueskyAppViewToIndependentExampleComIdentityResolver = centralBlueskyAppView -> independentExampleComIdentityResolver "Validates" centralBlueskyAppViewToIndependentExampleMeIdentityResolver = centralBlueskyAppView -> independentExampleMeIdentityResolver "Validates" typicalBlueskyUser1ToGenericBSkyIdentityResolver = typicalBlueskyUser1 -> genericBSkyIdentityResolver "Registers" typicalBlueskyUser2ToGenericBSkyIdentityResolver = typicalBlueskyUser2 -> genericBSkyIdentityResolver "Registers" centralBlueskyAppViewToGenericBSkyIdentityResolver = centralBlueskyAppView -> genericBSkyIdentityResolver "Validates" independentPDS1BlueskyUser1 = person "Own PDS Bluesky user" "A Bluesky user hosting their own PDS" federation independentPDS1BlueskyUser1 -> blueskyAppViewApp "Uses" independentPDS1BlueskyUser1 -> independentAppViewApp "Uses" independentPDS1BlueskyUser1 -> genericAppViewApp "Uses" independentPDS1BlueskyUser1 -> independentPDS1 "Manages" blueskyAppViewServices -> independentPDS1PDSAPI "Writes" independentAppViewServices -> independentPDS1PDSAPI "Writes" genericAppViewServices -> independentPDS1PDSAPI "Writes" centralBlueskyAppView -> independentPDS1PDSAPI "App View writes" independentPDS1BlueskyUser1 -> genericPDS "Manages" blueskyAppViewServices -> genericPDSPDSAPI "Writes" independentAppViewServices -> genericPDSPDSAPI "Writes" genericAppViewServices -> genericPDSPDSAPI "Writes" centralBlueskyAppView -> genericPDSPDSAPI "App View writes" independentPDS2BlueskyUser1 = person "Another Own PDS Bluesky user" "A Bluesky user hosting their own PDS" federation independentPDS2BlueskyUser1 -> blueskyAppViewApp "Uses" independentPDS2BlueskyUser1 -> independentAppViewApp "Uses" independentPDS2BlueskyUser1 -> genericAppViewApp "Uses" independentPDS2BlueskyUser1 -> independentPDS2 "Manages" blueskyAppViewServices -> independentPDS2PDSAPI "Writes" independentAppViewServices -> independentPDS2PDSAPI "Writes" genericAppViewServices -> independentPDS2PDSAPI "Writes" centralBlueskyAppView -> independentPDS2PDSAPI "App View writes" externalBlueskyAlgorithmBuilder = person "A feed builder" "An external feed/algorithm builder" algorithmic independentFeedGeneratorServiceToCentralBlueskyPDS1 = independentFeedGeneratorService -> centralBlueskyPDS1 "Reads" independentFeedGeneratorServiceToCentralBlueskyPDS2 = independentFeedGeneratorService -> centralBlueskyPDS2 "Reads" independentFeedGeneratorServiceToCentralBlueskyPDS3 = independentFeedGeneratorService -> centralBlueskyPDS3 "Reads" genericFeedGeneratorServiceToCentralBlueskyPDS1 = genericFeedGeneratorService -> centralBlueskyPDS1 "Reads" genericFeedGeneratorServiceToCentralBlueskyPDS2 = genericFeedGeneratorService -> centralBlueskyPDS2 "Reads" genericFeedGeneratorServiceToCentralBlueskyPDS3 = genericFeedGeneratorService -> centralBlueskyPDS3 "Reads" blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 = blueskyFeedsGeneratorService -> centralBlueskyPDS1 "Reads" blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 = blueskyFeedsGeneratorService -> centralBlueskyPDS2 "Reads" blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 = blueskyFeedsGeneratorService -> centralBlueskyPDS3 "Reads" centralBlueskyAppViewToIndependentFeedGeneratorAPI = centralBlueskyAppView -> independentFeedGeneratorAPI "App View reads" blueskyAppViewServices -> independentFeedGeneratorAPI "App View reads" externalBlueskyAlgorithmBuilder -> independentFeedGeneratorApp "Creates and manages feeds" centralBlueskyAppViewToGenericFeedGeneratorAPI = centralBlueskyAppView -> genericFeedGeneratorAPI "App View reads" blueskyAppViewServices -> genericFeedGeneratorAPI "App View reads" externalBlueskyAlgorithmBuilder -> genericFeedGeneratorApp "Creates and manages feeds" centralBlueskyAppViewToBlueskyFeedsGeneratorAPI = centralBlueskyAppView -> blueskyFeedsGeneratorAPI "App View reads" blueskyAppViewServices -> blueskyFeedsGeneratorAPI "App View reads" independentAppViewServices -> independentFeedGeneratorAPI "App View reads" independentAppViewServices -> genericFeedGeneratorAPI "App View reads" independentAppViewServices -> blueskyFeedsGeneratorAPI "App View reads" genericAppViewServices -> independentFeedGeneratorAPI "App View reads" genericAppViewServices -> genericFeedGeneratorAPI "App View reads" genericAppViewServices -> blueskyFeedsGeneratorAPI "App View reads" blueskyStaffMemberAsAdmin -> blueskyFeedsGeneratorApp "Creates and manages feeds" blueskyStaffMemberAsAdmin -> genericFeedGeneratorApp "Creates and manages feeds" centralBlueskyPDS1 -> blueskyRelayAPI "Writes" centralBlueskyPDS2 -> blueskyRelayAPI "Writes" centralBlueskyPDS3 -> blueskyRelayAPI "Writes" centralBlueskyModeration -> blueskyRelayAPI "Reads" blueskyAppViewServices -> blueskyRelayAPI "App View reads" independentAppViewServices -> blueskyRelayAPI "App View reads" genericAppViewServices -> blueskyRelayAPI "App View reads" independentFeedGeneratorService -> blueskyRelayAPI "Reads" genericFeedGeneratorService -> blueskyRelayAPI "Reads" blueskyFeedsGeneratorService -> blueskyRelayAPI "Reads" independentPDS1PDSService -> blueskyRelayAPI "Writes" genericPDSPDSService -> blueskyRelayAPI "Writes" independentPDS2PDSService -> blueskyRelayAPI "Writes" } views { // Won't be used for presentation systemLandscape fullSystemLandscape { autolayout include * } // 001: Generic social media. An overview of a generic social media service systemContext genericSocial 001-GenericSocial-01 { autolayout include * // Excluding relationships that make sense only at the next level exclude socialUserToGenericSocialApp } // 002: Generic social media. A container view of a generic social service container genericSocial 002-GenericSocial-02 { autolayout include * } // 003: Realistic social media. Overview of a more realistic social service systemContext realisticSocial 003-RealisticSocial-01 { autolayout include * // Excluding relationships that make sense only at the next level exclude socialUserToRealisticSocialApp socialModeratorToRealisticSocialModeratingApp socialAdminToRealisticSocialFeedDesigner } // 004: Realistic social media. A container view of the more realistic service, showing the basic containers container realisticSocial 004-RealisticSocial-02 { autolayout include * // Excluding the admin and the algorithm designer and the moderation activities exclude realisticSocialFeedDesigner socialAdmin realisticSocialModerationAPI realisticSocialModeratingApp socialModerator } // 005: Realistic social media. A container view of the more realistic service, including algorithm works container realisticSocial 005-RealisticSocial-03 { autolayout include * // Excluding the moderation activities exclude realisticSocialModerationAPI realisticSocialModeratingApp socialModerator } // 006: Realistic social media. A container view of the full more realistic service (typical, algorithm and moderation) container realisticSocial 006-RealisticSocial-04 { autolayout include * } // 007: Federated social media. Overview of a federated social media service systemContext federatedSocial1 007-FederatedSocial-01 { autolayout include * // Excluding relationships that make sense only at the next level exclude federatedSocial1UserToFederatedSocial1App federatedSocial1AdminToFederatedSocial1ModeratingApp exclude federatedSocial2 federatedSocial3 federatedSocial4 } // 008: Federated social media. Container diagram of a basic federated social service, showing administration/moderation container federatedSocial1 008-FederatedSocial-02 { autolayout include * exclude federatedSocial1Federation federatedSocial1FederationAPI federatedSocial1FederatedPostsDB exclude federatedSocial2 federatedSocial3 federatedSocial4 } // 009: Federated social media. Container diagram of a basic federated social service, showing administration/moderation and federation components container federatedSocial1 009-FederatedSocial-03 { autolayout include * exclude federatedSocial2 federatedSocial3 federatedSocial4 } // 010: Federated social media. Full container diagram of a basic federated social service, showing another service federating with it container federatedSocial1 010-FederatedSocial-04 { autolayout include * federatedSocial2User exclude federatedSocial3 federatedSocial4 } // 011: Federated social media. Overview of a federated social media service, showing another one federating with it, including its user systemContext federatedSocial1 011-FederatedSocial-05 { autolayout include * federatedSocial2User // Excluding relationships that make sense only at the next level exclude federatedSocial1UserToFederatedSocial1App federatedSocial1AdminToFederatedSocial1ModeratingApp exclude federatedSocial3 federatedSocial4 } // 012: Federated social media. Overview of a federated social media service, showing another one federating with it, including its user and its admin systemContext federatedSocial1 012-FederatedSocial-06 { autolayout include * federatedSocial2User federatedSocial2Admin // Excluding relationships that make sense only at the next level exclude federatedSocial1UserToFederatedSocial1App federatedSocial1AdminToFederatedSocial1ModeratingApp exclude federatedSocial3 federatedSocial4 } // 013: Federated social media. Overview of a federated social media service, showing 2 others federating with it, including their users and admins systemContext federatedSocial1 013-FederatedSocial-07 { autolayout include * federatedSocial2User federatedSocial2Admin federatedSocial3User federatedSocial3Admin // Excluding relationships that make sense only at the next level exclude federatedSocial1UserToFederatedSocial1App federatedSocial1AdminToFederatedSocial1ModeratingApp exclude federatedSocial4 } // 014: Federated social media. Overview of a federated social media service, showing 3 others federating with it, including their users and admins systemContext federatedSocial1 014-FederatedSocial-08 { autolayout include * federatedSocial2User federatedSocial2Admin federatedSocial3User federatedSocial3Admin federatedSocial4User federatedSocial4Admin // Excluding relationships that make sense only at the next level exclude federatedSocial1UserToFederatedSocial1App federatedSocial1AdminToFederatedSocial1ModeratingApp } // 015: Bluesky. Basic overview of Bluesky. User, Admin, Moderator. systemContext centralBluesky 015-BlueskyBasic-01 { autolayout include * // Services to exclude exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 typicalBlueskyUser2 exclude otherIDBlueskyUser1 otherIDBlueskyUser2 // Excluding relationships that make sense only at the next level exclude typicalBlueskyUser1ToCentralBlueskyAppView typicalBlueskyUser2ToCentralBlueskyAppView exclude blueskyStaffMemberAsModeratorToCentralBlueskyModeration blueskyStaffMemberAsAdminToCentralBlueskyFeeds exclude typicalBlueskyUser1ToCentralBlueskyIdentityResolver typicalBlueskyUser2ToCentralBlueskyIdentityResolver exclude otherIDBlueskyUser1ToCentralBlueskyAppView otherIDBlueskyUser2ToCentralBlueskyAppView } // 016: Bluesky. Container diagram introducing Bluesky container centralBluesky 016-BlueskyBasic-02 { autolayout include * // Services to exclude exclude centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericFeedGenerator genericBSkyIDSystem genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 typicalBlueskyUser2 } // 017: Bluesky, independent identity. Overview of Bluesky with externally-identified user systemContext centralBluesky 017-BlueskyIdentity-01 { autolayout include * // Services to exclude exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericFeedGenerator genericBSkyIDSystem genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 exclude otherIDBlueskyUser2 exclude blueskyStaffMemberAsAdmin blueskyStaffMemberAsModerator typicalBlueskyUser2 // Excluding relationships that make sense only at the next level exclude typicalBlueskyUser1ToCentralBlueskyAppView typicalBlueskyUser2ToCentralBlueskyAppView exclude blueskyStaffMemberAsModeratorToCentralBlueskyModeration blueskyStaffMemberAsAdminToCentralBlueskyFeeds exclude typicalBlueskyUser1ToCentralBlueskyIdentityResolver typicalBlueskyUser2ToCentralBlueskyIdentityResolver exclude otherIDBlueskyUser1ToCentralBlueskyAppView otherIDBlueskyUser2ToCentralBlueskyAppView } // 018: Bluesky, independent identity. Container diagram showing externally-identified user container centralBluesky 018-BlueskyIdentity-02 { autolayout include * // Services to exclude exclude centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser2 typicalBlueskyUser2 } // 019: Bluesky, independent identity. Container diagram showing 2 externally-identified users container centralBluesky 019-BlueskyIdentity-03 { autolayout include * // Services to exclude exclude centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 typicalBlueskyUser2 } // 020: Bluesky, independent identity. Container diagram showing 2 typical users with identities in the independent ID system container centralBluesky 020-BlueskyIdentity-04 { autolayout include * // Services to exclude exclude centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 021: Bluesky, independent Feed Generation. Container diagram showing the independent Feed Generation service as a separate software system container centralBluesky 021-BlueskyFeeds-01 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 022: Bluesky, independent Feed Generation. Container diagram of independent Feed Generation Service container independentFeedGenerator 022-BlueskyFeeds-02 { autolayout include * // Services to exclude exclude blueskyAppView blueskyRelay exclude independentAppView exclude genericAppView // Relationships to exclude // exclude blueskyAppViewServicesToCentralBlueskyPDS1 } // 023: Bluesky, independent Feed Generation. Container // diagram showing the independent Feed Generation service as // a separate software system, eliding the internal service container centralBluesky 023-BlueskyFeeds-03 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericFeedGenerator genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 024: Bluesky, independent Feed Generation. Container // diagram showing a generic Feed Generation service container centralBluesky 024-BlueskyFeeds-04 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 025: Bluesky, independent App View. Container diagram // showing the Bluesky's separate appview as a separate // software system container centralBluesky 025-BlueskyAppView-01 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 026: Bluesky, independent App View. Container diagram of independent App View container blueskyAppView 026-BlueskyAppView-02 { autolayout include * // Services to exclude exclude blueskyFeedsGenerator blueskyRelay exclude independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericPDS // Relationships to exclude exclude typicalBlueskyUser1ToCentralBlueskyIdentityResolver typicalBlueskyUser2ToCentralBlueskyIdentityResolver exclude typicalBlueskyUser1ToCentralBluesky typicalBlueskyUser2ToCentralBluesky // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 } // 027: Bluesky, independent App View. Container diagram // showing the Bluesky's separate appview as a separate // software system alongside a separate independent AppView container centralBluesky 027-BlueskyAppView-03 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyFeedsGenerator blueskyRelay exclude independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericAppView genericBSkyIDSystem genericPDS // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 028: Bluesky, independent App View. Container diagram // showing the a Generic AppView representing both independent // AppViews and Bluesky's own AppView container centralBluesky 028-BlueskyAppView-04 { autolayout include * externalBlueskyAlgorithmBuilder // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericPDS genericBSkyIDSystem // Users to exclude exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 029: Bluesky, Relay. Container diagram showing multiple PDSs in the internal system container centralBluesky 029-BlueskyRelay-01 { autolayout include * // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver exclude blueskyAppView blueskyFeedsGenerator blueskyRelay exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericBSkyIDSystem genericPDS // Users to exclude exclude blueskyStaffMemberAsAdmin independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } // 030: Bluesky, Relay. Container diagram showing multiple PDSs in the internal system, feeding into the Relay container centralBluesky 030-BlueskyRelay-02 { autolayout include * // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericBSkyIDSystem genericPDS // Users to exclude exclude blueskyStaffMemberAsAdmin independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 // Relationships to exclude exclude blueskyAppViewServicesToCentralBlueskyPDS1 blueskyAppViewServicesToCentralBlueskyPDS2 blueskyAppViewServicesToCentralBlueskyPDS3 exclude independentAppViewServicesToCentralBlueskyPDS1 independentAppViewServicesToCentralBlueskyPDS2 independentAppViewServicesToCentralBlueskyPDS3 exclude independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 exclude centralBlueskyModerationToCentralBlueskyPDS1 centralBlueskyModerationToCentralBlueskyPDS2 centralBlueskyModerationToCentralBlueskyPDS3 } // 031: Bluesky, Relay. Container diagram of Relay. container blueskyRelay 031-BlueskyRelay-03 { autolayout include * // Services to exclude exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentFeedGenerator independentPDS1 independentPDS2 exclude genericPDS // Relationships to exclude exclude centralBlueskyAppViewToIndependentFeedGeneratorAPI centralBlueskyAppViewToBlueskyFeedsGeneratorAPI blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 exclude blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 independentFeedGeneratorServiceToCentralBlueskyPDS1 exclude independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 } // 032: Bluesky, Independent PDS. Container diagram showing independent PDS container centralBluesky 032-BlueskyPDS-01 { autolayout include * independentPDS1BlueskyUser1 // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS2 exclude genericBSkyIDSystem genericPDS // Users to exclude exclude blueskyStaffMemberAsAdmin independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 // Relationships to exclude exclude blueskyAppViewServicesToCentralBlueskyPDS1 blueskyAppViewServicesToCentralBlueskyPDS2 blueskyAppViewServicesToCentralBlueskyPDS3 exclude independentFeedGeneratorServiceToCentralBlueskyPDS1 independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 exclude blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 exclude centralBlueskyModerationToCentralBlueskyPDS1 centralBlueskyModerationToCentralBlueskyPDS2 centralBlueskyModerationToCentralBlueskyPDS3 } // 033: Bluesky, Independent PDS. Container diagram of an independent PDS. container independentPDS1 033-BlueskyPDS-02 { autolayout include * // Services to exclude exclude centralBluesky exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentFeedGenerator } // 034: Bluesky, Independent PDS. Container diagram showing 2 independent PDSs container centralBluesky 034-BlueskyPDS-03 { autolayout include * independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator exclude genericBSkyIDSystem genericPDS // Users to exclude exclude blueskyStaffMemberAsAdmin otherIDBlueskyUser1 otherIDBlueskyUser2 // Relationships to exclude exclude blueskyAppViewServicesToCentralBlueskyPDS1 blueskyAppViewServicesToCentralBlueskyPDS2 blueskyAppViewServicesToCentralBlueskyPDS3 exclude independentFeedGeneratorServiceToCentralBlueskyPDS1 independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 exclude blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 exclude centralBlueskyModerationToCentralBlueskyPDS1 centralBlueskyModerationToCentralBlueskyPDS2 centralBlueskyModerationToCentralBlueskyPDS3 } // 035: Bluesky, Independent PDS. Container diagram showing 2 independent PDSs container centralBluesky 035-BlueskyPDS-04 { autolayout include * independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyPDS1 centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericBSkyIDSystem // Users to exclude exclude blueskyStaffMemberAsAdmin independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 // Relationships to exclude exclude blueskyAppViewServicesToCentralBlueskyPDS1 blueskyAppViewServicesToCentralBlueskyPDS2 blueskyAppViewServicesToCentralBlueskyPDS3 exclude independentFeedGeneratorServiceToCentralBlueskyPDS1 independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 exclude blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 exclude centralBlueskyModerationToCentralBlueskyPDS1 centralBlueskyModerationToCentralBlueskyPDS2 centralBlueskyModerationToCentralBlueskyPDS3 } // 036: Bluesky, Independent Moderation. Container diagram showing a separated-out bluesky moderation service container centralBluesky 036-BlueskyModeration-01 { autolayout include * independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 blueskyModeration // Services to exclude exclude centralBlueskyAppView centralBlueskyFeeds centralBlueskyIdentityResolver centralBlueskyModeration centralBlueskyPDS1 centralBlueskyPDS2 centralBlueskyPDS3 exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 exclude genericBSkyIDSystem // Users to exclude exclude blueskyStaffMemberAsAdmin independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 // Relationships to exclude exclude blueskyAppViewServicesToCentralBlueskyPDS1 blueskyAppViewServicesToCentralBlueskyPDS2 blueskyAppViewServicesToCentralBlueskyPDS3 exclude independentFeedGeneratorServiceToCentralBlueskyPDS1 independentFeedGeneratorServiceToCentralBlueskyPDS2 independentFeedGeneratorServiceToCentralBlueskyPDS3 exclude blueskyFeedsGeneratorServiceToCentralBlueskyPDS1 blueskyFeedsGeneratorServiceToCentralBlueskyPDS2 blueskyFeedsGeneratorServiceToCentralBlueskyPDS3 exclude centralBlueskyModerationToCentralBlueskyPDS1 centralBlueskyModerationToCentralBlueskyPDS2 centralBlueskyModerationToCentralBlueskyPDS3 } // 037: Bluesky, Independent Moderation. Container diagram of moderation service. container blueskyModeration 037-BlueskyModeration-02 { autolayout include * } // 038: Bluesky, Independent Moderation. System Landscape, including independent moderation. systemLandscape 038-BlueskyModeration-03 { autolayout include * // Services to exclude exclude genericSocial realisticSocial federatedSocial1 federatedSocial2 federatedSocial3 federatedSocial4 centralBluesky exclude blueskyAppView blueskyFeedsGenerator exclude independentAppView independentExampleComIDSystem independentExampleMeIDSystem independentFeedGenerator independentPDS1 independentPDS2 // Users to exclude exclude socialAdmin socialModerator socialUser exclude federatedSocial1User federatedSocial1Admin federatedSocial2User federatedSocial2Admin exclude federatedSocial3User federatedSocial3Admin federatedSocial4User federatedSocial4Admin exclude blueskyStaffMemberAsAdmin exclude independentPDS1BlueskyUser1 independentPDS2BlueskyUser1 otherIDBlueskyUser1 otherIDBlueskyUser2 } styles { element database { shape Cylinder } element atproto { colour #213d53 background #e2b5a7 } element federation { colour #6de518 background #5d4d5c } element algorithmic { colour #7fe495 background #923821 } element moderation { colour #2b0743 background #4092bf } element adminey { background #582893 colour #c4dfec } element typical { colour #110303 background #e8dd9b } element "Person" { shape person background #08427b colour #ffffff } } } }