{
 "what": "A storyboard as a semantic graph: nodes are things, edges carry the meaning. Generated by formats.js v0.1.0 from the storyboard and its cast.",
 "format": "storyboards.sgit.ai/graph/v1",
 "storyboard": "an-invitation",
 "nodes": [
  {
   "id": "storyboard:an-invitation",
   "type": "storyboard",
   "label": "An invitation",
   "subtitle": "The Anchor invites Leo with a QR code; Leo has no access key, keeps his key in the browser, and is verified, until a date. 9 panels.",
   "status": "built",
   "url": "https://storyboards.sgit.ai/pki/an-invitation/"
  },
  {
   "id": "shelf:Keys for people",
   "type": "shelf",
   "label": "Keys for people"
  },
  {
   "id": "author:pki.agent",
   "type": "author",
   "label": "pki.agent"
  },
  {
   "id": "panel:an-invitation/1",
   "type": "panel",
   "label": "An invitation",
   "n": 1,
   "kind": "cover",
   "text": "An invitation: A QR code with the link printed above it."
  },
  {
   "id": "character:anchor",
   "type": "character",
   "label": "The Anchor"
  },
  {
   "id": "character:leo",
   "type": "character",
   "label": "Leo"
  },
  {
   "id": "source:invite/index.html",
   "type": "source",
   "label": "invite/index.html"
  },
  {
   "id": "panel:an-invitation/2",
   "type": "panel",
   "label": "Scan this",
   "n": 2,
   "kind": "scene",
   "text": "Scan this. The Anchor says: “Scan it with your camera.”"
  },
  {
   "id": "prop:phoneqr",
   "type": "prop",
   "label": "phoneqr"
  },
  {
   "id": "prop:phone",
   "type": "prop",
   "label": "phone"
  },
  {
   "id": "source:message.js, invite",
   "type": "source",
   "label": "message.js, invite"
  },
  {
   "id": "panel:an-invitation/3",
   "type": "panel",
   "label": "Who is inviting me?",
   "n": 3,
   "kind": "scene",
   "text": "Who is inviting me?. Leo says: “Signed by them. It checks.”"
  },
  {
   "id": "prop:board",
   "type": "prop",
   "label": "board"
  },
  {
   "id": "source:join/index.html",
   "type": "source",
   "label": "join/index.html"
  },
  {
   "id": "panel:an-invitation/4",
   "type": "panel",
   "label": "No access key",
   "n": 4,
   "kind": "scene",
   "text": "No access key. Leo says: “I don't have an access key.” The Anchor says: “You don't need one to start.”"
  },
  {
   "id": "source:join/index.html, step 1",
   "type": "source",
   "label": "join/index.html, step 1"
  },
  {
   "id": "panel:an-invitation/5",
   "type": "panel",
   "label": "A key in the browser",
   "n": 5,
   "kind": "scene",
   "text": "A key in the browser. Leo says: “A passphrase, then. A long one.”"
  },
  {
   "id": "prop:laptop",
   "type": "prop",
   "label": "laptop"
  },
  {
   "id": "prop:key",
   "type": "prop",
   "label": "key"
  },
  {
   "id": "source:ui.js, keepInBrowser",
   "type": "source",
   "label": "ui.js, keepInBrowser"
  },
  {
   "id": "panel:an-invitation/6",
   "type": "panel",
   "label": "His record",
   "n": 6,
   "kind": "scene",
   "text": "His record."
  },
  {
   "id": "prop:record",
   "type": "prop",
   "label": "record"
  },
  {
   "id": "source:join/index.html, step 4",
   "type": "source",
   "label": "join/index.html, step 4"
  },
  {
   "id": "panel:an-invitation/7",
   "type": "panel",
   "label": "Verified, on a call",
   "n": 7,
   "kind": "scene",
   "text": "Verified, on a call. The Anchor says: “On a video call. Today. For a year.”"
  },
  {
   "id": "prop:calendar",
   "type": "prop",
   "label": "calendar"
  },
  {
   "id": "source:vault/index.html#links",
   "type": "source",
   "label": "vault/index.html#links"
  },
  {
   "id": "panel:an-invitation/8",
   "type": "panel",
   "label": "A year later",
   "n": 8,
   "kind": "scene",
   "text": "A year later. The Anchor says: “Time to check again.”"
  },
  {
   "id": "prop:mark",
   "type": "prop",
   "label": "mark"
  },
  {
   "id": "source:directory.js, validUntil",
   "type": "source",
   "label": "directory.js, validUntil"
  },
  {
   "id": "panel:an-invitation/9",
   "type": "panel",
   "label": "Verified: by whom, how, and until when.",
   "n": 9,
   "kind": "punchline",
   "text": "Verified: by whom, how, and until when.."
  },
  {
   "id": "source:Keys for people",
   "type": "source",
   "label": "Keys for people"
  }
 ],
 "edges": [
  {
   "from": "storyboard:an-invitation",
   "type": "on_shelf",
   "to": "shelf:Keys for people"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "made_by",
   "to": "author:pki.agent"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/1",
   "n": 1
  },
  {
   "from": "panel:an-invitation/1",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:an-invitation/1",
   "type": "features",
   "to": "character:leo",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:an-invitation/1",
   "type": "quotes",
   "to": "source:invite/index.html"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/2",
   "n": 2
  },
  {
   "from": "panel:an-invitation/1",
   "type": "next",
   "to": "panel:an-invitation/2"
  },
  {
   "from": "panel:an-invitation/2",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:an-invitation/2",
   "text": "Scan it with your camera."
  },
  {
   "from": "panel:an-invitation/2",
   "type": "features",
   "to": "character:leo",
   "pose": "stand",
   "mood": "thinking"
  },
  {
   "from": "panel:an-invitation/2",
   "type": "shows",
   "to": "prop:phoneqr"
  },
  {
   "from": "panel:an-invitation/2",
   "type": "shows",
   "to": "prop:phone"
  },
  {
   "from": "panel:an-invitation/2",
   "type": "drawn_from",
   "to": "source:message.js, invite"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/3",
   "n": 3
  },
  {
   "from": "panel:an-invitation/2",
   "type": "next",
   "to": "panel:an-invitation/3"
  },
  {
   "from": "panel:an-invitation/3",
   "type": "features",
   "to": "character:leo",
   "pose": "think",
   "mood": "thinking"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:an-invitation/3",
   "text": "Signed by them. It checks."
  },
  {
   "from": "panel:an-invitation/3",
   "type": "shows",
   "to": "prop:board"
  },
  {
   "from": "panel:an-invitation/3",
   "type": "drawn_from",
   "to": "source:join/index.html"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/4",
   "n": 4
  },
  {
   "from": "panel:an-invitation/3",
   "type": "next",
   "to": "panel:an-invitation/4"
  },
  {
   "from": "panel:an-invitation/4",
   "type": "features",
   "to": "character:leo",
   "pose": "shrug",
   "mood": "worried"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:an-invitation/4",
   "text": "I don't have an access key."
  },
  {
   "from": "panel:an-invitation/4",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:an-invitation/4",
   "text": "You don't need one to start."
  },
  {
   "from": "panel:an-invitation/4",
   "type": "drawn_from",
   "to": "source:join/index.html, step 1"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/5",
   "n": 5
  },
  {
   "from": "panel:an-invitation/4",
   "type": "next",
   "to": "panel:an-invitation/5"
  },
  {
   "from": "panel:an-invitation/5",
   "type": "features",
   "to": "character:leo",
   "pose": "think",
   "mood": "determined"
  },
  {
   "from": "character:leo",
   "type": "says",
   "to": "panel:an-invitation/5",
   "text": "A passphrase, then. A long one."
  },
  {
   "from": "panel:an-invitation/5",
   "type": "shows",
   "to": "prop:laptop"
  },
  {
   "from": "panel:an-invitation/5",
   "type": "shows",
   "to": "prop:key"
  },
  {
   "from": "panel:an-invitation/5",
   "type": "drawn_from",
   "to": "source:ui.js, keepInBrowser"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/6",
   "n": 6
  },
  {
   "from": "panel:an-invitation/5",
   "type": "next",
   "to": "panel:an-invitation/6"
  },
  {
   "from": "panel:an-invitation/6",
   "type": "features",
   "to": "character:leo",
   "pose": "point",
   "mood": "happy"
  },
  {
   "from": "panel:an-invitation/6",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:an-invitation/6",
   "type": "drawn_from",
   "to": "source:join/index.html, step 4"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/7",
   "n": 7
  },
  {
   "from": "panel:an-invitation/6",
   "type": "next",
   "to": "panel:an-invitation/7"
  },
  {
   "from": "panel:an-invitation/7",
   "type": "features",
   "to": "character:anchor",
   "pose": "point",
   "mood": "determined"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:an-invitation/7",
   "text": "On a video call. Today. For a year."
  },
  {
   "from": "panel:an-invitation/7",
   "type": "shows",
   "to": "prop:record"
  },
  {
   "from": "panel:an-invitation/7",
   "type": "shows",
   "to": "prop:calendar"
  },
  {
   "from": "panel:an-invitation/7",
   "type": "drawn_from",
   "to": "source:vault/index.html#links"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/8",
   "n": 8
  },
  {
   "from": "panel:an-invitation/7",
   "type": "next",
   "to": "panel:an-invitation/8"
  },
  {
   "from": "panel:an-invitation/8",
   "type": "features",
   "to": "character:anchor",
   "pose": "think",
   "mood": "thinking"
  },
  {
   "from": "character:anchor",
   "type": "says",
   "to": "panel:an-invitation/8",
   "text": "Time to check again."
  },
  {
   "from": "panel:an-invitation/8",
   "type": "shows",
   "to": "prop:calendar"
  },
  {
   "from": "panel:an-invitation/8",
   "type": "shows",
   "to": "prop:mark"
  },
  {
   "from": "panel:an-invitation/8",
   "type": "drawn_from",
   "to": "source:directory.js, validUntil"
  },
  {
   "from": "storyboard:an-invitation",
   "type": "has_panel",
   "to": "panel:an-invitation/9",
   "n": 9
  },
  {
   "from": "panel:an-invitation/8",
   "type": "next",
   "to": "panel:an-invitation/9"
  },
  {
   "from": "panel:an-invitation/9",
   "type": "features",
   "to": "character:anchor",
   "pose": "wave",
   "mood": "happy"
  },
  {
   "from": "panel:an-invitation/9",
   "type": "features",
   "to": "character:leo",
   "pose": "arms-up",
   "mood": "happy"
  },
  {
   "from": "panel:an-invitation/9",
   "type": "quotes",
   "to": "source:Keys for people"
  }
 ]
}
