[
  {
    "id": "01-system-context",
    "title": "LinkedIn — System Context",
    "layout": "context",
    "canvas": {
      "width": 1700
    },
    "system": {
      "label": "LinkedIn Platform",
      "sub": "Professional network",
      "icon": "di2_linkedin"
    },
    "groups": [
      {
        "side": "left",
        "title": "People",
        "nodes": [
          {
            "id": "member",
            "label": "Member",
            "kind": "actor",
            "rel": "network · jobs",
            "dir": "in"
          },
          {
            "id": "recruiter",
            "label": "Recruiter",
            "kind": "actor",
            "rel": "candidate search",
            "dir": "in"
          },
          {
            "id": "employer",
            "label": "Employer admin",
            "kind": "actor",
            "rel": "jobs · company page",
            "dir": "in"
          },
          {
            "id": "reviewer",
            "label": "Trust & Safety",
            "kind": "actor",
            "rel": "review queue",
            "dir": "in"
          }
        ]
      },
      {
        "side": "top",
        "title": "Partners",
        "nodes": [
          {
            "id": "sso",
            "label": "Enterprise SSO",
            "kind": "external",
            "rel": "SAML for seats",
            "dir": "in",
            "icon": "fa5_key"
          },
          {
            "id": "ats",
            "label": "Applicant tracking",
            "kind": "external",
            "rel": "job feeds · hourly",
            "dir": "in",
            "kind2": "batch",
            "icon": "fa5_briefcase"
          },
          {
            "id": "apps",
            "label": "Third-party apps",
            "kind": "external",
            "rel": "OAuth 2.0",
            "dir": "in",
            "icon": "fa5_handshake"
          }
        ]
      },
      {
        "side": "right",
        "title": "Delivery and identity",
        "nodes": [
          {
            "id": "push",
            "label": "APNs / FCM",
            "kind": "external",
            "rel": "push",
            "kind2": "async",
            "icon": "fa5_paper_plane"
          },
          {
            "id": "email",
            "label": "Email delivery",
            "kind": "external",
            "rel": "SMTP",
            "kind2": "async",
            "icon": "fa5_envelope"
          },
          {
            "id": "sms",
            "label": "SMS gateway",
            "kind": "external",
            "rel": "OTP codes",
            "icon": "fa5_comment_dots"
          },
          {
            "id": "idp",
            "label": "Social identity",
            "kind": "external",
            "rel": "Google / Apple login",
            "icon": "fa5_user_check"
          }
        ]
      },
      {
        "side": "bottom",
        "title": "Adjacent platforms",
        "nodes": [
          {
            "id": "ads",
            "label": "Ads platform",
            "kind": "external",
            "rel": "sponsored slots",
            "icon": "fa5_ad"
          },
          {
            "id": "pay",
            "label": "Payments",
            "kind": "external",
            "rel": "Premium",
            "icon": "fa5_credit_card"
          },
          {
            "id": "rep",
            "label": "URL + file reputation",
            "kind": "external",
            "rel": "link and file scan",
            "icon": "fa5_shield_alt"
          }
        ]
      }
    ],
    "meta": {
      "v": "1.0",
      "owner": "Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "02-high-level-architecture",
    "title": "LinkedIn — High-Level Architecture",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Clients",
        "nodes": [
          {
            "id": "h-web",
            "label": "Web client",
            "kind": "app",
            "sub": "SSR + SPA",
            "icon": "fa5_desktop"
          },
          {
            "id": "h-mob",
            "label": "iOS / Android",
            "kind": "app",
            "sub": "native",
            "icon": "fa5_mobile_alt"
          },
          {
            "id": "h-prt",
            "label": "Partner apps",
            "kind": "external",
            "sub": "OAuth 2.0",
            "icon": "fa5_handshake"
          }
        ]
      },
      {
        "title": "Edge and API",
        "nodes": [
          {
            "id": "h-afd",
            "label": "Azure Front Door",
            "kind": "integration",
            "sub": "global edge · TLS",
            "icon": "azure_frontdoor"
          },
          {
            "id": "h-ats",
            "label": "Traffic tier",
            "kind": "integration",
            "sub": "Apache Traffic Server",
            "icon": "fa5_route"
          },
          {
            "id": "h-api",
            "label": "API layer",
            "kind": "integration",
            "sub": "GraphQL over Rest.li",
            "icon": "fa5_plug"
          },
          {
            "id": "h-id",
            "label": "Identity",
            "kind": "security",
            "sub": "sessions · MFA",
            "icon": "fa5_user_shield"
          }
        ]
      },
      {
        "title": "Member services",
        "nodes": [
          {
            "id": "h-prof",
            "label": "Profile",
            "kind": "app",
            "sub": "Espresso",
            "icon": "fa5_id_card"
          },
          {
            "id": "h-graph",
            "label": "Social graph",
            "kind": "app",
            "sub": "LIquid",
            "icon": "fa5_project_diagram"
          },
          {
            "id": "h-msg",
            "label": "Messaging",
            "kind": "app",
            "sub": "SSE delivery",
            "icon": "fa5_comments"
          }
        ]
      },
      {
        "title": "Discovery services",
        "nodes": [
          {
            "id": "h-feed",
            "label": "Feed",
            "kind": "app",
            "sub": "FollowFeed",
            "icon": "fa5_rss"
          },
          {
            "id": "h-cont",
            "label": "Content",
            "kind": "app",
            "sub": "posts · comments",
            "icon": "fa5_newspaper"
          },
          {
            "id": "h-srch",
            "label": "Search",
            "kind": "app",
            "sub": "Galene",
            "icon": "fa5_search"
          },
          {
            "id": "h-jobs",
            "label": "Jobs",
            "kind": "app",
            "sub": "postings · applies",
            "icon": "fa5_briefcase"
          }
        ]
      },
      {
        "title": "Event backbone",
        "nodes": [
          {
            "id": "h-kafka",
            "label": "Kafka",
            "kind": "queue",
            "sub": "the central log",
            "icon": "kafka"
          },
          {
            "id": "h-samza",
            "label": "Samza",
            "kind": "app",
            "sub": "nearline jobs",
            "icon": "fa5_stream"
          }
        ]
      },
      {
        "title": "Asynchronous consumers",
        "nodes": [
          {
            "id": "h-rec",
            "label": "Recommendations",
            "kind": "app",
            "sub": "Pro-ML · Venice",
            "icon": "fa5_brain"
          },
          {
            "id": "h-ntf",
            "label": "Notifications",
            "kind": "app",
            "sub": "ATC",
            "icon": "fa5_bell"
          },
          {
            "id": "h-ana",
            "label": "Analytics",
            "kind": "app",
            "sub": "Pinot · HDFS",
            "icon": "fa5_chart_bar"
          }
        ]
      }
    ],
    "note": "Stores are omitted here; act 4 places every one of them.",
    "meta": {
      "v": "1.0",
      "owner": "Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "03-actors-and-journeys",
    "title": "LinkedIn — Actors and Their Core Journeys",
    "layout": "actors",
    "groups": [
      {
        "title": "Members",
        "kind": "boundary",
        "actors": [
          {
            "id": "a-seek",
            "label": "Job seeker",
            "sub": "assumed 50M / month",
            "goal": "Find a role that fits me, and always know where my application stands.",
            "journeys": [
              {
                "id": "j-apply",
                "label": "Search and apply to a job",
                "sub": "view 04"
              },
              {
                "label": "Track my applications"
              },
              {
                "label": "Get a job alert"
              }
            ]
          },
          {
            "id": "a-pro",
            "label": "Professional",
            "sub": "1.2B members",
            "goal": "Keep up with the people I have worked with, and be found by the right ones.",
            "journeys": [
              {
                "id": "j-connect",
                "label": "Connect with someone I met",
                "sub": "view 17"
              },
              {
                "label": "Catch up on my feed",
                "sub": "view 14"
              },
              {
                "label": "Message a connection",
                "sub": "view 18"
              }
            ]
          },
          {
            "id": "a-creator",
            "label": "Creator",
            "sub": "assumed 8M posts / day",
            "goal": "Publish something useful and watch it reach the people who care about it.",
            "journeys": [
              {
                "id": "j-post",
                "label": "Publish a post with video",
                "sub": "view 05"
              },
              {
                "label": "Reply to comments"
              },
              {
                "label": "Read post analytics"
              }
            ]
          }
        ]
      },
      {
        "title": "Hirers and buyers",
        "kind": "lane",
        "actors": [
          {
            "id": "a-rec",
            "label": "Recruiter",
            "sub": "paid seat",
            "goal": "Find qualified people who are open to a move, and get a reply from them.",
            "journeys": [
              {
                "id": "j-recruit",
                "label": "Search and reach out",
                "sub": "view 06"
              },
              {
                "label": "Manage a shortlist"
              }
            ]
          },
          {
            "id": "a-emp",
            "label": "Employer admin",
            "sub": "company page",
            "goal": "Post a job and represent my company without buying a recruiter seat.",
            "journeys": [
              {
                "label": "Post and close a job"
              },
              {
                "label": "Review applicants"
              },
              {
                "label": "Publish a company update"
              }
            ]
          },
          {
            "id": "a-adv",
            "label": "Advertiser",
            "sub": "via the Ads platform",
            "goal": "Put a sponsored post in front of a precise audience and pay only for delivery.",
            "journeys": [
              {
                "label": "Run a sponsored campaign"
              }
            ]
          }
        ]
      },
      {
        "title": "The people who run it",
        "kind": "onprem",
        "actors": [
          {
            "id": "a-ts",
            "label": "Trust & Safety reviewer",
            "sub": "24x7 queues",
            "goal": "Decide the worst content first, and have every decision stand up on appeal.",
            "journeys": [
              {
                "label": "Work the review queue",
                "sub": "view 30"
              },
              {
                "label": "Take down a fake-account ring"
              }
            ]
          },
          {
            "id": "a-sre",
            "label": "On-call SRE",
            "sub": "per service, 24x7",
            "goal": "See which colo or dependency is hurting members before members notice.",
            "journeys": [
              {
                "label": "Shift traffic out of a colo",
                "sub": "view 22"
              },
              {
                "label": "Triage an SLO burn",
                "sub": "view 24"
              }
            ]
          },
          {
            "id": "a-mle",
            "label": "Relevance engineer",
            "sub": "feed, search, jobs",
            "goal": "Ship a better ranking model safely, behind a ramp I can reverse.",
            "journeys": [
              {
                "label": "Ramp a model in an A/B test",
                "sub": "view 25"
              }
            ]
          }
        ]
      },
      {
        "title": "Machines and partners",
        "kind": "cloud",
        "actors": [
          {
            "id": "a-fan",
            "label": "Fan-out workers",
            "kind": "platform",
            "sub": "Samza · nearline",
            "goal": "Put a new post into every normal follower's inbox within seconds.",
            "journeys": [
              {
                "label": "Fan out a post",
                "sub": "view 15"
              }
            ],
            "icon": "fa5_stream"
          },
          {
            "id": "a-push",
            "label": "Offline push jobs",
            "kind": "platform",
            "sub": "Spark · daily",
            "goal": "Land fresh recommendations in Venice before members wake up.",
            "journeys": [
              {
                "label": "Push derived data",
                "sub": "view 11"
              }
            ],
            "icon": "spark"
          },
          {
            "id": "a-tpa",
            "label": "Third-party app",
            "kind": "external",
            "sub": "OAuth client",
            "goal": "Sign members in with LinkedIn and read only what they consented to.",
            "journeys": [
              {
                "label": "Sign in with LinkedIn",
                "sub": "view 28"
              }
            ],
            "icon": "fa5_handshake"
          }
        ]
      }
    ],
    "note": "Member count is LinkedIn's published figure; every other volume is a planning assumption.",
    "meta": {
      "v": "1.0",
      "owner": "Product + Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "04-journey-job-seeker",
    "title": "User Journey — Job Seeker, Search to Status",
    "layout": "journey",
    "actor": {
      "label": "Job seeker",
      "sub": "mobile-first, actively looking",
      "goal": "Apply to a role that fits in minutes, not an evening",
      "trigger": "A job alert, or a bad week at the current job",
      "success": "Knows, without asking, where each application stands"
    },
    "phases": [
      {
        "title": "Look",
        "sub": "search + alerts"
      },
      {
        "title": "Decide"
      },
      {
        "title": "Apply",
        "moment": true
      },
      {
        "title": "Wait",
        "sub": "days to weeks"
      },
      {
        "title": "Hear back",
        "moment": true
      }
    ],
    "lanes": [
      {
        "title": "What they do",
        "kind": "step",
        "cells": [
          [
            {
              "label": "Searches a role"
            },
            {
              "label": "Opens a job alert"
            }
          ],
          [
            {
              "label": "Reads the listing"
            },
            {
              "label": "Sees who they know"
            }
          ],
          [
            {
              "label": "Taps Easy Apply"
            },
            {
              "label": "Attaches a resume"
            }
          ],
          [
            {
              "label": "Checks My Jobs"
            }
          ],
          [
            {
              "label": "Reads the update"
            }
          ]
        ]
      },
      {
        "title": "Where",
        "kind": "touch",
        "cells": [
          [
            {
              "label": "Jobs search",
              "sub": "app + web",
              "icon": "fa5_search"
            }
          ],
          [
            {
              "label": "Job page"
            }
          ],
          [
            {
              "label": "Apply sheet"
            }
          ],
          [
            {
              "label": "My Jobs"
            }
          ],
          [
            {
              "label": "Push · email"
            }
          ]
        ]
      },
      {
        "title": "How it feels",
        "kind": "emotion",
        "levels": [
          "Hopeful",
          "Neutral",
          "Anxious"
        ],
        "points": [
          1,
          2,
          1,
          0,
          2
        ]
      },
      {
        "title": "Behind the glass",
        "kind": "system",
        "cells": [
          [
            {
              "label": "Galene jobs vertical",
              "icon": "fa5_search"
            },
            {
              "label": "Job recs · Venice",
              "icon": "fa5_cubes"
            }
          ],
          [
            {
              "label": "Jobs service",
              "icon": "fa5_briefcase"
            },
            {
              "label": "Graph: who you know"
            }
          ],
          [
            {
              "label": "Applications · MySQL",
              "icon": "fa5_clipboard_list"
            },
            {
              "label": "Ambry resume",
              "icon": "fa5_archive"
            }
          ],
          [
            {
              "label": "Status events"
            }
          ],
          [
            {
              "label": "ATC notifications",
              "icon": "fa5_traffic_light"
            }
          ]
        ]
      },
      {
        "title": "Where it hurts",
        "kind": "pain",
        "cells": [
          [
            {
              "label": "Closed jobs still listed"
            }
          ],
          [],
          [
            {
              "label": "Double submit on retry"
            }
          ],
          [
            {
              "label": "Silence after applying"
            }
          ],
          []
        ]
      },
      {
        "title": "What would fix it",
        "kind": "gain",
        "cells": [
          [
            {
              "label": "De-index on close"
            }
          ],
          [
            {
              "label": "Warm intro via graph"
            }
          ],
          [
            {
              "label": "Idempotency key"
            }
          ],
          [
            {
              "label": "Status pushed on change"
            }
          ],
          []
        ]
      },
      {
        "title": "How we know",
        "kind": "metric",
        "cells": [
          [
            {
              "label": "Search p95 ≤ 300 ms"
            }
          ],
          [
            {
              "label": "Save rate"
            }
          ],
          [
            {
              "label": "Apply success 99.95%"
            }
          ],
          [
            {
              "label": "Time to first status"
            }
          ],
          [
            {
              "label": "Reply within 14 days"
            }
          ]
        ]
      }
    ],
    "note": "The trough is the wait: an application with no status is a structural gap, not a UX one.",
    "meta": {
      "v": "1.0",
      "owner": "Product + Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "05-journey-creator",
    "title": "User Journey — Creator, Draft to Reach",
    "layout": "journey",
    "actor": {
      "label": "Creator",
      "sub": "posts weekly, often with video",
      "goal": "Share a short video and see it land with my network",
      "trigger": "Something worth saying, usually on the move",
      "success": "Real reactions in the first hour, and numbers to learn from"
    },
    "phases": [
      {
        "title": "Draft"
      },
      {
        "title": "Publish",
        "moment": true
      },
      {
        "title": "First hour",
        "moment": true
      },
      {
        "title": "Engage"
      },
      {
        "title": "Measure"
      }
    ],
    "lanes": [
      {
        "title": "What they do",
        "kind": "step",
        "cells": [
          [
            {
              "label": "Writes, adds a video"
            }
          ],
          [
            {
              "label": "Taps Post"
            }
          ],
          [
            {
              "label": "Watches for reactions"
            }
          ],
          [
            {
              "label": "Replies to comments"
            }
          ],
          [
            {
              "label": "Opens analytics"
            }
          ]
        ]
      },
      {
        "title": "Where",
        "kind": "touch",
        "cells": [
          [
            {
              "label": "Composer",
              "icon": "fa5_mobile_alt"
            }
          ],
          [
            {
              "label": "Composer",
              "icon": "fa5_mobile_alt"
            }
          ],
          [
            {
              "label": "Feed",
              "icon": "fa5_rss"
            }
          ],
          [
            {
              "label": "Notifications",
              "icon": "fa5_bell"
            }
          ],
          [
            {
              "label": "Post analytics"
            }
          ]
        ]
      },
      {
        "title": "How it feels",
        "kind": "emotion",
        "levels": [
          "Proud",
          "Fine",
          "Deflated"
        ],
        "points": [
          1,
          1,
          0,
          2,
          1
        ]
      },
      {
        "title": "Behind the glass",
        "kind": "system",
        "cells": [
          [
            {
              "label": "Media upload · Ambry",
              "icon": "fa5_archive"
            }
          ],
          [
            {
              "label": "Content service",
              "icon": "fa5_newspaper"
            },
            {
              "label": "Espresso",
              "icon": "fa5_database"
            }
          ],
          [
            {
              "label": "Fan-out · Samza",
              "icon": "fa5_stream"
            },
            {
              "label": "FollowFeed",
              "icon": "fa5_rss"
            }
          ],
          [
            {
              "label": "Comments"
            },
            {
              "label": "ATC",
              "icon": "fa5_traffic_light"
            }
          ],
          [
            {
              "label": "Pinot",
              "icon": "fa5_chart_bar"
            }
          ]
        ]
      },
      {
        "title": "Where it hurts",
        "kind": "pain",
        "cells": [
          [
            {
              "label": "Upload dies on bad wifi"
            }
          ],
          [
            {
              "label": "Stuck on processing"
            }
          ],
          [
            {
              "label": "Reach looks like zero"
            }
          ],
          [
            {
              "label": "Notification flood"
            }
          ],
          [
            {
              "label": "Numbers a day late"
            }
          ]
        ]
      },
      {
        "title": "What would fix it",
        "kind": "gain",
        "cells": [
          [
            {
              "label": "Resumable signed upload"
            }
          ],
          [
            {
              "label": "Text live, media later"
            }
          ],
          [
            {
              "label": "Early signals in seconds"
            }
          ],
          [
            {
              "label": "Aggregated alerts"
            }
          ],
          [
            {
              "label": "Real-time analytics"
            }
          ]
        ]
      },
      {
        "title": "How we know",
        "kind": "metric",
        "cells": [
          [
            {
              "label": "Upload success"
            }
          ],
          [
            {
              "label": "Post p95 ≤ 300 ms"
            }
          ],
          [
            {
              "label": "Time to first view"
            }
          ],
          [
            {
              "label": "Reply rate",
              "icon": "fa5_chart_line"
            }
          ],
          [
            {
              "label": "Analytics freshness"
            }
          ]
        ]
      }
    ],
    "note": "The first hour is the trough: the ranker learns from early engagement a post cannot get while it is invisible.",
    "meta": {
      "v": "1.0",
      "owner": "Product + Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "06-journey-recruiter",
    "title": "User Journey — Recruiter, Search to First Reply",
    "layout": "journey",
    "actor": {
      "label": "Recruiter",
      "sub": "agency or in-house, paid seat",
      "goal": "Fill a hard-to-fill role from people who will answer",
      "trigger": "A new requisition with a deadline",
      "success": "A shortlist of interested, qualified people in a week"
    },
    "phases": [
      {
        "title": "Define"
      },
      {
        "title": "Search"
      },
      {
        "title": "Shortlist"
      },
      {
        "title": "Reach out",
        "moment": true
      },
      {
        "title": "Get a reply",
        "moment": true
      }
    ],
    "lanes": [
      {
        "title": "What they do",
        "kind": "step",
        "cells": [
          [
            {
              "label": "Sets title, skills, place"
            }
          ],
          [
            {
              "label": "Runs the search"
            }
          ],
          [
            {
              "label": "Saves 20 profiles"
            }
          ],
          [
            {
              "label": "Sends InMail"
            }
          ],
          [
            {
              "label": "Waits for answers"
            }
          ]
        ]
      },
      {
        "title": "Where",
        "kind": "touch",
        "cells": [
          [
            {
              "label": "Recruiter app"
            }
          ],
          [
            {
              "label": "Recruiter search"
            }
          ],
          [
            {
              "label": "Project pipeline"
            }
          ],
          [
            {
              "label": "InMail composer"
            }
          ],
          [
            {
              "label": "Inbox",
              "icon": "fa5_inbox"
            }
          ]
        ]
      },
      {
        "title": "How it feels",
        "kind": "emotion",
        "levels": [
          "Confident",
          "Neutral",
          "Frustrated"
        ],
        "points": [
          1,
          2,
          1,
          1,
          0
        ]
      },
      {
        "title": "Behind the glass",
        "kind": "system",
        "cells": [
          [
            {
              "label": "Query builder"
            }
          ],
          [
            {
              "label": "Galene people",
              "icon": "fa5_search"
            },
            {
              "label": "Privacy filter",
              "icon": "fa5_user_lock"
            }
          ],
          [
            {
              "label": "Projects · MySQL",
              "icon": "fa5_clipboard_list"
            }
          ],
          [
            {
              "label": "Messaging",
              "icon": "fa5_comments"
            },
            {
              "label": "Credits · MySQL",
              "icon": "fa5_coins"
            }
          ],
          [
            {
              "label": "Messaging",
              "icon": "fa5_comments"
            },
            {
              "label": "ATC",
              "icon": "fa5_traffic_light"
            }
          ]
        ]
      },
      {
        "title": "Where it hurts",
        "kind": "pain",
        "cells": [
          [
            {
              "label": "Skills named ten ways"
            }
          ],
          [
            {
              "label": "Hidden profiles leak"
            }
          ],
          [
            {
              "label": "Duplicates across seats"
            }
          ],
          [
            {
              "label": "Credit spent on a block"
            }
          ],
          [
            {
              "label": "Most InMails ignored"
            }
          ]
        ]
      },
      {
        "title": "What would fix it",
        "kind": "gain",
        "cells": [
          [
            {
              "label": "Standardised skills"
            }
          ],
          [
            {
              "label": "Filter at index + query"
            }
          ],
          [
            {
              "label": "Shared team pipeline"
            }
          ],
          [
            {
              "label": "Check block before debit"
            }
          ],
          [
            {
              "label": "Rank by open to work"
            }
          ]
        ]
      },
      {
        "title": "How we know",
        "kind": "metric",
        "cells": [
          [
            {
              "label": "Query refinements"
            }
          ],
          [
            {
              "label": "Search p95 ≤ 300 ms"
            }
          ],
          [
            {
              "label": "Saved per search"
            }
          ],
          [
            {
              "label": "Credits refunded"
            }
          ],
          [
            {
              "label": "InMail response rate"
            }
          ]
        ]
      }
    ],
    "note": "The reply is the trough, and the fix is a ranking signal, open to work, that privacy rules must let through.",
    "meta": {
      "v": "1.0",
      "owner": "Product + Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "07-layered-architecture",
    "title": "LinkedIn — Layered Architecture",
    "layout": "bands",
    "layerHeaderWidth": 150,
    "bands": [
      {
        "name": "Experience",
        "nodes": [
          {
            "id": "l-web",
            "label": "Web client",
            "kind": "app",
            "icon": "fa5_desktop"
          },
          {
            "id": "l-mob",
            "label": "iOS / Android",
            "kind": "app",
            "icon": "fa5_mobile_alt"
          },
          {
            "id": "l-prt",
            "label": "Partner apps",
            "kind": "external",
            "icon": "fa5_handshake"
          }
        ]
      },
      {
        "name": "Edge and API",
        "nodes": [
          {
            "id": "l-afd",
            "label": "Azure Front Door",
            "kind": "integration",
            "icon": "azure_frontdoor"
          },
          {
            "id": "l-ats",
            "label": "Traffic tier",
            "kind": "integration",
            "sub": "ATS",
            "icon": "fa5_route"
          },
          {
            "id": "l-api",
            "label": "API layer",
            "kind": "integration",
            "sub": "GraphQL",
            "icon": "fa5_plug"
          },
          {
            "id": "l-id",
            "label": "Identity",
            "kind": "security",
            "icon": "fa5_user_shield"
          }
        ]
      },
      {
        "name": "Domain services",
        "nodes": [
          {
            "id": "l-prof",
            "label": "Profile",
            "kind": "app",
            "icon": "fa5_id_card"
          },
          {
            "id": "l-graph",
            "label": "Social graph",
            "kind": "app",
            "icon": "fa5_project_diagram"
          },
          {
            "id": "l-cont",
            "label": "Content",
            "kind": "app",
            "icon": "fa5_newspaper"
          },
          {
            "id": "l-feed",
            "label": "Feed broker",
            "kind": "app",
            "icon": "fa5_rss"
          },
          {
            "id": "l-srch",
            "label": "Search",
            "kind": "app",
            "icon": "fa5_search"
          },
          {
            "id": "l-msg",
            "label": "Messaging",
            "kind": "app",
            "icon": "fa5_comments"
          },
          {
            "id": "l-jobs",
            "label": "Jobs",
            "kind": "app",
            "icon": "fa5_briefcase"
          }
        ]
      },
      {
        "name": "Derived serving",
        "nodes": [
          {
            "id": "l-cb",
            "label": "Couchbase",
            "kind": "store",
            "icon": "fa5_bolt"
          },
          {
            "id": "l-ven",
            "label": "Venice",
            "kind": "store",
            "icon": "fa5_cubes"
          },
          {
            "id": "l-liq",
            "label": "LIquid",
            "kind": "store",
            "icon": "fa5_project_diagram"
          },
          {
            "id": "l-ff",
            "label": "FollowFeed",
            "kind": "store",
            "icon": "fa5_rss"
          },
          {
            "id": "l-gal",
            "label": "Galene",
            "kind": "store",
            "icon": "fa5_search"
          }
        ]
      },
      {
        "name": "Systems of record",
        "nodes": [
          {
            "id": "l-esp",
            "label": "Espresso",
            "kind": "store",
            "icon": "fa5_database"
          },
          {
            "id": "l-sql",
            "label": "MySQL",
            "kind": "store",
            "icon": "mysql"
          },
          {
            "id": "l-amb",
            "label": "Ambry",
            "kind": "store",
            "icon": "fa5_archive"
          }
        ]
      },
      {
        "name": "Streams and batch",
        "nodes": [
          {
            "id": "l-brk",
            "label": "Brooklin",
            "kind": "integration",
            "icon": "fa5_exchange_alt"
          },
          {
            "id": "l-kfk",
            "label": "Kafka",
            "kind": "queue",
            "icon": "kafka"
          },
          {
            "id": "l-smz",
            "label": "Samza",
            "kind": "app",
            "icon": "fa5_stream"
          },
          {
            "id": "l-hdp",
            "label": "Hadoop + Spark",
            "kind": "app",
            "icon": "hadoop"
          }
        ]
      },
      {
        "name": "Platform",
        "nodes": [
          {
            "id": "l-d2",
            "label": "D2 discovery",
            "kind": "platform",
            "icon": "fa5_sitemap"
          },
          {
            "id": "l-hlx",
            "label": "Helix",
            "kind": "platform",
            "icon": "fa5_cogs"
          },
          {
            "id": "l-trex",
            "label": "T-REX ramps",
            "kind": "platform",
            "icon": "fa5_flask"
          },
          {
            "id": "l-obs",
            "label": "Observability",
            "kind": "platform",
            "icon": "fa5_heartbeat"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "l-web",
        "to": "l-afd",
        "label": "HTTPS"
      },
      {
        "from": "l-api",
        "to": "l-feed",
        "label": "Rest.li"
      },
      {
        "from": "l-feed",
        "to": "l-ff",
        "label": "pull"
      },
      {
        "from": "l-prof",
        "to": "l-esp",
        "label": "write"
      },
      {
        "from": "l-esp",
        "to": "l-brk",
        "label": "change log",
        "kind": "async"
      },
      {
        "from": "l-smz",
        "to": "l-ven",
        "label": "derived push",
        "kind": "async"
      }
    ],
    "note": "One arrow points up, by design: derived data is pushed back into the serving layer.",
    "meta": {
      "v": "1.0",
      "owner": "Enterprise Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "08-container-architecture",
    "title": "LinkedIn — Container Architecture (one colo)",
    "layout": "nested",
    "canvas": {
      "width": 1760
    },
    "boxes": [
      {
        "title": "LinkedIn · one serving colo (every colo runs the same stack)",
        "kind": "boundary",
        "dir": "col",
        "children": [
          {
            "title": "Online tier · Rest.li mid-tier",
            "kind": "plain",
            "dir": "row",
            "children": [
              {
                "title": "Edge and API",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-ats",
                    "label": "Traffic tier",
                    "kind": "integration",
                    "sub": "ATS · colo pinning",
                    "icon": "fa5_route"
                  },
                  {
                    "id": "c-api",
                    "label": "API layer",
                    "kind": "integration",
                    "sub": "GraphQL · Java",
                    "icon": "fa5_plug"
                  },
                  {
                    "id": "c-id",
                    "label": "Identity",
                    "kind": "security",
                    "sub": "Rest.li",
                    "icon": "fa5_user_shield"
                  }
                ]
              },
              {
                "title": "Member services",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-prof",
                    "label": "Profile",
                    "kind": "app",
                    "sub": "Rest.li",
                    "icon": "fa5_id_card"
                  },
                  {
                    "id": "c-graph",
                    "label": "Social graph",
                    "kind": "app",
                    "sub": "Rest.li",
                    "icon": "fa5_project_diagram"
                  },
                  {
                    "id": "c-msg",
                    "label": "Messaging",
                    "kind": "app",
                    "sub": "Play · Akka · SSE",
                    "icon": "fa5_comments"
                  },
                  {
                    "id": "c-jobs",
                    "label": "Jobs",
                    "kind": "app",
                    "sub": "Rest.li",
                    "icon": "fa5_briefcase"
                  }
                ]
              },
              {
                "title": "Discovery services",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-cont",
                    "label": "Content",
                    "kind": "app",
                    "sub": "Rest.li",
                    "icon": "fa5_newspaper"
                  },
                  {
                    "id": "c-feed",
                    "label": "Feed broker",
                    "kind": "app",
                    "sub": "second-pass rank",
                    "icon": "fa5_rss"
                  },
                  {
                    "id": "c-srch",
                    "label": "Search broker",
                    "kind": "app",
                    "sub": "federated",
                    "icon": "fa5_search"
                  },
                  {
                    "id": "c-atc",
                    "label": "Notifications",
                    "kind": "app",
                    "sub": "ATC on Samza",
                    "icon": "fa5_bell"
                  }
                ]
              }
            ]
          },
          {
            "title": "Data tier",
            "kind": "plain",
            "dir": "row",
            "children": [
              {
                "title": "Systems of record",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-sql",
                    "label": "MySQL",
                    "kind": "store",
                    "sub": "sharded",
                    "icon": "mysql"
                  },
                  {
                    "id": "c-esp",
                    "label": "Espresso",
                    "kind": "store",
                    "sub": "MySQL · Helix",
                    "icon": "fa5_database"
                  },
                  {
                    "id": "c-amb",
                    "label": "Ambry",
                    "kind": "store",
                    "sub": "blobs",
                    "icon": "fa5_archive"
                  }
                ]
              },
              {
                "title": "Derived serving",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-ff",
                    "label": "FollowFeed",
                    "kind": "store",
                    "sub": "actor timelines",
                    "icon": "fa5_rss"
                  },
                  {
                    "id": "c-ven",
                    "label": "Venice",
                    "kind": "store",
                    "sub": "derived KV",
                    "icon": "fa5_cubes"
                  },
                  {
                    "id": "c-liq",
                    "label": "LIquid",
                    "kind": "store",
                    "sub": "graph",
                    "icon": "fa5_project_diagram"
                  },
                  {
                    "id": "c-gal",
                    "label": "Galene",
                    "kind": "store",
                    "sub": "search index",
                    "icon": "fa5_search"
                  },
                  {
                    "id": "c-cb",
                    "label": "Couchbase",
                    "kind": "store",
                    "sub": "cache",
                    "icon": "fa5_bolt"
                  }
                ]
              },
              {
                "title": "Streams",
                "kind": "boundary",
                "nodes": [
                  {
                    "id": "c-brk",
                    "label": "Brooklin",
                    "kind": "integration",
                    "sub": "CDC",
                    "icon": "fa5_exchange_alt"
                  },
                  {
                    "id": "c-kfk",
                    "label": "Kafka",
                    "kind": "queue",
                    "sub": "local + aggregate",
                    "icon": "kafka"
                  },
                  {
                    "id": "c-smz",
                    "label": "Samza",
                    "kind": "app",
                    "sub": "nearline",
                    "icon": "fa5_stream"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "outside": [
      {
        "id": "c-afd",
        "label": "Azure Front Door",
        "kind": "integration",
        "sub": "global edge",
        "icon": "azure_frontdoor"
      },
      {
        "id": "c-push",
        "label": "APNs / FCM",
        "kind": "external",
        "icon": "fa5_paper_plane"
      },
      {
        "id": "c-ofl",
        "label": "Offline platform",
        "kind": "app",
        "sub": "HDFS · Spark",
        "icon": "hadoop"
      }
    ],
    "edges": [
      {
        "from": "c-ats",
        "to": "c-api",
        "label": "HTTPS"
      },
      {
        "from": "c-api",
        "to": "c-id",
        "label": "session"
      },
      {
        "from": "c-feed",
        "to": "c-ff",
        "label": "pull"
      },
      {
        "from": "c-prof",
        "to": "c-esp",
        "label": "Rest.li write"
      },
      {
        "from": "c-esp",
        "to": "c-brk",
        "label": "change log",
        "kind": "async"
      },
      {
        "from": "c-brk",
        "to": "c-kfk",
        "kind": "async"
      },
      {
        "from": "c-kfk",
        "to": "c-smz",
        "kind": "async"
      },
      {
        "from": "c-atc",
        "to": "c-push",
        "label": "push",
        "kind": "async"
      }
    ],
    "note": "Edges are representative, not exhaustive; every service talks Rest.li over D2 inside the colo.",
    "meta": {
      "v": "1.0",
      "owner": "Platform Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "09-integration-catalogue",
    "title": "LinkedIn — Integration Catalogue",
    "layout": "hub",
    "canvas": {
      "width": 1800
    },
    "left": {
      "title": "Who calls us",
      "nodes": [
        {
          "id": "i-web",
          "label": "Web client",
          "kind": "app",
          "rel": "GraphQL",
          "icon": "fa5_desktop"
        },
        {
          "id": "i-mob",
          "label": "iOS / Android",
          "kind": "app",
          "rel": "GraphQL",
          "icon": "fa5_mobile_alt"
        },
        {
          "id": "i-prt",
          "label": "Partner apps",
          "kind": "external",
          "rel": "OAuth REST",
          "icon": "fa5_handshake"
        },
        {
          "id": "i-ats",
          "label": "ATS partners",
          "kind": "external",
          "rel": "hourly feed",
          "kind2": "batch",
          "icon": "fa5_briefcase"
        },
        {
          "id": "i-sso",
          "label": "Enterprise SSO",
          "kind": "external",
          "rel": "SAML",
          "icon": "fa5_key"
        }
      ]
    },
    "centre": {
      "title": "Platform",
      "nodes": [
        {
          "id": "i-core",
          "label": "LinkedIn Platform",
          "kind": "app",
          "sub": "versioned APIs only",
          "icon": "di2_linkedin"
        }
      ]
    },
    "right": {
      "title": "What we call",
      "nodes": [
        {
          "id": "i-push",
          "label": "Delivery providers",
          "kind": "external",
          "sub": "APNs · FCM · email · SMS",
          "rel": "on event",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_paper_plane"
        },
        {
          "id": "i-idp",
          "label": "Google / Apple",
          "kind": "external",
          "rel": "OIDC",
          "dir": "out",
          "icon": "fa5_user_check"
        },
        {
          "id": "i-rep",
          "label": "URL reputation",
          "kind": "external",
          "rel": "per link",
          "dir": "out",
          "icon": "fa5_shield_alt"
        },
        {
          "id": "i-pay",
          "label": "Payments",
          "kind": "external",
          "rel": "on purchase",
          "dir": "out",
          "icon": "fa5_credit_card"
        },
        {
          "id": "i-ads",
          "label": "Ads platform",
          "kind": "external",
          "rel": "per page",
          "dir": "out",
          "icon": "fa5_ad"
        }
      ]
    },
    "note": "Kafka topics are never exposed to partners; every external contract is a versioned API.",
    "meta": {
      "v": "1.0",
      "owner": "Integration Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "10-data-architecture-zones",
    "title": "LinkedIn — Data Architecture and Ownership",
    "layout": "nested",
    "canvas": {
      "width": 1760
    },
    "boxes": [
      {
        "title": "Systems of record · replicated and backed up, never rebuilt",
        "kind": "boundary",
        "dir": "row",
        "children": [
          {
            "title": "Espresso",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-prof",
                "label": "Profiles",
                "kind": "store",
                "sub": "member URN key",
                "icon": "fa5_id_card"
              },
              {
                "id": "z-post",
                "label": "Posts + comments",
                "kind": "store",
                "sub": "author key",
                "icon": "fa5_newspaper"
              },
              {
                "id": "z-edge",
                "label": "Connections",
                "kind": "store",
                "sub": "canonical pair key",
                "icon": "fa5_user_friends"
              },
              {
                "id": "z-conv",
                "label": "Conversations",
                "kind": "store",
                "sub": "conversation key",
                "icon": "fa5_comments"
              }
            ]
          },
          {
            "title": "MySQL",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-cred",
                "label": "Credentials",
                "kind": "store",
                "sub": "adaptive hashes",
                "icon": "fa5_key"
              },
              {
                "id": "z-appl",
                "label": "Applications",
                "kind": "store",
                "sub": "idempotent writes",
                "icon": "fa5_clipboard_list"
              },
              {
                "id": "z-bill",
                "label": "Credits + billing",
                "kind": "store",
                "sub": "ledger",
                "icon": "fa5_coins"
              }
            ]
          },
          {
            "title": "Ambry",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-blob",
                "label": "Media originals",
                "kind": "store",
                "sub": "immutable blobs",
                "icon": "fa5_archive"
              }
            ]
          }
        ]
      },
      {
        "title": "Derived online · rebuildable from the log or the lake",
        "kind": "boundary",
        "dir": "row",
        "children": [
          {
            "title": "Graph and search",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-liq",
                "label": "LIquid",
                "kind": "store",
                "sub": "270B edges",
                "icon": "fa5_project_diagram"
              },
              {
                "id": "z-gal",
                "label": "Galene",
                "kind": "store",
                "sub": "base + live index",
                "icon": "fa5_search"
              }
            ]
          },
          {
            "title": "Feed",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-ff",
                "label": "FollowFeed",
                "kind": "store",
                "sub": "actor timelines",
                "icon": "fa5_rss"
              },
              {
                "id": "z-inb",
                "label": "Feed inboxes",
                "kind": "store",
                "sub": "Venice hybrid",
                "icon": "fa5_inbox"
              }
            ]
          },
          {
            "title": "Serving",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-ven",
                "label": "Venice",
                "kind": "store",
                "sub": "recs · features",
                "icon": "fa5_cubes"
              },
              {
                "id": "z-cb",
                "label": "Couchbase",
                "kind": "store",
                "sub": "cache · TTL",
                "icon": "fa5_bolt"
              },
              {
                "id": "z-pin",
                "label": "Pinot",
                "kind": "store",
                "sub": "member analytics",
                "icon": "fa5_chart_bar"
              }
            ]
          }
        ]
      },
      {
        "title": "Log and lake · the replay source for everything above",
        "kind": "boundary",
        "dir": "row",
        "children": [
          {
            "title": "Log",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-kfk",
                "label": "Kafka",
                "kind": "queue",
                "sub": "7 days + compacted",
                "icon": "kafka"
              }
            ]
          },
          {
            "title": "Lake",
            "kind": "plain",
            "nodes": [
              {
                "id": "z-hdfs",
                "label": "HDFS + Iceberg",
                "kind": "store",
                "sub": "OpenHouse tables",
                "icon": "hadoop"
              },
              {
                "id": "z-feat",
                "label": "Feature store",
                "kind": "store",
                "sub": "Feathr",
                "icon": "fa5_cubes"
              }
            ]
          }
        ]
      }
    ],
    "outside": [
      {
        "id": "z-dh",
        "label": "DataHub",
        "kind": "platform",
        "sub": "lineage · ownership",
        "icon": "fa5_sitemap"
      }
    ],
    "edges": [
      {
        "from": "z-edge",
        "to": "z-kfk",
        "label": "CDC",
        "kind": "async"
      },
      {
        "from": "z-kfk",
        "to": "z-hdfs",
        "label": "Gobblin",
        "kind": "batch"
      }
    ],
    "note": "Anything in the middle boundary can be rebuilt; only the top boundary needs backups.",
    "meta": {
      "v": "1.0",
      "owner": "Data Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "11-online-nearline-offline",
    "title": "Data Flow — Online, Nearline, Offline",
    "layout": "swimlane",
    "laneHeaderWidth": 150,
    "stages": [
      "Capture",
      "Transport",
      "Compute",
      "Serve"
    ],
    "lanes": [
      {
        "title": "Online · milliseconds",
        "cells": [
          [
            {
              "id": "o1",
              "label": "Rest.li request",
              "kind": "integration",
              "icon": "fa5_plug"
            }
          ],
          [
            {
              "id": "o2",
              "label": "Direct call",
              "kind": "integration",
              "sub": "D2 client-side LB",
              "icon": "fa5_sitemap"
            }
          ],
          [
            {
              "id": "o3",
              "label": "In-process model",
              "kind": "app",
              "sub": "Quasar scoring",
              "icon": "fa5_brain"
            }
          ],
          [
            {
              "id": "o4",
              "label": "Response",
              "kind": "app",
              "sub": "p95 ≤ 300 ms",
              "icon": "fa5_paper_plane"
            }
          ]
        ]
      },
      {
        "title": "Nearline · seconds",
        "cells": [
          [
            {
              "id": "n1",
              "label": "Change capture",
              "kind": "integration",
              "sub": "Brooklin",
              "icon": "fa5_exchange_alt"
            }
          ],
          [
            {
              "id": "n2",
              "label": "Kafka",
              "kind": "queue",
              "sub": "tracking + changes",
              "icon": "kafka"
            }
          ],
          [
            {
              "id": "n3",
              "label": "Samza jobs",
              "kind": "app",
              "sub": "stateful",
              "icon": "fa5_stream"
            }
          ],
          [
            {
              "id": "n4",
              "label": "Venice hybrid",
              "kind": "store",
              "sub": "nearline writes",
              "icon": "fa5_cubes"
            }
          ]
        ]
      },
      {
        "title": "Offline · hours",
        "cells": [
          [
            {
              "id": "f1",
              "label": "Gobblin ingest",
              "kind": "integration",
              "icon": "fa5_cloud_upload_alt"
            }
          ],
          [
            {
              "id": "f2",
              "label": "HDFS + Iceberg",
              "kind": "store",
              "icon": "hadoop"
            }
          ],
          [
            {
              "id": "f3",
              "label": "Spark on Azkaban",
              "kind": "app",
              "sub": "daily DAGs",
              "icon": "spark"
            }
          ],
          [
            {
              "id": "f4",
              "label": "Venice push",
              "kind": "store",
              "sub": "versioned bulk swap",
              "icon": "fa5_cubes"
            }
          ]
        ]
      }
    ],
    "edges": [
      {
        "from": "n2",
        "to": "f1",
        "label": "hourly",
        "kind": "batch"
      },
      {
        "from": "n4",
        "to": "o3",
        "label": "features",
        "kind": "sync"
      }
    ],
    "note": "Same data, three speeds: the online tier never computes what nearline or offline can precompute.",
    "meta": {
      "v": "1.0",
      "owner": "Data Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "12-event-backbone",
    "title": "LinkedIn — Event Backbone",
    "layout": "hub",
    "canvas": {
      "width": 1800
    },
    "left": {
      "title": "Publishers · event · partition key on the arrow",
      "nodes": [
        {
          "id": "e-prof",
          "label": "Identity + Profile",
          "kind": "app",
          "sub": "UserCreated · ProfileUpdated",
          "rel": "member",
          "kind2": "async",
          "icon": "fa5_id_card"
        },
        {
          "id": "e-graph",
          "label": "Social graph",
          "kind": "app",
          "sub": "ConnectionCreated",
          "rel": "pair",
          "kind2": "async",
          "icon": "fa5_project_diagram"
        },
        {
          "id": "e-cont",
          "label": "Content",
          "kind": "app",
          "sub": "PostCreated · Liked",
          "rel": "author",
          "kind2": "async",
          "icon": "fa5_newspaper"
        },
        {
          "id": "e-msg",
          "label": "Messaging",
          "kind": "app",
          "sub": "MessageSent",
          "rel": "conv_id",
          "kind2": "async",
          "icon": "fa5_comments"
        },
        {
          "id": "e-jobs",
          "label": "Jobs",
          "kind": "app",
          "sub": "JobApplied",
          "rel": "job",
          "kind2": "async",
          "icon": "fa5_briefcase"
        },
        {
          "id": "e-trk",
          "label": "Tracking",
          "kind": "app",
          "sub": "views · clicks",
          "rel": "member",
          "kind2": "async",
          "icon": "fa5_chart_line"
        }
      ]
    },
    "centre": {
      "title": "The log",
      "nodes": [
        {
          "id": "e-kfk",
          "label": "Kafka",
          "kind": "queue",
          "sub": "100k+ topics · Avro",
          "icon": "kafka"
        }
      ]
    },
    "right": {
      "title": "Consumers",
      "nodes": [
        {
          "id": "e-fan",
          "label": "Feed fan-out",
          "kind": "app",
          "sub": "PostCreated",
          "rel": "lag ≤ 5 s",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_stream"
        },
        {
          "id": "e-idx",
          "label": "Search indexers",
          "kind": "app",
          "sub": "entity changes",
          "rel": "lag ≤ 10 s",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_search"
        },
        {
          "id": "e-atc",
          "label": "ATC notifications",
          "kind": "app",
          "sub": "graph · content · jobs",
          "rel": "lag ≤ 1 s",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_traffic_light"
        },
        {
          "id": "e-rec",
          "label": "Recommendations",
          "kind": "app",
          "sub": "tracking · graph",
          "rel": "minutes",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_brain"
        },
        {
          "id": "e-pin",
          "label": "Pinot",
          "kind": "store",
          "sub": "tracking",
          "rel": "lag ≤ 1 min",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_chart_bar"
        },
        {
          "id": "e-abuse",
          "label": "Anti-abuse (CASAL)",
          "kind": "security",
          "sub": "signups · posts",
          "rel": "lag ≤ 5 s",
          "dir": "out",
          "kind2": "async",
          "icon": "fa5_user_secret"
        }
      ]
    },
    "note": "No consumer is known to its publisher; adding a consumer never needs a publisher release.",
    "meta": {
      "v": "1.0",
      "owner": "Data Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "13-core-data-model",
    "title": "LinkedIn — Core Data Model",
    "layout": "er",
    "canvas": {
      "width": 1720,
      "cols": 4
    },
    "rowGap": 230,
    "entities": [
      {
        "id": "position",
        "name": "position",
        "kind": "store",
        "row": 0,
        "col": 0,
        "attrs": [
          "position_id  PK",
          "member_urn  FK",
          "company_urn  FK",
          "title, start, end"
        ]
      },
      {
        "id": "profile",
        "name": "profile",
        "kind": "store",
        "row": 0,
        "col": 1,
        "attrs": [
          "member_urn  PK, FK",
          "headline",
          "vanity_url  UNIQUE",
          "visibility settings"
        ]
      },
      {
        "id": "member",
        "name": "member",
        "kind": "store",
        "row": 0,
        "col": 2,
        "attrs": [
          "member_urn  PK",
          "status",
          "home_colo",
          "created_at"
        ]
      },
      {
        "id": "connection",
        "name": "connection",
        "kind": "store",
        "row": 0,
        "col": 3,
        "attrs": [
          "pair_key  PK (min, max)",
          "state",
          "requested_by",
          "idempotency_key"
        ]
      },
      {
        "id": "company",
        "name": "company",
        "kind": "store",
        "row": 1,
        "col": 0,
        "attrs": [
          "company_urn  PK",
          "name",
          "page_admins"
        ]
      },
      {
        "id": "follow",
        "name": "follow",
        "kind": "store",
        "row": 1,
        "col": 1,
        "attrs": [
          "follower_urn  PK",
          "followee_urn  PK",
          "followee_type"
        ]
      },
      {
        "id": "post",
        "name": "post",
        "kind": "store",
        "row": 1,
        "col": 2,
        "attrs": [
          "post_urn  PK",
          "author_urn  FK",
          "visibility",
          "media_urns[]",
          "lifecycle"
        ]
      },
      {
        "id": "reaction",
        "name": "reaction",
        "kind": "store",
        "row": 1,
        "col": 3,
        "attrs": [
          "post_urn  PK, FK",
          "actor_urn  PK",
          "type"
        ]
      },
      {
        "id": "job",
        "name": "job",
        "kind": "store",
        "row": 2,
        "col": 0,
        "attrs": [
          "job_urn  PK",
          "company_urn  FK",
          "state",
          "location, skills[]"
        ]
      },
      {
        "id": "application",
        "name": "application",
        "kind": "store",
        "row": 2,
        "col": 1,
        "attrs": [
          "application_id  PK",
          "job_urn  FK",
          "member_urn  FK",
          "idempotency_key  UQ",
          "state"
        ]
      },
      {
        "id": "comment",
        "name": "comment",
        "kind": "store",
        "row": 2,
        "col": 2,
        "attrs": [
          "comment_urn  PK",
          "post_urn  FK",
          "parent_urn  FK",
          "author_urn  FK"
        ]
      },
      {
        "id": "conversation",
        "name": "conversation",
        "kind": "store",
        "row": 2,
        "col": 3,
        "attrs": [
          "conversation_urn  PK",
          "participant_urns[]",
          "last_seq"
        ]
      },
      {
        "id": "message",
        "name": "message",
        "kind": "store",
        "row": 3,
        "col": 3,
        "attrs": [
          "conversation_urn  PK",
          "seq  PK",
          "sender_urn",
          "client_msg_id  UQ"
        ]
      }
    ],
    "relations": [
      {
        "from": "member",
        "to": "profile",
        "label": "1 : 1",
        "from_side": "w",
        "to_side": "e"
      },
      {
        "from": "profile",
        "to": "position",
        "label": "1 : N",
        "from_side": "w",
        "to_side": "e"
      },
      {
        "from": "company",
        "to": "position",
        "label": "1 : N",
        "from_side": "n",
        "to_side": "s"
      },
      {
        "from": "member",
        "to": "connection",
        "label": "1 : N",
        "from_side": "e",
        "to_side": "w"
      },
      {
        "from": "member",
        "to": "post",
        "label": "1 : N",
        "from_side": "s",
        "to_side": "n"
      },
      {
        "from": "post",
        "to": "reaction",
        "label": "1 : N",
        "from_side": "e",
        "to_side": "w"
      },
      {
        "from": "post",
        "to": "comment",
        "label": "1 : N",
        "from_side": "s",
        "to_side": "n"
      },
      {
        "from": "company",
        "to": "follow",
        "label": "1 : N",
        "from_side": "e",
        "to_side": "w"
      },
      {
        "from": "company",
        "to": "job",
        "label": "1 : N",
        "from_side": "s",
        "to_side": "n"
      },
      {
        "from": "job",
        "to": "application",
        "label": "1 : N",
        "from_side": "e",
        "to_side": "w"
      },
      {
        "from": "conversation",
        "to": "message",
        "label": "1 : N",
        "from_side": "s",
        "to_side": "n"
      }
    ],
    "note": "Every key is a URN. Member foreign keys on follow, reaction, comment and application are not drawn.",
    "meta": {
      "v": "1.0",
      "owner": "Data Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "14-feed-read-sequence",
    "title": "Feed Read — Critical Flow",
    "layout": "sequence",
    "lifelines": [
      {
        "id": "q-mem",
        "label": "Member app",
        "kind": "actor",
        "icon": "fa5_mobile_alt"
      },
      {
        "id": "q-api",
        "label": "API layer",
        "kind": "integration",
        "icon": "fa5_plug"
      },
      {
        "id": "q-brk",
        "label": "Feed broker",
        "kind": "app",
        "icon": "fa5_rss"
      },
      {
        "id": "q-inb",
        "label": "Feed inbox",
        "kind": "store",
        "icon": "fa5_inbox"
      },
      {
        "id": "q-ff",
        "label": "FollowFeed",
        "kind": "app",
        "icon": "fa5_rss"
      },
      {
        "id": "q-cand",
        "label": "Recs + ads",
        "kind": "app",
        "icon": "fa5_brain"
      },
      {
        "id": "q-feat",
        "label": "Features",
        "kind": "store",
        "icon": "fa5_cubes"
      },
      {
        "id": "q-cont",
        "label": "Content",
        "kind": "app",
        "icon": "fa5_newspaper"
      }
    ],
    "messages": [
      {
        "from": "q-mem",
        "to": "q-api",
        "label": "GET /v1/feed?cursor",
        "kind": "call"
      },
      {
        "from": "q-api",
        "to": "q-api",
        "label": "session to member context",
        "kind": "self"
      },
      {
        "from": "q-api",
        "to": "q-brk",
        "label": "feed page for member",
        "kind": "call"
      },
      {
        "from": "q-brk",
        "to": "q-inb",
        "label": "inbox entries",
        "kind": "call"
      },
      {
        "from": "q-brk",
        "to": "q-ff",
        "label": "high-degree timelines",
        "kind": "call"
      },
      {
        "from": "q-ff",
        "to": "q-brk",
        "label": "top-k per shard (FPR)",
        "kind": "return"
      },
      {
        "from": "q-brk",
        "to": "q-cand",
        "label": "recommended + ad candidates",
        "kind": "call"
      },
      {
        "from": "q-cand",
        "to": "q-brk",
        "label": "timeout: drop, not fail",
        "kind": "error"
      },
      {
        "from": "q-brk",
        "to": "q-feat",
        "label": "member + item features",
        "kind": "call"
      },
      {
        "from": "q-brk",
        "to": "q-brk",
        "label": "second-pass rank",
        "kind": "self"
      },
      {
        "from": "q-brk",
        "to": "q-brk",
        "label": "dedupe · diversity · ad slots",
        "kind": "self"
      },
      {
        "from": "q-brk",
        "to": "q-cont",
        "label": "decorate URNs",
        "kind": "call"
      },
      {
        "from": "q-cont",
        "to": "q-brk",
        "label": "hydrated, privacy-checked",
        "kind": "return"
      },
      {
        "from": "q-brk",
        "to": "q-api",
        "label": "ranked page + cursor",
        "kind": "return"
      },
      {
        "from": "q-api",
        "to": "q-mem",
        "label": "200 · p95 ≤ 300 ms",
        "kind": "return"
      }
    ],
    "note": "Inbox and feature returns are omitted; every call carries its own deadline inside the 300 ms budget.",
    "meta": {
      "v": "1.0",
      "owner": "Feed Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "15-hybrid-fan-out",
    "title": "Post Distribution — Hybrid Fan-out",
    "layout": "swimlane",
    "laneHeaderWidth": 150,
    "stages": [
      "Publish",
      "Classify",
      "Distribute",
      "Store",
      "Read"
    ],
    "lanes": [
      {
        "title": "Normal author",
        "cells": [
          [
            {
              "id": "p1",
              "label": "PostCreated",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "p2",
              "label": "Degree under 10k",
              "kind": "decision"
            }
          ],
          [
            {
              "id": "p3",
              "label": "Samza fan-out",
              "kind": "app",
              "sub": "write per follower",
              "icon": "fa5_stream"
            }
          ],
          [
            {
              "id": "p4",
              "label": "Follower inboxes",
              "kind": "store",
              "sub": "Venice hybrid",
              "icon": "fa5_inbox"
            }
          ],
          [
            {
              "id": "p5",
              "label": "Inbox read",
              "kind": "app",
              "sub": "one key lookup",
              "icon": "fa5_inbox"
            }
          ]
        ]
      },
      {
        "title": "High-degree author",
        "cells": [
          [
            {
              "id": "p6",
              "label": "PostCreated",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "p7",
              "label": "Degree ≥ 10k",
              "kind": "decision"
            }
          ],
          [
            {
              "id": "p8",
              "label": "Index only",
              "kind": "app",
              "sub": "no fan-out"
            }
          ],
          [
            {
              "id": "p9",
              "label": "FollowFeed",
              "kind": "store",
              "sub": "actor timeline",
              "icon": "fa5_rss"
            }
          ],
          [
            {
              "id": "p10",
              "label": "Pulled at read",
              "kind": "app",
              "sub": "merged by broker"
            }
          ]
        ]
      },
      {
        "title": "Recommended",
        "cells": [
          [
            {
              "id": "p11",
              "label": "Engagement events",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "p12",
              "label": "Quality + policy",
              "kind": "decision"
            }
          ],
          [
            {
              "id": "p13",
              "label": "Embedding retrieval",
              "kind": "app",
              "icon": "fa5_brain"
            }
          ],
          [
            {
              "id": "p14",
              "label": "Candidate store",
              "kind": "store",
              "sub": "Venice",
              "icon": "fa5_cubes"
            }
          ],
          [
            {
              "id": "p15",
              "label": "Blended",
              "kind": "app",
              "sub": "capped share"
            }
          ]
        ]
      },
      {
        "title": "Sponsored",
        "cells": [
          [
            {
              "id": "p16",
              "label": "Campaign live",
              "kind": "external",
              "icon": "fa5_ad"
            }
          ],
          [
            {
              "id": "p17",
              "label": "Targeting match",
              "kind": "decision"
            }
          ],
          [
            {
              "id": "p18",
              "label": "Ads platform",
              "kind": "external",
              "sub": "auction per page",
              "icon": "fa5_ad"
            }
          ],
          [],
          [
            {
              "id": "p19",
              "label": "Ad slots",
              "kind": "app",
              "sub": "policy positions",
              "icon": "fa5_ad"
            }
          ]
        ]
      }
    ],
    "note": "The 10k threshold is a tunable, set where fan-out write cost overtakes read-time merge cost.",
    "meta": {
      "v": "1.0",
      "owner": "Feed Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "16-feed-ranking-pipeline",
    "title": "Feed Ranking Pipeline",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Candidates",
        "nodes": [
          {
            "id": "r-inb",
            "label": "Inbox",
            "kind": "store",
            "sub": "fan-out on write",
            "icon": "fa5_inbox"
          },
          {
            "id": "r-ff",
            "label": "FollowFeed",
            "kind": "store",
            "sub": "first-pass ranked",
            "icon": "fa5_rss"
          },
          {
            "id": "r-rec",
            "label": "Recommended",
            "kind": "app",
            "icon": "fa5_brain"
          },
          {
            "id": "r-ads",
            "label": "Sponsored",
            "kind": "external",
            "icon": "fa5_ad"
          }
        ]
      },
      {
        "title": "Filter",
        "nodes": [
          {
            "id": "r-priv",
            "label": "Privacy + blocks",
            "kind": "security",
            "icon": "fa5_user_lock"
          },
          {
            "id": "r-mod",
            "label": "Moderation state",
            "kind": "security",
            "icon": "fa5_gavel"
          },
          {
            "id": "r-seen",
            "label": "Seen dedupe",
            "kind": "app",
            "icon": "fa5_filter"
          }
        ]
      },
      {
        "title": "Score",
        "nodes": [
          {
            "id": "r-feat",
            "label": "Features",
            "kind": "store",
            "sub": "Venice · Feathr",
            "icon": "fa5_cubes"
          },
          {
            "id": "r-spr",
            "label": "Second-pass ranker",
            "kind": "app",
            "sub": "Quasar model",
            "icon": "fa5_sort_amount_down"
          },
          {
            "id": "r-chr",
            "label": "Chronological",
            "kind": "app",
            "sub": "degraded mode",
            "icon": "fa5_history"
          }
        ]
      },
      {
        "title": "Policy",
        "nodes": [
          {
            "id": "r-div",
            "label": "Diversity rules",
            "kind": "decision",
            "icon": "fa5_random"
          },
          {
            "id": "r-slot",
            "label": "Ad slotting",
            "kind": "decision",
            "icon": "fa5_ad"
          }
        ]
      },
      {
        "title": "Serve",
        "nodes": [
          {
            "id": "r-deco",
            "label": "Decorate URNs",
            "kind": "app",
            "icon": "fa5_layer_group"
          },
          {
            "id": "r-page",
            "label": "Feed page",
            "kind": "app",
            "sub": "p95 ≤ 300 ms",
            "icon": "fa5_rss"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "r-spr",
        "to": "r-chr",
        "label": "ranker down",
        "kind": "error"
      }
    ],
    "note": "Ranking reads candidates and features; it never writes to feed storage, so either can change alone.",
    "meta": {
      "v": "1.0",
      "owner": "Feed Relevance",
      "date": "2026-09"
    }
  },
  {
    "id": "17-connection-request-sequence",
    "title": "Connection Request — Idempotent Flow",
    "layout": "sequence",
    "lifelines": [
      {
        "id": "c-a",
        "label": "Member A",
        "kind": "actor"
      },
      {
        "id": "c-api",
        "label": "API layer",
        "kind": "integration",
        "icon": "fa5_plug"
      },
      {
        "id": "c-abuse",
        "label": "Anti-abuse",
        "kind": "security",
        "icon": "fa5_user_secret"
      },
      {
        "id": "c-graph",
        "label": "Graph service",
        "kind": "app",
        "icon": "fa5_project_diagram"
      },
      {
        "id": "c-esp",
        "label": "Edge store",
        "kind": "store",
        "icon": "fa5_database"
      },
      {
        "id": "c-kfk",
        "label": "Kafka",
        "kind": "queue",
        "icon": "kafka"
      },
      {
        "id": "c-atc",
        "label": "ATC",
        "kind": "app",
        "icon": "fa5_traffic_light"
      },
      {
        "id": "c-b",
        "label": "Member B",
        "kind": "actor"
      }
    ],
    "messages": [
      {
        "from": "c-a",
        "to": "c-api",
        "label": "POST /connections + key",
        "kind": "call"
      },
      {
        "from": "c-api",
        "to": "c-abuse",
        "label": "invite rate + risk",
        "kind": "call"
      },
      {
        "from": "c-abuse",
        "to": "c-api",
        "label": "allow",
        "kind": "return"
      },
      {
        "from": "c-api",
        "to": "c-graph",
        "label": "create invitation",
        "kind": "call"
      },
      {
        "from": "c-graph",
        "to": "c-esp",
        "label": "insert if key unseen",
        "kind": "call"
      },
      {
        "from": "c-esp",
        "to": "c-graph",
        "label": "created: pending",
        "kind": "return"
      },
      {
        "from": "c-graph",
        "to": "c-kfk",
        "label": "InvitationSent",
        "kind": "async"
      },
      {
        "from": "c-graph",
        "to": "c-api",
        "label": "201 invitation",
        "kind": "return"
      },
      {
        "from": "c-api",
        "to": "c-a",
        "label": "201 Created",
        "kind": "return"
      },
      {
        "from": "c-a",
        "to": "c-api",
        "label": "retry, same key",
        "kind": "error"
      },
      {
        "from": "c-api",
        "to": "c-a",
        "label": "same 201, no new row",
        "kind": "return"
      },
      {
        "from": "c-kfk",
        "to": "c-atc",
        "label": "invite event",
        "kind": "async"
      },
      {
        "from": "c-atc",
        "to": "c-b",
        "label": "push + in-app",
        "kind": "async"
      },
      {
        "from": "c-b",
        "to": "c-api",
        "label": "accept",
        "kind": "call"
      },
      {
        "from": "c-api",
        "to": "c-graph",
        "label": "accept invitation",
        "kind": "call"
      },
      {
        "from": "c-graph",
        "to": "c-esp",
        "label": "CAS pending to connected",
        "kind": "call"
      },
      {
        "from": "c-graph",
        "to": "c-kfk",
        "label": "ConnectionCreated",
        "kind": "async"
      }
    ],
    "note": "One row keyed by the ordered member pair makes accept a single compare-and-set; adjacency lists are derived.",
    "meta": {
      "v": "1.0",
      "owner": "Graph Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "18-messaging-delivery-sequence",
    "title": "Message Delivery — Ordered, Online and Offline",
    "layout": "sequence",
    "lifelines": [
      {
        "id": "m-s",
        "label": "Sender",
        "kind": "actor"
      },
      {
        "id": "m-api",
        "label": "API layer",
        "kind": "integration",
        "icon": "fa5_plug"
      },
      {
        "id": "m-msg",
        "label": "Messaging",
        "kind": "app",
        "icon": "fa5_comments"
      },
      {
        "id": "m-st",
        "label": "Conversation store",
        "kind": "store",
        "icon": "fa5_database"
      },
      {
        "id": "m-kfk",
        "label": "Kafka",
        "kind": "queue",
        "icon": "kafka"
      },
      {
        "id": "m-dfe",
        "label": "Delivery front-end",
        "kind": "app",
        "icon": "fa5_satellite_dish"
      },
      {
        "id": "m-r",
        "label": "Recipient",
        "kind": "actor"
      },
      {
        "id": "m-push",
        "label": "APNs / FCM",
        "kind": "external",
        "icon": "fa5_paper_plane"
      }
    ],
    "messages": [
      {
        "from": "m-s",
        "to": "m-api",
        "label": "POST messages + client id",
        "kind": "call"
      },
      {
        "from": "m-api",
        "to": "m-msg",
        "label": "send",
        "kind": "call"
      },
      {
        "from": "m-msg",
        "to": "m-msg",
        "label": "participant? blocked?",
        "kind": "self"
      },
      {
        "from": "m-msg",
        "to": "m-st",
        "label": "append, seq = last + 1",
        "kind": "call"
      },
      {
        "from": "m-st",
        "to": "m-msg",
        "label": "seq N",
        "kind": "return"
      },
      {
        "from": "m-msg",
        "to": "m-api",
        "label": "201 · seq N",
        "kind": "return"
      },
      {
        "from": "m-api",
        "to": "m-s",
        "label": "sent",
        "kind": "return"
      },
      {
        "from": "m-msg",
        "to": "m-kfk",
        "label": "MessageSent",
        "kind": "async"
      },
      {
        "from": "m-kfk",
        "to": "m-dfe",
        "label": "for online recipients",
        "kind": "async"
      },
      {
        "from": "m-dfe",
        "to": "m-r",
        "label": "SSE event ≤ 500 ms",
        "kind": "async"
      },
      {
        "from": "m-r",
        "to": "m-dfe",
        "label": "delivered · read",
        "kind": "call"
      },
      {
        "from": "m-dfe",
        "to": "m-kfk",
        "label": "receipt event",
        "kind": "async"
      },
      {
        "from": "m-kfk",
        "to": "m-push",
        "label": "offline: push instead",
        "kind": "error"
      },
      {
        "from": "m-push",
        "to": "m-r",
        "label": "notification",
        "kind": "async"
      }
    ],
    "note": "Order is the sequence number from one writer per conversation; delivery may reorder, the client re-sorts.",
    "meta": {
      "v": "1.0",
      "owner": "Messaging Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "19-search-indexing-and-query",
    "title": "Search — Indexing and Query",
    "layout": "swimlane",
    "laneHeaderWidth": 160,
    "stages": [
      "Source",
      "Transport",
      "Build",
      "Index",
      "Serve"
    ],
    "lanes": [
      {
        "title": "Base index · weekly",
        "cells": [
          [
            {
              "id": "s1",
              "label": "HDFS snapshots",
              "kind": "store",
              "icon": "hadoop"
            }
          ],
          [
            {
              "id": "s2",
              "label": "Azkaban DAG",
              "kind": "app",
              "icon": "fa5_cogs"
            }
          ],
          [
            {
              "id": "s3",
              "label": "Index build",
              "kind": "app",
              "sub": "Hadoop · Spark",
              "icon": "spark"
            }
          ],
          [
            {
              "id": "s4",
              "label": "Base index shards",
              "kind": "store",
              "sub": "Galene · Lucene",
              "icon": "fa5_search"
            }
          ],
          []
        ]
      },
      {
        "title": "Live updates · seconds",
        "cells": [
          [
            {
              "id": "s5",
              "label": "Espresso · MySQL",
              "kind": "store",
              "icon": "fa5_database"
            }
          ],
          [
            {
              "id": "s6",
              "label": "Brooklin → Kafka",
              "kind": "queue",
              "icon": "fa5_exchange_alt"
            }
          ],
          [
            {
              "id": "s7",
              "label": "Doc builder",
              "kind": "app",
              "sub": "Samza",
              "icon": "fa5_stream"
            }
          ],
          [
            {
              "id": "s8",
              "label": "Live update buffer",
              "kind": "store",
              "sub": "in memory",
              "icon": "fa5_search"
            }
          ],
          []
        ]
      },
      {
        "title": "Query · ≤ 300 ms",
        "cells": [
          [
            {
              "id": "s9",
              "label": "Member query",
              "kind": "actor"
            }
          ],
          [
            {
              "id": "s10",
              "label": "API layer",
              "kind": "integration",
              "icon": "fa5_plug"
            }
          ],
          [
            {
              "id": "s11",
              "label": "Rewrite + spell",
              "kind": "app",
              "sub": "query tagging",
              "icon": "fa5_search"
            },
            {
              "id": "s14",
              "label": "Typeahead",
              "kind": "app",
              "sub": "prefix index",
              "icon": "fa5_search"
            }
          ],
          [
            {
              "id": "s12",
              "label": "Federated broker",
              "kind": "app",
              "sub": "7 verticals",
              "icon": "fa5_search"
            }
          ],
          [
            {
              "id": "s13",
              "label": "Personalised ranker",
              "kind": "app",
              "sub": "graph distance",
              "icon": "fa5_sort_amount_down"
            }
          ]
        ]
      }
    ],
    "edges": [
      {
        "from": "s12",
        "to": "s8",
        "label": "scatter · gather",
        "kind": "sync"
      }
    ],
    "note": "Each searcher serves base shard plus live buffer; the base index is rebuilt so deletes never accumulate.",
    "meta": {
      "v": "1.0",
      "owner": "Search Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "20-notification-pipeline",
    "title": "Notifications — Generate, Decide, Deliver",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Trigger",
        "nodes": [
          {
            "id": "n-kfk",
            "label": "Kafka events",
            "kind": "queue",
            "sub": "graph · content · jobs",
            "icon": "kafka"
          }
        ]
      },
      {
        "title": "Generate",
        "nodes": [
          {
            "id": "n-conc",
            "label": "Concourse",
            "kind": "app",
            "sub": "content candidates",
            "icon": "fa5_bell"
          },
          {
            "id": "n-agg",
            "label": "Aggregator",
            "kind": "app",
            "sub": "Ana and 12 others",
            "icon": "fa5_layer_group"
          }
        ]
      },
      {
        "title": "Decide",
        "nodes": [
          {
            "id": "n-atc",
            "label": "ATC",
            "kind": "decision",
            "sub": "caps · channel",
            "icon": "fa5_traffic_light"
          },
          {
            "id": "n-pref",
            "label": "Preferences",
            "kind": "store",
            "sub": "Espresso",
            "icon": "fa5_sliders_h"
          }
        ]
      },
      {
        "title": "Store",
        "nodes": [
          {
            "id": "n-inapp",
            "label": "Notification store",
            "kind": "store",
            "sub": "Espresso",
            "icon": "fa5_bell"
          },
          {
            "id": "n-badge",
            "label": "Badge counts",
            "kind": "store",
            "sub": "Couchbase",
            "icon": "fa5_bolt"
          },
          {
            "id": "n-dlq",
            "label": "Retry queue",
            "kind": "queue",
            "sub": "backoff + DLQ"
          }
        ]
      },
      {
        "title": "Deliver",
        "nodes": [
          {
            "id": "n-app",
            "label": "In-app",
            "kind": "app",
            "icon": "fa5_bell"
          },
          {
            "id": "n-push",
            "label": "APNs / FCM",
            "kind": "external",
            "icon": "fa5_paper_plane"
          },
          {
            "id": "n-mail",
            "label": "Email",
            "kind": "external",
            "icon": "fa5_envelope"
          }
        ]
      },
      {
        "title": "Learn",
        "nodes": [
          {
            "id": "n-trk",
            "label": "Tracking",
            "kind": "queue",
            "sub": "open · dismiss",
            "icon": "fa5_chart_line"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "n-push",
        "to": "n-dlq",
        "label": "provider 5xx",
        "kind": "error"
      }
    ],
    "note": "Nothing here is on the path of the action that caused it; a dead pipeline delays alerts, it never fails a post.",
    "meta": {
      "v": "1.0",
      "owner": "Notifications Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "21-media-pipeline",
    "title": "Media — Upload, Process, Deliver",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Upload",
        "nodes": [
          {
            "id": "md-cl",
            "label": "Composer",
            "kind": "app",
            "sub": "web · mobile",
            "icon": "fa5_mobile_alt"
          },
          {
            "id": "md-svc",
            "label": "Media service",
            "kind": "app",
            "sub": "issues signed URL",
            "icon": "fa5_image"
          },
          {
            "id": "md-up",
            "label": "Resumable upload",
            "kind": "integration",
            "sub": "chunked · direct",
            "icon": "fa5_cloud_upload_alt"
          }
        ]
      },
      {
        "title": "Store",
        "nodes": [
          {
            "id": "md-amb",
            "label": "Ambry",
            "kind": "store",
            "sub": "originals · immutable",
            "icon": "fa5_archive"
          },
          {
            "id": "md-q",
            "label": "Quarantine",
            "kind": "risk",
            "sub": "never served",
            "icon": "fa5_ban"
          }
        ]
      },
      {
        "title": "Process",
        "nodes": [
          {
            "id": "md-scan",
            "label": "Malware scan",
            "kind": "security",
            "icon": "fa5_virus"
          },
          {
            "id": "md-img",
            "label": "Image resize",
            "kind": "app",
            "sub": "renditions",
            "icon": "fa5_image"
          },
          {
            "id": "md-vid",
            "label": "Video transcode",
            "kind": "app",
            "sub": "HLS · adaptive",
            "icon": "fa5_video"
          },
          {
            "id": "md-cls",
            "label": "Content classifier",
            "kind": "security",
            "icon": "fa5_eye"
          }
        ]
      },
      {
        "title": "Publish",
        "nodes": [
          {
            "id": "md-evt",
            "label": "MediaReady",
            "kind": "queue",
            "sub": "Kafka",
            "icon": "kafka"
          },
          {
            "id": "md-post",
            "label": "Post attaches media",
            "kind": "app",
            "icon": "fa5_newspaper"
          }
        ]
      },
      {
        "title": "Deliver",
        "nodes": [
          {
            "id": "md-cdn",
            "label": "Media CDN",
            "kind": "integration",
            "sub": "Azure Front Door",
            "icon": "azure_cdn-profiles"
          },
          {
            "id": "md-view",
            "label": "Viewer",
            "kind": "actor"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "md-scan",
        "to": "md-q",
        "label": "infected",
        "kind": "error"
      }
    ],
    "note": "Bytes never pass through a Rest.li service: the client writes to storage on a signed URL.",
    "meta": {
      "v": "1.0",
      "owner": "Media Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "22-deployment-topology",
    "title": "LinkedIn — Deployment Topology",
    "layout": "nested",
    "canvas": {
      "width": 1760
    },
    "boxes": [
      {
        "title": "Global edge",
        "kind": "cloud",
        "nodes": [
          {
            "id": "d-dns",
            "label": "Global DNS",
            "kind": "integration",
            "sub": "health-checked",
            "icon": "fa5_globe"
          },
          {
            "id": "d-afd",
            "label": "Azure Front Door",
            "kind": "integration",
            "sub": "165+ PoPs · WAF",
            "icon": "azure_frontdoor"
          },
          {
            "id": "d-cdn",
            "label": "Media CDN",
            "kind": "integration",
            "sub": "cache · signed URLs",
            "icon": "azure_cdn-profiles"
          }
        ]
      },
      {
        "title": "Colo A · US · one of four serving colos",
        "kind": "onprem",
        "dir": "row",
        "children": [
          {
            "title": "Fault zone 1",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-a1",
                "label": "Traffic tier",
                "kind": "integration",
                "sub": "ATS",
                "icon": "fa5_route"
              },
              {
                "id": "d-a2",
                "label": "Rest.li services",
                "kind": "app",
                "sub": "stateless pool",
                "icon": "java"
              },
              {
                "id": "d-a3",
                "label": "Espresso replicas",
                "kind": "store",
                "sub": "partition leaders",
                "icon": "fa5_database"
              },
              {
                "id": "d-a4",
                "label": "Kafka brokers",
                "kind": "queue",
                "sub": "rack-aware",
                "icon": "kafka"
              }
            ]
          },
          {
            "title": "Fault zone 2",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-b1",
                "label": "Traffic tier",
                "kind": "integration",
                "sub": "ATS",
                "icon": "fa5_route"
              },
              {
                "id": "d-b2",
                "label": "Rest.li services",
                "kind": "app",
                "sub": "stateless pool",
                "icon": "java"
              },
              {
                "id": "d-b3",
                "label": "Espresso replicas",
                "kind": "store",
                "sub": "followers",
                "icon": "fa5_database"
              },
              {
                "id": "d-b4",
                "label": "Kafka brokers",
                "kind": "queue",
                "sub": "rack-aware",
                "icon": "kafka"
              }
            ]
          },
          {
            "title": "Fault zone 3",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-c1",
                "label": "Traffic tier",
                "kind": "integration",
                "sub": "ATS",
                "icon": "fa5_route"
              },
              {
                "id": "d-c2",
                "label": "Rest.li services",
                "kind": "app",
                "sub": "stateless pool",
                "icon": "java"
              },
              {
                "id": "d-c3",
                "label": "Espresso replicas",
                "kind": "store",
                "sub": "followers",
                "icon": "fa5_database"
              },
              {
                "id": "d-c4",
                "label": "Kafka brokers",
                "kind": "queue",
                "sub": "rack-aware",
                "icon": "kafka"
              }
            ]
          }
        ]
      },
      {
        "title": "Colos B, C and D · identical stack, all serving",
        "kind": "onprem",
        "dir": "row",
        "children": [
          {
            "title": "Colo B · US",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-colob",
                "label": "Full stack",
                "kind": "app",
                "sub": "active",
                "icon": "fa5_server"
              }
            ]
          },
          {
            "title": "Colo C · US",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-coloc",
                "label": "Full stack",
                "kind": "app",
                "sub": "active",
                "icon": "fa5_server"
              }
            ]
          },
          {
            "title": "Colo D · APAC",
            "kind": "boundary",
            "nodes": [
              {
                "id": "d-colod",
                "label": "Full stack",
                "kind": "app",
                "sub": "active",
                "icon": "fa5_server"
              }
            ]
          }
        ]
      }
    ],
    "outside": [
      {
        "id": "d-ofl",
        "label": "Offline grid",
        "kind": "app",
        "sub": "HDFS · Spark · Azkaban",
        "icon": "hadoop"
      }
    ],
    "edges": [
      {
        "from": "d-afd",
        "to": "d-b1",
        "label": "pinned colo"
      },
      {
        "from": "d-a3",
        "to": "d-b3",
        "label": "in-colo replica"
      },
      {
        "from": "d-c4",
        "to": "d-colod",
        "label": "Brooklin mirror",
        "kind": "async"
      }
    ],
    "note": "Fault zones inside a colo are this design's assumption; LinkedIn has published colo count, not intra-colo layout.",
    "meta": {
      "v": "1.0",
      "owner": "Site Reliability Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "23-cicd-and-ramps",
    "title": "Delivery Pipeline, Canaries and Ramps",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Source",
        "nodes": [
          {
            "id": "y-git",
            "label": "Multiproduct repo",
            "kind": "app",
            "sub": "trunk + review",
            "icon": "fa5_code_branch"
          }
        ]
      },
      {
        "title": "Build",
        "nodes": [
          {
            "id": "y-ci",
            "label": "CI build + tests",
            "kind": "app"
          },
          {
            "id": "y-art",
            "label": "Artifact repo",
            "kind": "store",
            "sub": "signed"
          }
        ]
      },
      {
        "title": "Gates",
        "nodes": [
          {
            "id": "y-compat",
            "label": "Schema compat",
            "kind": "decision",
            "sub": "Rest.li · Avro",
            "icon": "fa5_file_contract"
          },
          {
            "id": "y-sec",
            "label": "Security scan",
            "kind": "decision"
          },
          {
            "id": "y-int",
            "label": "Integration tests",
            "kind": "decision"
          }
        ]
      },
      {
        "title": "Deploy",
        "nodes": [
          {
            "id": "y-can",
            "label": "Canary hosts",
            "kind": "app",
            "sub": "one colo",
            "icon": "fa5_server"
          },
          {
            "id": "y-ekg",
            "label": "EKG verdict",
            "kind": "decision",
            "sub": "canary vs control",
            "icon": "fa5_heartbeat"
          },
          {
            "id": "y-roll",
            "label": "Colo by colo",
            "kind": "app",
            "sub": "rolling deploy"
          }
        ]
      },
      {
        "title": "Release",
        "nodes": [
          {
            "id": "y-ramp",
            "label": "T-REX ramp",
            "kind": "app",
            "sub": "1% to 100%",
            "icon": "fa5_flask"
          },
          {
            "id": "y-ab",
            "label": "A/B verdict",
            "kind": "decision",
            "sub": "guardrail metrics",
            "icon": "fa5_flask"
          },
          {
            "id": "y-live",
            "label": "Fully ramped",
            "kind": "app"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "y-ekg",
        "to": "y-art",
        "label": "fail: roll back",
        "kind": "error"
      },
      {
        "from": "y-ab",
        "to": "y-ramp",
        "label": "ramp down",
        "kind": "error"
      }
    ],
    "note": "Deploy and release are separate acts: code ships dark, a ramp turns it on, and a ramp turns it off.",
    "meta": {
      "v": "1.0",
      "owner": "Developer Productivity",
      "date": "2026-09"
    }
  },
  {
    "id": "24-observability",
    "title": "Observability and Operations",
    "layout": "grid",
    "laneHeaderWidth": 160,
    "columns": [
      "Emit",
      "Collect",
      "Store",
      "Consume",
      "Act"
    ],
    "rows": [
      {
        "title": "Metrics",
        "cells": [
          [
            {
              "id": "o-m1",
              "label": "Service metrics",
              "kind": "app",
              "sub": "RED + saturation",
              "icon": "fa5_chart_line"
            }
          ],
          [
            {
              "id": "o-m2",
              "label": "Metrics agents",
              "kind": "integration"
            }
          ],
          [
            {
              "id": "o-m3",
              "label": "Time-series store",
              "kind": "store"
            }
          ],
          [
            {
              "id": "o-m4",
              "label": "inGraphs",
              "kind": "platform",
              "sub": "dashboards"
            }
          ],
          [
            {
              "id": "o-m5",
              "label": "Iris page",
              "kind": "security",
              "sub": "SLO burn rate",
              "icon": "fa5_pager"
            }
          ]
        ]
      },
      {
        "title": "Logs",
        "cells": [
          [
            {
              "id": "o-l1",
              "label": "Structured logs",
              "kind": "app"
            }
          ],
          [
            {
              "id": "o-l2",
              "label": "Kafka log topics",
              "kind": "queue",
              "icon": "kafka"
            }
          ],
          [
            {
              "id": "o-l3",
              "label": "Log index",
              "kind": "store"
            }
          ],
          [
            {
              "id": "o-l4",
              "label": "Incident search",
              "kind": "platform"
            }
          ],
          [
            {
              "id": "o-l5",
              "label": "Runbook link",
              "kind": "security"
            }
          ]
        ]
      },
      {
        "title": "Traces",
        "cells": [
          [
            {
              "id": "o-t1",
              "label": "Trace context",
              "kind": "app",
              "sub": "per Rest.li hop"
            }
          ],
          [
            {
              "id": "o-t2",
              "label": "Trace collector",
              "kind": "integration"
            }
          ],
          [
            {
              "id": "o-t3",
              "label": "Trace store",
              "kind": "store"
            }
          ],
          [
            {
              "id": "o-t4",
              "label": "Call-graph analysis",
              "kind": "platform"
            }
          ],
          []
        ]
      },
      {
        "title": "Member experience",
        "cells": [
          [
            {
              "id": "o-r1",
              "label": "Client timing",
              "kind": "app",
              "sub": "RUM beacons"
            }
          ],
          [
            {
              "id": "o-r2",
              "label": "Tracking pipeline",
              "kind": "queue",
              "sub": "Kafka",
              "icon": "kafka"
            }
          ],
          [
            {
              "id": "o-r3",
              "label": "Pinot",
              "kind": "store",
              "icon": "fa5_chart_bar"
            }
          ],
          [
            {
              "id": "o-r4",
              "label": "ThirdEye",
              "kind": "platform",
              "sub": "anomaly detection",
              "icon": "fa5_chart_line"
            }
          ],
          [
            {
              "id": "o-r5",
              "label": "Page product on-call",
              "kind": "security"
            }
          ]
        ]
      },
      {
        "title": "Overload",
        "cells": [
          [
            {
              "id": "o-h1",
              "label": "Queue + latency",
              "kind": "app"
            }
          ],
          [
            {
              "id": "o-h2",
              "label": "Hodor",
              "kind": "integration",
              "sub": "overload detector",
              "icon": "fa5_tachometer_alt"
            }
          ],
          [],
          [
            {
              "id": "o-h4",
              "label": "Shed low priority",
              "kind": "platform"
            }
          ],
          [
            {
              "id": "o-h5",
              "label": "Oncall schedule",
              "kind": "security",
              "sub": "who is woken",
              "icon": "fa5_pager"
            }
          ]
        ]
      }
    ],
    "note": "Empty cells are gaps, not omissions: traces page nobody, and overload state is not stored.",
    "meta": {
      "v": "1.0",
      "owner": "Site Reliability Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "25-ml-lifecycle",
    "title": "Relevance ML Lifecycle",
    "layout": "cycle",
    "centre": {
      "label": "Pro-ML",
      "sub": "one ML platform"
    },
    "nodes": [
      {
        "id": "k1",
        "label": "Track",
        "kind": "queue",
        "sub": "impressions · clicks",
        "icon": "fa5_chart_line"
      },
      {
        "id": "k2",
        "label": "Features",
        "kind": "store",
        "sub": "Frame · Feathr",
        "icon": "fa5_cubes"
      },
      {
        "id": "k3",
        "label": "Train",
        "kind": "app",
        "sub": "Spark · TonY",
        "icon": "fa5_brain"
      },
      {
        "id": "k4",
        "label": "Validate",
        "kind": "decision",
        "sub": "offline metrics",
        "icon": "fa5_clipboard_check"
      },
      {
        "id": "k5",
        "label": "Deploy",
        "kind": "app",
        "sub": "Quasar · model repo",
        "icon": "fa5_rocket"
      },
      {
        "id": "k6",
        "label": "Ramp",
        "kind": "decision",
        "sub": "T-REX A/B",
        "icon": "fa5_flask"
      },
      {
        "id": "k7",
        "label": "Observe",
        "kind": "platform",
        "sub": "health assurance",
        "icon": "fa5_heartbeat"
      }
    ],
    "ringLabels": [
      "labelled events",
      "training sets",
      "candidate",
      "passes gate",
      "live at 1%",
      "guardrails hold",
      "drift signals"
    ],
    "meta": {
      "v": "1.0",
      "owner": "AI Platform",
      "date": "2026-09"
    }
  },
  {
    "id": "26-degradation-matrix",
    "title": "Graceful Degradation Contract",
    "layout": "grid",
    "laneHeaderWidth": 150,
    "columns": [
      "Healthy",
      "Dependency slow",
      "Dependency down",
      "Colo lost"
    ],
    "rows": [
      {
        "title": "Feed",
        "cells": [
          [
            {
              "id": "g-f1",
              "label": "Ranked, personalised",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-f2",
              "label": "Skip recs, keep network",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-f3",
              "label": "Chronological + trending",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-f4",
              "label": "Served by next colo",
              "kind": "opportunity"
            }
          ]
        ]
      },
      {
        "title": "Search",
        "cells": [
          [
            {
              "id": "g-s1",
              "label": "Federated, personalised",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-s2",
              "label": "Fewer verticals",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-s3",
              "label": "Search off, rest up",
              "kind": "risk"
            }
          ],
          [
            {
              "id": "g-s4",
              "label": "Served by next colo",
              "kind": "opportunity"
            }
          ]
        ]
      },
      {
        "title": "Notifications",
        "cells": [
          [
            {
              "id": "g-n1",
              "label": "Seconds to device",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-n2",
              "label": "Queued, delayed",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-n3",
              "label": "Backlog; actions succeed",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-n4",
              "label": "Replayed from Kafka",
              "kind": "opportunity"
            }
          ]
        ]
      },
      {
        "title": "Messaging",
        "cells": [
          [
            {
              "id": "g-m1",
              "label": "Under 500 ms",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-m2",
              "label": "Push, not SSE",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-m3",
              "label": "Store and forward",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-m4",
              "label": "Reconnect elsewhere",
              "kind": "opportunity"
            }
          ]
        ]
      },
      {
        "title": "Profile read",
        "cells": [
          [
            {
              "id": "g-p1",
              "label": "Cache + Espresso",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-p2",
              "label": "Stale cache allowed",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-p3",
              "label": "Espresso direct",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-p4",
              "label": "Served by next colo",
              "kind": "opportunity"
            }
          ]
        ]
      },
      {
        "title": "Job apply",
        "cells": [
          [
            {
              "id": "g-j1",
              "label": "Strongly consistent",
              "kind": "app"
            }
          ],
          [
            {
              "id": "g-j2",
              "label": "Retry with same key",
              "kind": "opportunity"
            }
          ],
          [
            {
              "id": "g-j3",
              "label": "Fail closed, retry",
              "kind": "risk"
            }
          ],
          [
            {
              "id": "g-j4",
              "label": "Idempotent replay",
              "kind": "opportunity"
            }
          ]
        ]
      }
    ],
    "note": "Each row degrades on its own non-critical dependency; red cells are where a member notices.",
    "meta": {
      "v": "1.0",
      "owner": "Site Reliability Engineering",
      "date": "2026-09"
    }
  },
  {
    "id": "27-security-zones",
    "title": "Security Architecture — Trust Zones",
    "layout": "zones",
    "zones": [
      {
        "title": "Internet · untrusted",
        "kind": "trust",
        "nodes": [
          {
            "id": "v-mem",
            "label": "Member",
            "kind": "actor"
          },
          {
            "id": "v-bot",
            "label": "Scraper / bot",
            "kind": "risk",
            "sub": "credential stuffing"
          }
        ]
      },
      {
        "title": "Edge",
        "kind": "trust",
        "nodes": [
          {
            "id": "v-afd",
            "label": "Front Door + WAF",
            "kind": "security",
            "sub": "DDoS · bot rules",
            "icon": "azure_frontdoor"
          },
          {
            "id": "v-ats",
            "label": "Traffic tier",
            "kind": "integration",
            "sub": "ATS · colo pinning",
            "icon": "fa5_route"
          }
        ]
      },
      {
        "title": "API perimeter",
        "kind": "trust",
        "nodes": [
          {
            "id": "v-api",
            "label": "API layer",
            "kind": "integration",
            "sub": "session to principal",
            "icon": "fa5_plug"
          },
          {
            "id": "v-id",
            "label": "Identity",
            "kind": "security",
            "sub": "MFA · ATO scoring",
            "icon": "fa5_user_shield"
          },
          {
            "id": "v-rl",
            "label": "Rate limiter",
            "kind": "security",
            "sub": "per member + IP",
            "icon": "fa5_tachometer_alt"
          }
        ]
      },
      {
        "title": "Service zone · mTLS",
        "kind": "trust",
        "nodes": [
          {
            "id": "v-svc",
            "label": "Rest.li services",
            "kind": "app",
            "sub": "mTLS · D2",
            "icon": "java"
          },
          {
            "id": "v-acl",
            "label": "ACL service",
            "kind": "security",
            "sub": "managed in Nuage",
            "icon": "fa5_user_lock"
          },
          {
            "id": "v-pol",
            "label": "Privacy policy",
            "kind": "security",
            "sub": "every read path",
            "icon": "fa5_user_lock"
          }
        ]
      },
      {
        "title": "Data · restricted",
        "kind": "trust",
        "nodes": [
          {
            "id": "v-db",
            "label": "Espresso · MySQL",
            "kind": "store",
            "sub": "encrypted at rest",
            "icon": "fa5_database"
          },
          {
            "id": "v-kms",
            "label": "KMS + secrets",
            "kind": "security",
            "sub": "envelope keys",
            "icon": "fa5_key"
          },
          {
            "id": "v-aud",
            "label": "Audit log",
            "kind": "security",
            "sub": "Kafka to immutable",
            "icon": "fa5_file_contract"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "v-mem",
        "to": "v-afd",
        "label": "HTTPS 443"
      },
      {
        "from": "v-bot",
        "to": "v-afd",
        "label": "challenged",
        "kind": "error"
      },
      {
        "from": "v-afd",
        "to": "v-ats",
        "label": "TLS"
      },
      {
        "from": "v-ats",
        "to": "v-api",
        "label": "HTTPS"
      },
      {
        "from": "v-api",
        "to": "v-svc",
        "label": "mTLS + principal"
      },
      {
        "from": "v-svc",
        "to": "v-db",
        "label": "TLS"
      },
      {
        "from": "v-acl",
        "to": "v-aud",
        "label": "access log",
        "kind": "async"
      }
    ],
    "note": "No path reaches a service without a principal, or a store without an ACL decision.",
    "meta": {
      "v": "1.0",
      "owner": "Security Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "28-identity-and-access-flow",
    "title": "Identity and Access — Sign-in with Step-up",
    "layout": "sequence",
    "lifelines": [
      {
        "id": "x-m",
        "label": "Member",
        "kind": "actor"
      },
      {
        "id": "x-app",
        "label": "Client app",
        "kind": "app",
        "icon": "fa5_mobile_alt"
      },
      {
        "id": "x-edge",
        "label": "Edge",
        "kind": "security",
        "icon": "fa5_route"
      },
      {
        "id": "x-id",
        "label": "Identity",
        "kind": "security",
        "icon": "fa5_user_shield"
      },
      {
        "id": "x-risk",
        "label": "ATO risk",
        "kind": "security",
        "icon": "fa5_user_secret"
      },
      {
        "id": "x-cred",
        "label": "Credential store",
        "kind": "store",
        "icon": "fa5_key"
      },
      {
        "id": "x-api",
        "label": "API layer",
        "kind": "integration",
        "icon": "fa5_plug"
      },
      {
        "id": "x-svc",
        "label": "Rest.li service",
        "kind": "app"
      }
    ],
    "messages": [
      {
        "from": "x-m",
        "to": "x-app",
        "label": "email + password",
        "kind": "call"
      },
      {
        "from": "x-app",
        "to": "x-edge",
        "label": "POST /login",
        "kind": "call"
      },
      {
        "from": "x-edge",
        "to": "x-edge",
        "label": "rate + bot check",
        "kind": "self"
      },
      {
        "from": "x-edge",
        "to": "x-id",
        "label": "forward",
        "kind": "call"
      },
      {
        "from": "x-id",
        "to": "x-cred",
        "label": "verify hash",
        "kind": "call"
      },
      {
        "from": "x-id",
        "to": "x-risk",
        "label": "device, IP, velocity",
        "kind": "call"
      },
      {
        "from": "x-risk",
        "to": "x-id",
        "label": "new device: step up",
        "kind": "return"
      },
      {
        "from": "x-id",
        "to": "x-app",
        "label": "MFA challenge",
        "kind": "return"
      },
      {
        "from": "x-m",
        "to": "x-app",
        "label": "passkey or TOTP",
        "kind": "call"
      },
      {
        "from": "x-app",
        "to": "x-id",
        "label": "second factor",
        "kind": "call"
      },
      {
        "from": "x-id",
        "to": "x-app",
        "label": "session + short token",
        "kind": "return"
      },
      {
        "from": "x-app",
        "to": "x-api",
        "label": "GET /v1/feed + token",
        "kind": "call"
      },
      {
        "from": "x-api",
        "to": "x-api",
        "label": "verify signature, expiry",
        "kind": "self"
      },
      {
        "from": "x-api",
        "to": "x-svc",
        "label": "principal over mTLS",
        "kind": "call"
      },
      {
        "from": "x-api",
        "to": "x-app",
        "label": "401 on expiry: refresh",
        "kind": "error"
      }
    ],
    "note": "Sign in with LinkedIn for third parties is the OAuth 2.0 / OIDC variant of steps 11 to 14.",
    "meta": {
      "v": "1.0",
      "owner": "Security Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "29-privacy-authorization",
    "title": "Privacy and Authorization — Every Read Path",
    "layout": "flow",
    "chain": true,
    "stages": [
      {
        "title": "Request",
        "nodes": [
          {
            "id": "p-req",
            "label": "Profile request",
            "kind": "integration",
            "sub": "viewer, target",
            "icon": "fa5_plug"
          }
        ]
      },
      {
        "title": "Authenticate",
        "nodes": [
          {
            "id": "p-auth",
            "label": "Session to principal",
            "kind": "security",
            "icon": "fa5_user_shield"
          }
        ]
      },
      {
        "title": "Relationship",
        "nodes": [
          {
            "id": "p-blk",
            "label": "Block list",
            "kind": "store",
            "sub": "cached, both ways",
            "icon": "fa5_ban"
          },
          {
            "id": "p-deg",
            "label": "Graph degree",
            "kind": "store",
            "sub": "LIquid",
            "icon": "fa5_project_diagram"
          }
        ]
      },
      {
        "title": "Decide",
        "nodes": [
          {
            "id": "p-blkd",
            "label": "Blocked?",
            "kind": "decision",
            "icon": "fa5_ban"
          },
          {
            "id": "p-vis",
            "label": "Visibility rule",
            "kind": "decision",
            "sub": "public to private",
            "icon": "fa5_eye"
          }
        ]
      },
      {
        "title": "Shape",
        "nodes": [
          {
            "id": "p-mask",
            "label": "Field masking",
            "kind": "security",
            "sub": "per-field settings",
            "icon": "fa5_eye"
          },
          {
            "id": "p-resp",
            "label": "Response",
            "kind": "app",
            "icon": "fa5_paper_plane"
          }
        ]
      },
      {
        "title": "Record",
        "nodes": [
          {
            "id": "p-aud",
            "label": "Access log",
            "kind": "security",
            "sub": "recruiter + admin",
            "icon": "fa5_file_contract"
          }
        ]
      }
    ],
    "edges": [
      {
        "from": "p-blkd",
        "to": "p-resp",
        "label": "404, not 403",
        "kind": "error",
        "route": "gutter"
      }
    ],
    "note": "A blocked viewer gets not-found rather than forbidden, so the check itself leaks nothing.",
    "meta": {
      "v": "1.0",
      "owner": "Security Architecture",
      "date": "2026-09"
    }
  },
  {
    "id": "30-abuse-and-moderation",
    "title": "Abuse Detection and Content Moderation",
    "layout": "swimlane",
    "laneHeaderWidth": 150,
    "stages": [
      "Signal",
      "Detect",
      "Decide",
      "Act",
      "Audit"
    ],
    "lanes": [
      {
        "title": "Fake accounts",
        "cells": [
          [
            {
              "id": "a1",
              "label": "Signup + login events",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "a2",
              "label": "Account risk model",
              "kind": "app",
              "sub": "cluster detection",
              "icon": "fa5_user_secret"
            }
          ],
          [
            {
              "id": "a3",
              "label": "Risk threshold",
              "kind": "decision",
              "icon": "fa5_tachometer_alt"
            }
          ],
          [
            {
              "id": "a4",
              "label": "Challenge / restrict",
              "kind": "security",
              "icon": "fa5_user_lock"
            }
          ],
          [
            {
              "id": "a5",
              "label": "Decision log",
              "kind": "store",
              "icon": "fa5_file_contract"
            }
          ]
        ]
      },
      {
        "title": "Content",
        "cells": [
          [
            {
              "id": "a6",
              "label": "PostCreated",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "a7",
              "label": "Classifiers",
              "kind": "app",
              "sub": "spam · hate · links",
              "icon": "fa5_eye"
            }
          ],
          [
            {
              "id": "a8",
              "label": "Confidence routing",
              "kind": "decision",
              "icon": "fa5_route"
            }
          ],
          [
            {
              "id": "a9",
              "label": "Hide · label · limit",
              "kind": "security",
              "icon": "fa5_ban"
            }
          ],
          [
            {
              "id": "a10",
              "label": "Decision log",
              "kind": "store",
              "icon": "fa5_file_contract"
            }
          ]
        ]
      },
      {
        "title": "Member reports",
        "cells": [
          [
            {
              "id": "a11",
              "label": "Report button",
              "kind": "actor",
              "icon": "fa5_flag"
            }
          ],
          [
            {
              "id": "a12",
              "label": "Dedupe + priority",
              "kind": "app",
              "icon": "fa5_filter"
            }
          ],
          [
            {
              "id": "a13",
              "label": "Human review",
              "kind": "decision",
              "sub": "T&S queue",
              "icon": "fa5_gavel"
            }
          ],
          [
            {
              "id": "a14",
              "label": "Action + notify",
              "kind": "security",
              "icon": "fa5_bell"
            }
          ],
          [
            {
              "id": "a15",
              "label": "Appeal record",
              "kind": "store",
              "icon": "fa5_file_contract"
            }
          ]
        ]
      },
      {
        "title": "Fraudulent jobs",
        "cells": [
          [
            {
              "id": "a16",
              "label": "JobCreated",
              "kind": "queue"
            }
          ],
          [
            {
              "id": "a17",
              "label": "Job fraud model",
              "kind": "app",
              "icon": "fa5_user_secret"
            }
          ],
          [
            {
              "id": "a18",
              "label": "Hold for review",
              "kind": "decision",
              "icon": "fa5_gavel"
            }
          ],
          [
            {
              "id": "a19",
              "label": "Close + ban poster",
              "kind": "security",
              "icon": "fa5_ban"
            }
          ],
          [
            {
              "id": "a20",
              "label": "Decision log",
              "kind": "store",
              "icon": "fa5_file_contract"
            }
          ]
        ]
      }
    ],
    "edges": [
      {
        "from": "a8",
        "to": "a13",
        "label": "low confidence"
      }
    ],
    "note": "Rules, models, reports and people all write the same decision log, so every action can be appealed.",
    "meta": {
      "v": "1.0",
      "owner": "Trust & Safety Engineering",
      "date": "2026-09"
    }
  }
]
