blueskyArchitecture/Bluesky.dsl

1065 lines
70 KiB
Text
Raw Normal View History

2024-05-20 08:22:33 +00:00
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 @<user>.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 @<user>.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 @<user>.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 @<user>.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 @<user>.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 @<user>.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 @<user>.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
}
}
}
}