Skip to content
Snippets Groups Projects
Commit 8f7d640e authored by Tarje.Lavik's avatar Tarje.Lavik
Browse files

Add preview documentation

parent c254d26e
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="874px" preserveAspectRatio="none" style="width:744px;height:874px;background:#FFFFFF;" version="1.1" viewBox="0 0 744 874" width="744px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="328" x="201.5" y="17.4023">Component diagram for Sanity Studio</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a] <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1209px" preserveAspectRatio="none" style="width:2078px;height:1209px;background:#FFFFFF;" version="1.1" viewBox="0 0 2078 1209" width="2078px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="328" x="868.605" y="17.4023">Component diagram for Sanity Studio</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a]
cluster api--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="512" x="56.25" y="258.6992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="130" x="247.25" y="276.168">SPA Application</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="280.75" y="291.1445">[Container]</text><!--MD5=[30860e21ba0e39165c540f9e23fe2d63] cluster api--><rect fill="#FFFFFF" height="568" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="765" x="7" y="186.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="130" x="324.5" y="203.668">SPA Application</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="358" y="218.6445">[Container]</text><!--MD5=[3ee045e728939fe034a5f1f68a887008]
entity sign--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="200" x="80.25" y="327.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="108.75" y="353.168">Sign In Controller</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="160.25" y="368.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="182.25" y="384.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="172" x="94.25" y="400.6992">Allows users to sign in to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="143.25" y="417.1875">the Studio.</text><!--MD5=[7d95986b1a7257a223a95834a13edd2e] cluster next--><a href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" target="_top" title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:actuate="onRequest" xlink:href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:show="new" xlink:title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:type="simple"><rect fill="#FFFFFF" height="290" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="851" x="887" y="480.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="72" x="1276.5" y="497.668">Next app</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1281" y="512.6445">[Container]</text></a><!--MD5=[d5ac3844f66b12d9e08170e47495e096]
entity import_tool--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="209" x="316" y="319.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="91" x="375" y="344.668">Import tool</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="400.5" y="359.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="422.5" y="375.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="351" y="392.1992">Plugin for importing</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="326" y="408.6875">external resources into the</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="396.5" y="425.1758">Studio.</text><!--MD5=[33573e971ff506c0f246109ca3fd77bd] cluster app--><rect fill="#FFFFFF" height="190" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="182" x="1532" y="548.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="110" x="1568" y="565.668">Preview fetch</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1591.5" y="580.6445">[Container]</text><!--MD5=[ccd133e9ad8ee15f0a1e2d6545982481]
entity spa--><rect fill="#438DD5" height="118.9297" style="stroke:#3C7FC0;stroke-width:1.5;" width="202" x="527.25" y="40.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="142" x="557.25" y="65.668">Sanity Studio SPA</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="565.25" y="80.6445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="630.25" y="96.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="130" x="563.25" y="113.1992">Provides all editing</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="537.25" y="129.6875">functionality to editors via</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="128" x="564.25" y="146.1758">their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061] cluster next_api--><rect fill="#FFFFFF" height="206" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="536" x="911" y="540.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="121" x="1118.5" y="557.668">Server side API</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1147.5" y="572.6445">[Container]</text><!--MD5=[30860e21ba0e39165c540f9e23fe2d63]
entity sanity_db--><path d="M209,37.1992 C209,27.1992 309.5,27.1992 309.5,27.1992 C309.5,27.1992 410,27.1992 410,37.1992 L410,162.1523 C410,172.1523 309.5,172.1523 309.5,172.1523 C309.5,172.1523 209,172.1523 209,162.1523 L209,37.1992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M209,37.1992 C209,47.1992 309.5,47.1992 309.5,47.1992 C309.5,47.1992 410,47.1992 410,37.1992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="284.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="51.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="225.5" y="116.668">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="267" y="131.6445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="311.5" y="147.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="223" y="164.1992">Stores metadata and files.</text><!--MD5=[e29493a8775effcafa538aa0485107d1] entity sign--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="200" x="284" y="291.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="312.5" y="316.668">Sign In Controller</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="364" y="331.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="386" y="347.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="172" x="298" y="364.1992">Allows users to sign in to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="347" y="380.6875">the Studio.</text><!--MD5=[7d95986b1a7257a223a95834a13edd2e]
entity auth--><rect fill="#B3B3B3" height="133.9531" style="stroke:#A6A6A6;stroke-width:1.5;" width="203" x="7" y="548.6992"/><image height="48" width="48" x="84.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB5ElEQVR4Xu2YsZLCMAxE+f/fUXMNDQ0NDQ1NmjQ0NGloqLgde86ElWQrYZhkbvIqJsjrjWUpTnayMnZ8YWk2Qy02Qy3+haGfMDwywARDx+Pxfr8/J4Ihh8OBtXyihvb7PU81BQxnRYeoodvtlqUvl8vj8XifzgZhCM6/MZwVHUKGkKwyB+51GIbXtD4IQ3BxDxHWtQgZmrF1NBBhXYu2obLsnwMpVlc0DKF0WTXR9/25CgJ4TKLZCxqGTN3g4puJhiDHvVMzhP7Beong9iylQNTbUs2QWU3X65XjfBDM41P1cdwI19DpdGKlRLzFid9OIc6hf7iGzO7XdR2FYUpcHBL4oe3iIqukfkZhBdtQUMXcJXqHmffmtQDDkFfqtM5eOp4qrV72zRZgGAruRLMjZHRmzfowW4BhKEfDFvpbGaxr1Zwjo92POwhky6OawmQpQyUJFCamodWlzNuti21qCZe9OZNuembZ61XM2IYkrILFwMp/vTGKc/dPlY46wZY2xjUkzk5c7OEq/vFDtwCTecNrhmTWLRbMBTZLfUzDkLcJFjvCytoO+RnzdDyV4Ek8ZKi0gLW8KMraXqWl+uSKEG+nUUPyweeYYLIyEwwVXh+k3tF/8cgAcwx9lc1Qi81Qi81Qi18VHxRxhtGvjgAAAABJRU5ErkJggg==" y="558.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="183" x="17" y="622.168">Google Authentication</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="66" y="637.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="110.5" y="653.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="150" x="35.5" y="669.6992">Authenticates editors.</text><!--MD5=[e2ca8134d4d6579ee847ece18521a18e] entity import_tool--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="209" x="519.75" y="282.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="91" x="578.75" y="308.168">Import tool</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="604.25" y="323.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="626.25" y="339.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="554.75" y="355.6992">Plugin for importing</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="529.75" y="372.1875">external resources into the</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="600.25" y="388.6758">Studio.</text><!--MD5=[4a25415281e815767a329b93358bb1b9]
entity marcus--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="245" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="60" x="285.5" y="605.168">Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="317.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="259" y="638.5664">Content provider</text><!--MD5=[869122dbb59a4f5702fe9cdcd390c614] entity preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="217" x="31.75" y="291.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="110" x="85.25" y="316.668">Desk preview</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="120.25" y="331.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="142.25" y="347.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="193" x="45.75" y="364.1992">Preview tab addition to desk</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="44" x="118.25" y="380.6875">forms.</text><!--MD5=[698d913457f9c86de3bf77a2a7de22cf]
entity kulturnav--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="421" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="80" x="451.5" y="605.168">Kulturnav</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="493.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="435" y="638.5664">Content provider</text><!--MD5=[29e43f0d87d4a5e4fc25a2c204ebb0f3] entity resolveProductionUrl--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="213" x="404.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="172" x="425.25" y="653.668">resolveProductionUrl</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="491.25" y="668.6445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="513.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="418.75" y="701.1992">Sends correct id to preview</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="146" x="438.25" y="717.6875">api along with secret.</text><!--MD5=[3b003e53f0c5c3fd2bdf9e50327f52d3]
entity nb--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="597" y="579.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="47" x="644" y="605.168">NB.no</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="669.5" y="622.0781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="611" y="638.5664">Content provider</text><!--MD5=[10c2457638a95e38b5d87a5d20a81c8c] entity overlay--><rect fill="#85BBF0" height="85.9531" style="stroke:#78A8D8;stroke-width:1.5;" width="150" x="1548" y="636.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="16" x="1615" y="661.668">/*</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1602.5" y="676.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1625" y="692.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1562" y="709.1992">Serves static page.</text><!--MD5=[1efdf5ff296020223cd10859dff9c219]
link import_tool to sanity_db--><path d="M396.69,318.9042 C380.478,278.4482 358.755,224.2372 341.016,179.9722 " fill="none" id="import_tool-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="337.98,172.3942,338.1705,180.9361,343.7401,178.7046,337.98,172.3942" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="363.25" y="222.8008">Uses</text><!--MD5=[cc6e701350592b60920a324fb448bbde] entity api_preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="279" x="1151.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="259" x="1161.75" y="653.668">/api/preview?token=[]&amp;slug=[]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1270.75" y="668.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1293.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="166" x="1208.25" y="701.1992">Validates token and sets</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="1210.75" y="717.6875">preview variable to true</text><!--MD5=[7fb0a03ec23579436cc251699a593eb9]
link import_tool to marcus--><path d="M394.025,438.3932 C375.481,479.8962 351.045,534.5872 334.335,571.9842 " fill="none" id="import_tool-to-marcus" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="330.892,579.6912,336.895,573.6114,331.4171,571.1634,330.892,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="372.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="373.75" y="513.9336">[HTTPS]</text><!--MD5=[ce03490f95923a2a4bf4a1a880a51bb0] entity api_exit_preview--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="189" x="927.75" y="628.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="146" x="949.25" y="653.668">/api/exit-preview</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1001.75" y="668.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1024.25" y="684.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="941.75" y="701.1992">Sets preview variable to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="32" x="1006.25" y="717.6875">false</text><!--MD5=[33573e971ff506c0f246109ca3fd77bd]
link import_tool to kulturnav--><path d="M437.983,438.3932 C450.522,479.8962 467.046,534.5872 478.345,571.9842 " fill="none" id="import_tool-to-kulturnav" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="480.673,579.6912,481.2321,571.1655,475.4883,572.9001,480.673,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="463.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="464.75" y="513.9336">[HTTPS]</text><!--MD5=[72e6538a4afd9ff6e5f89c0cb2220dab] entity spa--><rect fill="#438DD5" height="168.9297" style="stroke:#3C7FC0;stroke-width:1.5;" width="202" x="687" y="848.6992"/><image height="50" width="50" x="763" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="858.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="142" x="717" y="924.168">Sanity Studio SPA</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="725" y="939.1445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="790" y="955.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="130" x="723" y="971.6992">Provides all editing</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="697" y="988.1875">functionality to editors via</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="128" x="724" y="1004.6758">their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061]
link import_tool to nb--><path d="M481.941,438.3932 C526.294,480.5912 584.975,536.4222 624.312,573.8472 " fill="none" id="import_tool-to-nb" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="630.454,579.6912,626.7261,572.0034,622.5903,576.3503,630.454,579.6912" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="566.25" y="499.8008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="567.75" y="513.9336">[HTTPS]</text><!--MD5=[8d00e1f70b11306d90ba31f906661b1d] entity sanity_db--><path d="M1825.75,870.6992 C1825.75,860.6992 1926.25,860.6992 1926.25,860.6992 C1926.25,860.6992 2026.75,860.6992 2026.75,870.6992 L2026.75,995.6523 C2026.75,1005.6523 1926.25,1005.6523 1926.25,1005.6523 C1926.25,1005.6523 1825.75,1005.6523 1825.75,995.6523 L1825.75,870.6992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M1825.75,870.6992 C1825.75,880.6992 1926.25,880.6992 1926.25,880.6992 C1926.25,880.6992 2026.75,880.6992 2026.75,870.6992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="1901.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="884.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="1842.25" y="950.168">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="1883.75" y="965.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1928.25" y="981.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="1839.75" y="997.6992">Stores metadata and files.</text><!--MD5=[e29493a8775effcafa538aa0485107d1]
reverse link sanity_db to spa--><path d="M418.161,99.6992 C453.464,99.6992 492.454,99.6992 527.163,99.6992 " fill="none" id="sanity_db-backto-spa" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="409.746,99.6992,417.746,102.6992,417.746,96.6992,409.746,99.6992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="452.75" y="78.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="427.75" y="92.4336">[JSON/HTTPS]</text><!--MD5=[b20751f21bc3c5e56073fe913b5ac5ab] entity auth--><rect fill="#B3B3B3" height="133.9531" style="stroke:#A6A6A6;stroke-width:1.5;" width="203" x="1754.75" y="612.1992"/><image height="48" width="48" x="1832.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB5ElEQVR4Xu2YsZLCMAxE+f/fUXMNDQ0NDQ1NmjQ0NGloqLgde86ElWQrYZhkbvIqJsjrjWUpTnayMnZ8YWk2Qy02Qy3+haGfMDwywARDx+Pxfr8/J4Ihh8OBtXyihvb7PU81BQxnRYeoodvtlqUvl8vj8XifzgZhCM6/MZwVHUKGkKwyB+51GIbXtD4IQ3BxDxHWtQgZmrF1NBBhXYu2obLsnwMpVlc0DKF0WTXR9/25CgJ4TKLZCxqGTN3g4puJhiDHvVMzhP7Beong9iylQNTbUs2QWU3X65XjfBDM41P1cdwI19DpdGKlRLzFid9OIc6hf7iGzO7XdR2FYUpcHBL4oe3iIqukfkZhBdtQUMXcJXqHmffmtQDDkFfqtM5eOp4qrV72zRZgGAruRLMjZHRmzfowW4BhKEfDFvpbGaxr1Zwjo92POwhky6OawmQpQyUJFCamodWlzNuti21qCZe9OZNuembZ61XM2IYkrILFwMp/vTGKc/dPlY46wZY2xjUkzk5c7OEq/vFDtwCTecNrhmTWLRbMBTZLfUzDkLcJFjvCytoO+RnzdDyV4Ek8ZKi0gLW8KMraXqWl+uSKEG+nUUPyweeYYLIyEwwVXh+k3tF/8cgAcwx9lc1Qi81Qi81Qi18VHxRxhtGvjgAAAABJRU5ErkJggg==" y="622.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="183" x="1764.75" y="685.668">Google Authentication</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="1813.75" y="700.6445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1858.25" y="716.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="150" x="1783.25" y="733.1992">Authenticates editors.</text><!--MD5=[e2ca8134d4d6579ee847ece18521a18e]
link spa to api--><path d="M613.829,159.4442 C604.0045,199.4642 590.8715,252.9615 580.0668,296.9745 C577.3656,307.9777 574.8099,318.3882 572.4878,327.8471 C571.3268,332.5766 570.2241,337.0682 569.1909,341.2771 C568.9326,342.3293 568.6786,343.3638 568.4291,344.38 " fill="none" id="spa-to-api" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="568.4291,344.38,573.2499,337.3259,567.423,335.8954,568.4291,344.38" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="628.25" y="215.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="603.25" y="229.9336">[JSON/HTTPS]</text><!--MD5=[0b4537366c46ce983a36229d7d90ca4d] entity marcus--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="729.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="60" x="770.25" y="53.668">Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="802.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="743.75" y="87.0664">Content provider</text><!--MD5=[869122dbb59a4f5702fe9cdcd390c614]
link sign to auth--><path d="M164.893,429.8242 C155.025,462.0322 142.032,504.4402 130.979,540.5142 " fill="none" id="sign-to-auth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="128.507,548.5832,133.7181,541.8124,127.9812,540.0554,128.507,548.5832" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="173.25" y="499.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="148.25" y="513.9336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="563" y="695.6523"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="569" y="716.1875">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="624" y="716.1875"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="719.1406"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="573" y="732.6758">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="735.6289"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="573" y="749.1641">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="752.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="573" y="765.6523">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="768.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="573" y="782.1406">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="785.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="573" y="798.6289">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="801.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="573" y="815.1172">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="818.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="573" y="831.6055">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="569" y="834.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="573" y="848.0938">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="702.6523" y2="702.6523"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="719.1406" y2="719.1406"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="735.6289" y2="735.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="752.1172" y2="752.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="768.6055" y2="768.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="785.0938" y2="785.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="801.582" y2="801.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="818.0703" y2="818.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="834.5586" y2="834.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="716" y1="851.0469" y2="851.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="569" x2="569" y1="702.6523" y2="851.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="716" x2="716" y1="702.6523" y2="851.0469"/><!--MD5=[fad32fe7eff3261b3d1a5eb3a35bfab4] entity kulturnav--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="553.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="80" x="584.25" y="53.668">Kulturnav</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="626.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="567.75" y="87.0664">Content provider</text><!--MD5=[29e43f0d87d4a5e4fc25a2c204ebb0f3]
entity nb--><rect fill="#999999" height="71.8203" style="stroke:#8A8A8A;stroke-width:1.5;" width="141" x="377.75" y="28.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="47" x="424.75" y="53.668">NB.no</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="450.25" y="70.5781"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="391.75" y="87.0664">Content provider</text><!--MD5=[10c2457638a95e38b5d87a5d20a81c8c]
link import_tool to sanity_db--><path d="M728.298,401.0962 C729.533,401.4792 730.767,401.8472 732,402.1992 C865.014,440.1782 1879.98,371.6732 1975,472.1992 C2071.21,573.9792 2013.61,750.5472 1967.1,852.7842 " fill="none" id="import_tool-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1963.63,860.3182,1969.6993,854.3046,1964.2486,851.7966,1963.63,860.3182" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="2028" y="683.3008">Uses</text><!--MD5=[9275baae73afe07bd484df2dfc6ef7ed]
link preview to resolveProductionUrl--><path d="M195.542,393.3522 C263.533,454.7452 378.331,558.4042 449.097,622.3032 " fill="none" id="preview-to-resolveProductionUrl" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="455.382,627.9772,451.4552,620.389,447.434,624.8421,455.382,627.9772" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="272" y="452.3008">Uses</text><!--MD5=[0b4537366c46ce983a36229d7d90ca4d]
link sign to auth--><path d="M477.578,393.2482 C485.71,396.5952 493.92,399.6442 502,402.1992 C587.701,429.2992 620.593,394.0962 702,432.1992 C721.389,441.2742 718.021,456.5092 738,464.1992 C763.302,473.9382 1690.05,459.4942 1714,472.1992 C1766.72,500.1682 1803.76,557.4552 1826.76,604.5332 " fill="none" id="sign-to-auth" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1830.33,611.9952,1829.5823,603.484,1824.1703,606.0743,1830.33,611.9952" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="764" y="445.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="739" y="459.4336">[JSON/HTTPS]</text><!--MD5=[4a95faa665d3139c578f5686cfd0df5c]
link api_preview to overlay--><path d="M1430.35,679.1992 C1467.49,679.1992 1506.45,679.1992 1539.54,679.1992 " fill="none" id="api_preview-to-overlay" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1547.82,679.1992,1539.82,676.1992,1539.82,682.1992,1547.82,679.1992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="57" x="1460" y="657.8008">Redirects</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1448.5" y="671.9336">[JSON/HTTPS]</text><!--MD5=[b45430e1be5c19f53a00538edff2ec11]
reverse link preview to overlay--><path d="M250.728,396.3782 C255.858,398.4212 260.965,400.3732 266,402.1992 C367.545,439.0292 393.939,449.8532 501,464.1992 C527.046,467.6892 1423.18,461.0982 1447,472.1992 C1519.7,506.0782 1573.63,586.2062 1601.54,635.9502 " fill="none" id="preview-backto-overlay" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="243.201,393.3242,249.4855,399.1125,251.7419,393.553,243.201,393.3242" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="105" x="502" y="445.3008">Streams changes</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="514.5" y="459.4336">[JSON/HTTPS]</text><!--MD5=[aa78c49c6c5bdca418a70581d35c44a2]
reverse link marcus to import_tool--><path d="M772.464,107.4772 C760.05,126.5992 745.236,149.5042 732,170.1992 C708.162,207.4702 681.627,249.4772 660.824,282.5292 " fill="none" id="marcus-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="776.922,100.6142,770.0491,105.6899,775.0812,108.9576,776.922,100.6142" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="758" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="759.5" y="157.4336">[HTTPS]</text><!--MD5=[397c656162bdf1374bc84609635dfd08]
reverse link kulturnav to import_tool--><path d="M624,108.5642 C624,155.4452 624,230.4362 624,282.5532 " fill="none" id="kulturnav-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="624,100.4352,621,108.4352,627,108.4352,624,100.4352" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="625" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="626.5" y="157.4336">[HTTPS]</text><!--MD5=[b1bebbe118c8398e4de9e7b4fd539094]
reverse link nb to import_tool--><path d="M474.914,107.4052 C504.755,154.2012 553.093,230.0042 586.603,282.5532 " fill="none" id="nb-backto-import_tool" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="470.469,100.4352,472.2407,108.7935,477.2997,105.5676,470.469,100.4352" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="49" x="506" y="143.3008">Imports</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="46" x="507.5" y="157.4336">[HTTPS]</text><!--MD5=[0271d862dad669faf31941ba3e900435]
link spa to sanity_db--><path d="M889.24,933.1992 C1102.85,933.1992 1598.01,933.1992 1817.68,933.1992 " fill="none" id="spa-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1825.7,933.1992,1817.7,930.1992,1817.7,936.1992,1825.7,933.1992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1341.75" y="911.8008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1316.75" y="925.9336">[JSON/HTTPS]</text><!--MD5=[13cfa0366951c83b0d0b9eca32570194]
link overlay to sanity_db--><path d="M1671.3,722.2082 C1691.5,739.6512 1715.28,760.0242 1737,778.1992 C1767.3,803.5612 1800.64,830.9062 1830.77,855.4152 " fill="none" id="overlay-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1837.14,860.6002,1832.8225,853.2273,1829.0392,857.8842,1837.14,860.6002" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1809" y="799.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1784" y="813.4336">[JSON/HTTPS]</text><!--MD5=[32a41e1aa2dd9c3ad96b8807953e5b39]
link resolveProductionUrl to api_preview--><path d="M554.152,628.1282 C597.054,581.6612 667.508,516.2542 745,488.6992 C907.897,430.7752 977.634,414.9412 1134,488.6992 C1191.4,515.7732 1234.92,575.2642 1261.42,620.6122 " fill="none" id="resolveProductionUrl-to-api_preview" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1265.53,627.7612,1264.1501,619.3294,1258.9461,622.3158,1265.53,627.7612" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="643.5" y="445.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="618.5" y="459.4336">[JSON/HTTPS]</text><!--MD5=[c6021ebbec22d1130f0072b34dcfbf7b]
reverse link api to spa--><path d="M772.0626,350.5985 C772.2115,350.7413 772.362,350.886 772.5141,351.0326 C772.8183,351.3257 773.1289,351.6263 773.4457,351.9343 C778.5137,356.861 785.1492,363.6624 792.1529,371.7943 C806.1602,388.0582 821.6405,409.6442 829,432.1992 C834.516,449.1052 829.873,454.5152 828,472.1992 C814.087,603.5322 801.515,756.3402 794.32,848.5892 " fill="none" id="api-backto-spa" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="772.0626,350.5985,775.7583,358.3019,779.9123,353.9723,772.0626,350.5985" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="854" y="676.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="829" y="690.4336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="1897.21" y="1030.6289"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="1903.21" y="1051.1641">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1958.21" y="1051.1641"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1054.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="1907.21" y="1067.6523">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1070.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="1907.21" y="1084.1406">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1087.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="1907.21" y="1100.6289">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1103.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="1907.21" y="1117.1172">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1120.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="1907.21" y="1133.6055">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1136.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="1907.21" y="1150.0938">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1153.0469"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1907.21" y="1166.582">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1903.21" y="1169.5352"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="1907.21" y="1183.0703">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1037.6289" y2="1037.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1054.1172" y2="1054.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1070.6055" y2="1070.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1087.0938" y2="1087.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1103.582" y2="1103.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1120.0703" y2="1120.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1136.5586" y2="1136.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1153.0469" y2="1153.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1169.5352" y2="1169.5352"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="2050.21" y1="1186.0234" y2="1186.0234"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1903.21" x2="1903.21" y1="1037.6289" y2="1186.0234"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="2050.21" x2="2050.21" y1="1037.6289" y2="1186.0234"/><!--MD5=[3a8f21caa493a496c238741778101e89]
@startuml "component_studio" @startuml "component_studio"
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
' uncomment the following line and comment the first to use locally ' uncomment the following line and comment the first to use locally
...@@ -34,7 +47,7 @@ LAYOUT_WITH_LEGEND() ...@@ -34,7 +47,7 @@ LAYOUT_WITH_LEGEND()
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.") Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.", SANITY)
ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY") ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY")
Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform") Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform")
...@@ -45,17 +58,35 @@ System_Ext(nb, "NB.no", "Content provider") ...@@ -45,17 +58,35 @@ System_Ext(nb, "NB.no", "Content provider")
Container_Boundary(api, "SPA Application", "SANITY") { Container_Boundary(api, "SPA Application", "SANITY") {
Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.") Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.")
Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.") Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.")
Component(preview, "Desk preview", "React", "Preview tab addition to desk forms.")
Component(resolveProductionUrl, "resolveProductionUrl", "React", "Sends correct id to preview api along with secret.")
Rel(import_tool, sanity_db, "Uses") Rel(import_tool, sanity_db, "Uses")
Rel(preview, resolveProductionUrl, "Uses")
Rel(sign, auth, "Uses", "JSON/HTTPS")
}
Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(app, "Preview fetch") {
Component(overlay, "/*", "Route", "Serves static page.")
}
Container_Boundary(next_api, "Server side API") {
Component(api_preview, "/api/preview?token=[]&slug=[]", "Route", "Validates token and sets preview variable to true")
Component(api_exit_preview, "/api/exit-preview", "Route", "Sets preview variable to false")
}
Rel_R(api_preview, overlay, "Redirects", "JSON/HTTPS")
Rel_U(overlay, preview, "Streams changes", "JSON/HTTPS")
} }
Rel_D(import_tool, marcus, "Imports", "HTTPS") Rel_U(import_tool, marcus, "Imports", "HTTPS")
Rel_D(import_tool, kulturnav, "Imports", "HTTPS") Rel_U(import_tool, kulturnav, "Imports", "HTTPS")
Rel_D(import_tool, nb, "Imports", "HTTPS") Rel_U(import_tool, nb, "Imports", "HTTPS")
Rel_L(spa, sanity_db, "Uses", "JSON/HTTPS") Rel_R(spa, sanity_db, "Uses", "JSON/HTTPS")
Rel_D(spa, api, "Uses", "JSON/HTTPS") Rel_D(overlay, sanity_db, "Uses", "JSON/HTTPS")
Rel(sign, auth, "Uses", "JSON/HTTPS") Rel_R(resolveProductionUrl, api_preview, "Uses", "JSON/HTTPS")
Rel_U(spa, api, "Uses", "JSON/HTTPS")
@enduml @enduml
...@@ -727,7 +758,7 @@ endlegend ...@@ -727,7 +758,7 @@ endlegend
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
rectangle "==Sanity Studio SPA\n//<size:12>[Javascript and React]</size>//\n\n Provides all editing functionality to editors via their web browser." <<container>> as spa rectangle "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Studio SPA\n//<size:12>[Javascript and React]</size>//\n\n Provides all editing functionality to editors via their web browser." <<container>> as spa
database "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Cloud Storage\n//<size:12>[Google Cloud]</size>//\n\n Stores metadata and files." <<external_container>> as sanity_db database "<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ+2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW+3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw+/SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0+ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ+ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR+pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA+jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw+h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6+j8+Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>\n==Sanity Cloud Storage\n//<size:12>[Google Cloud]</size>//\n\n Stores metadata and files." <<external_container>> as sanity_db
rectangle "<$google_cloud_platform>\n==Google Authentication\n//<size:12>[Google Cloud]</size>//\n\n Authenticates editors." <<external_container>> as auth rectangle "<$google_cloud_platform>\n==Google Authentication\n//<size:12>[Google Cloud]</size>//\n\n Authenticates editors." <<external_container>> as auth
...@@ -738,17 +769,35 @@ rectangle "==NB.no\n\n Content provider" <<external_system>> as nb ...@@ -738,17 +769,35 @@ rectangle "==NB.no\n\n Content provider" <<external_system>> as nb
rectangle "==SPA Application\n<size:12>[Container]</size>" <<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ>><<2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW>><<3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw>><</SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0>><<ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ>><<ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR>><<pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA>><<jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw>><<h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6>><<j8>><<Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>><<boundary>> as api { rectangle "==SPA Application\n<size:12>[Container]</size>" <<img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACeklEQVRoQ>><<2ZQU5bQQyGPe8hVWkT0mOgqlUldskNkos06aaLwIojlGzbHgTBCYA1C9hwiUYEWkQSI0cMekomE9vjlwBK1jO2P//2eObFwRv5uTfCARuQl6bkRpGQIje9DnKVogxW>><<3/MEmliSAIQAq0ZACWBpAIUoTLn4MPhb3U86o2WEEUgrToqkLIgPJAGRgwyaDUw>><</SV29PqdVIYMcjfVgNzBkgokGHvGyJzBq8dhBMAtzQ5trzkIkVIjenGLIN858tc2Ugc0>><<ZlQBJ7OhAAmC0viVOfgX/733E0mUT7iGtXDULePYxzDqrKGWClShIITMaQf94FbtbURxhjYxrIk4OPJ>><<ciO4y4xEtEATw3e8BN7hzUjs9E9sTRRjaIHMdAij7WoZAIhILlwniwSp7Bu6NTsR>><<pWmIHUpBQQOS0btxXYhCNKrHs0vV926C3VCB0cWQ/BQU1ktJbKhCKrSwYBw7qJ/LTTw3iE23RM7OiaXooGcQHMWg3EQ0LzjmA>><<jF/0JqBzGZ10GoiQlonSXqmNJA5sHZDJRgXZmUgWsVePEgRLHZgvCqQ2JB9VSC3vS5OAGF8dTE3Ps1BrF5yoUFftF29voTBw>><<h52cpB6D3y3ui5W1Rm5SCUQs2TN6R0qSAU6LLyksLc7XVxHLgNUEL8SWauCBfEF3dMnWGvu3TqkypcCPIpHogcVQQ394VLSweRKqOFkvabWBEKbLjfQYx/INTGP90nhVCVVjHCMspMA5EMQgbw4AcO/98nKTANxAFUD/V/jqpKa9l0llBtZRlUfv5KjiPZwKKg41/aHdT6>><<j8>><<Qz5LA5GoYrF2A2KRRUsbG0Uss2lh6xFkswBC9e0BzQAAAABJRU5ErkJggg==>><<boundary>> as api {
rectangle "==Sign In Controller\n//<size:12>[React]</size>//\n\n Allows users to sign in to the Studio." <<component>> as sign rectangle "==Sign In Controller\n//<size:12>[React]</size>//\n\n Allows users to sign in to the Studio." <<component>> as sign
rectangle "==Import tool\n//<size:12>[React]</size>//\n\n Plugin for importing external resources into the Studio." <<component>> as import_tool rectangle "==Import tool\n//<size:12>[React]</size>//\n\n Plugin for importing external resources into the Studio." <<component>> as import_tool
rectangle "==Desk preview\n//<size:12>[React]</size>//\n\n Preview tab addition to desk forms." <<component>> as preview
rectangle "==resolveProductionUrl\n//<size:12>[React]</size>//\n\n Sends correct id to preview api along with secret." <<component>> as resolveProductionUrl
import_tool - ->> sanity_db : **Uses** import_tool - ->> sanity_db : **Uses**
preview - ->> resolveProductionUrl : **Uses**
sign - ->> auth : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
}
rectangle "==Next app\n<size:12>[Container]</size>" <<boundary>> as next [[img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC]] {
rectangle "==Preview fetch\n<size:12>[Container]</size>" <<boundary>> as app {
rectangle "==/*\n//<size:12>[Route]</size>//\n\n Serves static page." <<component>> as overlay
}
rectangle "==Server side API\n<size:12>[Container]</size>" <<boundary>> as next_api {
rectangle "==/api/preview?token=[]&slug=[]\n//<size:12>[Route]</size>//\n\n Validates token and sets preview variable to true" <<component>> as api_preview
rectangle "==/api/exit-preview\n//<size:12>[Route]</size>//\n\n Sets preview variable to false" <<component>> as api_exit_preview
}
api_preview -RIGHT->> overlay : **Redirects**\n//<size:12>[JSON/HTTPS]</size>//
overlay -UP->> preview : **Streams changes**\n//<size:12>[JSON/HTTPS]</size>//
} }
import_tool -DOWN->> marcus : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> marcus : **Imports**\n//<size:12>[HTTPS]</size>//
import_tool -DOWN->> kulturnav : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> kulturnav : **Imports**\n//<size:12>[HTTPS]</size>//
import_tool -DOWN->> nb : **Imports**\n//<size:12>[HTTPS]</size>// import_tool -UP->> nb : **Imports**\n//<size:12>[HTTPS]</size>//
spa -LEFT->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>// spa -RIGHT->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
spa -DOWN->> api : **Uses**\n//<size:12>[JSON/HTTPS]</size>// overlay -DOWN->> sanity_db : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
sign - ->> auth : **Uses**\n//<size:12>[JSON/HTTPS]</size>// resolveProductionUrl -RIGHT->> api_preview : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
spa -UP->> api : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
@enduml @enduml
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1542px" preserveAspectRatio="none" style="width:849px;height:1542px;background:#FFFFFF;" version="1.1" viewBox="0 0 849 1542" width="849px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="337" x="249.5" y="17.4023">Component diagram for Next frontend</text><!--MD5=[3ee045e728939fe034a5f1f68a887008] <?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1543px" preserveAspectRatio="none" style="width:1487px;height:1543px;background:#FFFFFF;" version="1.1" viewBox="0 0 1487 1543" width="1487px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="337" x="568.5" y="17.4023">Component diagram for Next frontend</text><!--MD5=[3ee045e728939fe034a5f1f68a887008]
cluster next--><a href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" target="_top" title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:actuate="onRequest" xlink:href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:show="new" xlink:title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:type="simple"><rect fill="#FFFFFF" height="868" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="534" x="229" y="258.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="72" x="460" y="275.668">Next app</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="464.5" y="290.6445">[Container]</text></a><!--MD5=[d5ac3844f66b12d9e08170e47495e096] cluster next--><a href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" target="_top" title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:actuate="onRequest" xlink:href="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:show="new" xlink:title="img:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABm0lEQVRoQ92Z25LDMAhDt///0dtJpu4kDhgBimPaZ0x0LPCtrz/+7x9I+QJiXCGshIj4kbC0jkyCrHgNLKQpMugugCOYW5d3wAyIEBAKMhvADYOAPAkBA1kgq0A0IFXvCGQ1iCGMBrIqxAYjaq4IIsJIICu7oTZ/D1IF4uJKZZATzBGkkhuXEnsahPH9PUdLlHEjIyYz9rSv/ALIbggbZEvqcZfhyG0gHhgqiGcGpVtdZlNdHgR1hQWyr1p3ONKcs3IvC7IJ94jzxA6fh9iONAdQgWic+cY1A2TUL8uD9KdTrVdKgCAwJUGkEisDYrlSCgSFsfac4SM4+9CINLVWYiVAEFfKgFgw5qanBJxuiOghzzr9IrNKa/CPmN8FiboSWTBYrnzz9JcipDSitdyPY8CoIFFXInBZkJMJmWtqRDzLlYtuCWSmK9ElGQZ5CgbpUXHyNUfQOzejvDyuqHotkJnOWM0/1IqAPAHTl5ip0ww41A5Sv4xSO26wsD44cCJQRJP8Dyk4rXc5NB2EvbKFAJqI1GDBOY9L1G+/AToZcCqjfA/hAAAAAElFTkSuQmCC" xlink:type="simple"><rect fill="#FFFFFF" height="869" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="1173" x="229" y="258.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="72" x="779.5" y="275.668">Next app</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="784" y="290.6445">[Container]</text></a><!--MD5=[d5ac3844f66b12d9e08170e47495e096]
cluster app--><rect fill="#FFFFFF" height="186" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="470" x="261" y="326.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="48" x="472" y="343.668">Pages</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="464.5" y="358.6445">[Container]</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a] cluster app--><rect fill="#FFFFFF" height="186" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="470" x="900" y="327.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="48" x="1111" y="344.668">Pages</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1103.5" y="359.6445">[Container]</text><!--MD5=[7442f3b126ee602ae02566c1a49e158a]
cluster api--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="285" x="409" y="890.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="121" x="491" y="907.668">Server side API</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="520" y="922.6445">[Container]</text><!--MD5=[67a6735b2a5707e03290b64fb931c9ce] cluster api--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="285" x="1043" y="891.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="121" x="1125" y="908.668">Server side API</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1154" y="923.6445">[Container]</text><!--MD5=[67a6735b2a5707e03290b64fb931c9ce]
cluster components--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="285" x="266" y="592.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="104" x="356.5" y="609.668">Components</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="377" y="624.6445">[Container]</text><!--MD5=[85f4d1a33338ddce045f9b827d37a273] cluster components--><rect fill="#FFFFFF" height="204" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="285" x="900" y="593.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="104" x="990.5" y="610.668">Components</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="1011" y="625.6445">[Container]</text><!--MD5=[9a53b195b9e6dcc8c7a5cc20ca36bc92]
entity pages--><rect fill="#85BBF0" height="85.9531" style="stroke:#78A8D8;stroke-width:1.5;" width="150" x="557" y="394.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="54" x="605" y="419.668">/items</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="611.5" y="434.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="634" y="450.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="571" y="467.1992">Serves static page.</text><!--MD5=[5d258d01bf6889cf2f44a7b6e9a9e8ae] cluster functions--><rect fill="#FFFFFF" height="462" style="stroke:#444444;stroke-width:1.0;stroke-dasharray:7.0,7.0;" width="490" x="253" y="318.1992"/><text fill="#444444" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="81" x="457.5" y="335.668">Functions</text><text fill="#444444" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="466.5" y="350.6445">[Container]</text><!--MD5=[85f4d1a33338ddce045f9b827d37a273]
entity id--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="217" x="304.75" y="386.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="37" x="394.75" y="411.668">/[id]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="392.75" y="426.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="415.25" y="442.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="189" x="318.75" y="459.1992">Serves static page based on</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="75" x="375.75" y="475.6875">id variable.</text><!--MD5=[f5830ebc1bf7d5a9a4b07c85dbdf785d] entity pages--><rect fill="#85BBF0" height="85.9531" style="stroke:#78A8D8;stroke-width:1.5;" width="150" x="1196" y="395.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="54" x="1244" y="420.668">/items</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1250.5" y="435.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1273" y="451.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1210" y="468.1992">Serves static page.</text><!--MD5=[5d258d01bf6889cf2f44a7b6e9a9e8ae]
entity api_manifest--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="218" x="433" y="950.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="152" x="466" y="976.168">/api/manifest/[id]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="521.5" y="991.1445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="544" y="1007.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="174" x="455" y="1023.6992">Fetch basic metadata and</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198" x="443" y="1040.1875">connected images by id from</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="510.5" y="1056.6758">Sanity DB</text><!--MD5=[97d47de14f4cfe6ede125365af6aaf98] entity id--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="217" x="943.75" y="387.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="37" x="1033.75" y="412.668">/[id]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1031.75" y="427.6445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1054.25" y="443.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="189" x="957.75" y="460.1992">Serves static page based on</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="75" x="1014.75" y="476.6875">id variable.</text><!--MD5=[f5830ebc1bf7d5a9a4b07c85dbdf785d]
entity mirador_viewer--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="218" x="309" y="652.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="129" x="353.5" y="678.168">/miradorViewer</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="398" y="693.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="420" y="709.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="174" x="331" y="725.6992">Fetch basic metadata and</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198" x="319" y="742.1875">connected images by id from</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="386.5" y="758.6758">Sanity DB</text><!--MD5=[b1e3d2dcb3697de9e6328d1cb436cbc4] entity api_manifest--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="218" x="1067" y="951.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="152" x="1100" y="977.168">/api/manifest/[id]</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="41" x="1155.5" y="992.1445">[Route]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1178" y="1008.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="174" x="1089" y="1024.6992">Fetch basic metadata and</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198" x="1077" y="1041.1875">connected images by id from</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="1144.5" y="1057.6758">Sanity DB</text><!--MD5=[97d47de14f4cfe6ede125365af6aaf98]
entity frontend--><rect fill="#438DD5" height="152.4414" style="stroke:#3C7FC0;stroke-width:1.5;" width="206" x="517" y="28.1992"/><image height="50" width="50" x="595" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABfUlEQVR4XtWOAY7DIAwE+/9P36mVEm0HQ7wcTriRRmo9hvB6recn4bbwoa6Pwses8jb44QrL4QerXQ4/cKfL4MVP+Sd42dNOwUt20YKHd9KCh3czBQ/t6hAu7+wQLu9uCJf+iw1cuEOFLesXjI4K25UKW9YvGB0VtisVNscTBkfCPlJhczxhcIzgTk+FzfEDh64R3OmpsDl+4NC1B/ciFTbXZuA6grtUYXNtBq5K9H+kwubaDFyV0SxSYXNtBq5KNHvDM9Eem2szcFUyc3cnazNwVZyW6Y7NwFUZtTejzubaDFwVtqs+aq7NwFVhy+z05o4nDI4KW7TzJuqcOZ4wOCps2b1o5njC4KiwUYVt1gYuZFXYIhW2GRu4kFVhi1TYZgzhUsYDzkcqbI5duFipwpZ1CJerVNgyXsIDlSpsI9PwYKUKW08LHq70gPPIKXhJlQpbb8+Gl1WpsLFPw0urPOjNl8DLqzzQ3yXww6u9HT5glY/Bh8y6FXzcyKX8AqAq6Wv25cYoAAAAAElFTkSuQmCC" y="38.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="113" x="563.5" y="103.668">Next frontend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="557" y="118.6445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="622" y="134.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="531" y="151.1992">Provides all content to the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="527.5" y="167.6875">user via their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061] entity mirador_viewer--><rect fill="#85BBF0" height="118.9297" style="stroke:#78A8D8;stroke-width:1.5;" width="218" x="943" y="653.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="129" x="987.5" y="679.168">/miradorViewer</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="40" x="1032" y="694.1445">[React]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1054" y="710.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="174" x="965" y="726.6992">Fetch basic metadata and</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="198" x="953" y="743.1875">connected images by id from</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="1020.5" y="759.6758">Sanity DB</text><!--MD5=[5d835dae90d3665c59e762cd4fc1e624]
entity sanity_db--><path d="M441.75,1214.6992 C441.75,1204.6992 542.25,1204.6992 542.25,1204.6992 C542.25,1204.6992 642.75,1204.6992 642.75,1214.6992 L642.75,1339.6523 C642.75,1349.6523 542.25,1349.6523 542.25,1349.6523 C542.25,1349.6523 441.75,1349.6523 441.75,1339.6523 L441.75,1214.6992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M441.75,1214.6992 C441.75,1224.6992 542.25,1224.6992 542.25,1224.6992 C542.25,1224.6992 642.75,1224.6992 642.75,1214.6992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="517.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="1228.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="458.25" y="1294.168">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="499.75" y="1309.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="544.25" y="1325.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="455.75" y="1341.6992">Stores metadata and files.</text><!--MD5=[9a631f4ec9219869b7e8b94d6775f9b9] entity getStaticProps--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="220" x="503" y="662.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="117" x="554.5" y="687.668">getStaticProps</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="53" x="586.5" y="702.6445">[function]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="615" y="718.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="196" x="517" y="735.1992">Static Generation: Fetch data</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="90" x="568" y="751.6875">at build time.</text><!--MD5=[9ccdca984d9af2d1e9f265f00f81bcd4]
entity marcusManifest--><rect fill="#438DD5" height="152.4414" style="stroke:#3C7FC0;stroke-width:1.5;" width="206" x="7" y="934.1992"/><image height="50" width="50" x="85" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABfUlEQVR4XtWOAY7DIAwE+/9P36mVEm0HQ7wcTriRRmo9hvB6recn4bbwoa6Pwses8jb44QrL4QerXQ4/cKfL4MVP+Sd42dNOwUt20YKHd9KCh3czBQ/t6hAu7+wQLu9uCJf+iw1cuEOFLesXjI4K25UKW9YvGB0VtisVNscTBkfCPlJhczxhcIzgTk+FzfEDh64R3OmpsDl+4NC1B/ciFTbXZuA6grtUYXNtBq5K9H+kwubaDFyV0SxSYXNtBq5KNHvDM9Eem2szcFUyc3cnazNwVZyW6Y7NwFUZtTejzubaDFwVtqs+aq7NwFVhy+z05o4nDI4KW7TzJuqcOZ4wOCps2b1o5njC4KiwUYVt1gYuZFXYIhW2GRu4kFVhi1TYZgzhUsYDzkcqbI5duFipwpZ1CJerVNgyXsIDlSpsI9PwYKUKW08LHq70gPPIKXhJlQpbb8+Gl1WpsLFPw0urPOjNl8DLqzzQ3yXww6u9HT5glY/Bh8y6FXzcyKX8AqAq6Wv25cYoAAAAAElFTkSuQmCC" y="944.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="137" x="41.5" y="1009.668">Marcus manifest</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="35" x="92.5" y="1024.6445">[Next]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="112" y="1040.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="21" y="1057.1992">Temporary API for Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="63" y="1073.6875">IIIF manifests.</text><!--MD5=[de93d881034ae2b005eca73b65398148] entity getStaticPaths--><rect fill="#85BBF0" height="135.418" style="stroke:#78A8D8;stroke-width:1.5;" width="213" x="513.75" y="370.6992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="115" x="562.75" y="396.168">getStaticPaths</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="53" x="593.75" y="411.1445">[function]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="622.25" y="427.2109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="173" x="533.75" y="443.6992">Static Generation: Specify</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="123" x="556.75" y="460.1875">dynamic routes to</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="189" x="523.75" y="476.6758">pre-render pages based on</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="34" x="603.25" y="493.1641">data.</text><!--MD5=[44553005586debe443b4a4f7b85413f0]
entity sparql--><path d="M9,1239.6992 C9,1229.6992 110,1229.6992 110,1229.6992 C110,1229.6992 211,1229.6992 211,1239.6992 L211,1314.6523 C211,1324.6523 110,1324.6523 110,1324.6523 C110,1324.6523 9,1324.6523 9,1314.6523 L9,1239.6992 " fill="#438DD5" style="stroke:#3C7FC0;stroke-width:1.5;"/><path d="M9,1239.6992 C9,1249.6992 110,1249.6992 110,1249.6992 C110,1249.6992 211,1249.6992 211,1239.6992 " fill="none" style="stroke:#3C7FC0;stroke-width:1.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="38.5" y="1269.168">SPARQL endpoint</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="44" x="88" y="1284.1445">[Fuseki]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="112" y="1300.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="23" y="1316.6992">Data endpoint for Marcus.</text><!--MD5=[8ebd58f6b3375343ecaa75fe0bd18033] entity getServerSideProps--><rect fill="#85BBF0" height="102.4414" style="stroke:#78A8D8;stroke-width:1.5;" width="209" x="269.75" y="387.1992"/><text fill="#000000" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="157" x="295.75" y="412.668">getServerSideProps</text><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="53" x="347.75" y="427.6445">[function]</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="376.25" y="443.7109"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="158" x="295.25" y="460.1992">Server-side Rendering:</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="189" x="279.75" y="476.6875">Fetch data on each request.</text><!--MD5=[b1e3d2dcb3697de9e6328d1cb436cbc4]
link app to components--><path d="M270.3568,512.2871 C270.3654,512.7599 270.3741,513.2339 270.3828,513.7091 C270.4524,517.5111 270.5235,521.3925 270.5958,525.3375 C270.8848,541.1176 271.1924,557.9148 271.5,574.7117 C271.5769,578.911 271.6538,583.1102 271.7304,587.2935 C271.7496,588.3393 271.7687,589.3841 271.7878,590.4277 C271.7974,590.9495 271.8069,591.471 271.8165,591.9921 " fill="none" id="app-to-components" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="271.8165,591.9921,274.6695,583.9386,268.6705,584.0484,271.8165,591.9921" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="298" y="549.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="273" y="563.4336">[JSON/HTTPS]</text><!--MD5=[34cfbe26f1ff072a7179695b0f111cf6] entity frontend--><rect fill="#438DD5" height="152.4414" style="stroke:#3C7FC0;stroke-width:1.5;" width="206" x="1156" y="28.1992"/><image height="50" width="50" x="1234" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABfUlEQVR4XtWOAY7DIAwE+/9P36mVEm0HQ7wcTriRRmo9hvB6recn4bbwoa6Pwses8jb44QrL4QerXQ4/cKfL4MVP+Sd42dNOwUt20YKHd9KCh3czBQ/t6hAu7+wQLu9uCJf+iw1cuEOFLesXjI4K25UKW9YvGB0VtisVNscTBkfCPlJhczxhcIzgTk+FzfEDh64R3OmpsDl+4NC1B/ciFTbXZuA6grtUYXNtBq5K9H+kwubaDFyV0SxSYXNtBq5KNHvDM9Eem2szcFUyc3cnazNwVZyW6Y7NwFUZtTejzubaDFwVtqs+aq7NwFVhy+z05o4nDI4KW7TzJuqcOZ4wOCps2b1o5njC4KiwUYVt1gYuZFXYIhW2GRu4kFVhi1TYZgzhUsYDzkcqbI5duFipwpZ1CJerVNgyXsIDlSpsI9PwYKUKW08LHq70gPPIKXhJlQpbb8+Gl1WpsLFPw0urPOjNl8DLqzzQ3yXww6u9HT5glY/Bh8y6FXzcyKX8AqAq6Wv25cYoAAAAAElFTkSuQmCC" y="38.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="113" x="1202.5" y="103.668">Next frontend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="126" x="1196" y="118.6445">[Javascript and React]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1261" y="134.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="1170" y="151.1992">Provides all content to the</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="185" x="1166.5" y="167.6875">user via their web browser.</text><!--MD5=[3d74be2a757051a7059b41e555fce061]
link id to mirador_viewer--><path d="M413.917,488.2712 C414.719,532.0712 415.891,596.0392 416.773,644.2312 " fill="none" id="id-to-mirador_viewer" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="416.924,652.4292,419.7763,644.3754,413.7774,644.4858,416.924,652.4292" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="442" y="549.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="417" y="563.4336">[JSON/HTTPS]</text><!--MD5=[009f1bdadfdb747559dc589c849ab181] entity sanity_db--><path d="M1075.75,1215.6992 C1075.75,1205.6992 1176.25,1205.6992 1176.25,1205.6992 C1176.25,1205.6992 1276.75,1205.6992 1276.75,1215.6992 L1276.75,1340.6523 C1276.75,1350.6523 1176.25,1350.6523 1176.25,1350.6523 C1176.25,1350.6523 1075.75,1350.6523 1075.75,1340.6523 L1075.75,1215.6992 " fill="#B3B3B3" style="stroke:#A6A6A6;stroke-width:1.5;"/><path d="M1075.75,1215.6992 C1075.75,1225.6992 1176.25,1225.6992 1176.25,1225.6992 C1176.25,1225.6992 1276.75,1225.6992 1276.75,1215.6992 " fill="none" style="stroke:#A6A6A6;stroke-width:1.5;"/><image height="50" width="50" x="1151.25" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABjklEQVR4Xu2YzU7CQBRGeSoTJa4NaHwNxY2LwsqXplI0rpBLwEzOtGXa3tuZxjnJ2c39+SgNtLNZJpPJdGVXvB5CrY6yPjpcsqvsNzpcaIj79SpOIC6iJeeYwuHacp4J5eLWG2wh56qzDQzCOqEqXrxzTbJWnWtBeL4O1jTJOjUkxMnHuTe0z2DWU55X4y9IzVXh2RC+N29eH8oaFdwgbphqwG8AF6c8rwKDbB9u7IZZ4gU5y3PJwwCuu+XddAJx+SZZlyRc+po/T/M0g3HRPsrfHPaNAhcb4mfMe0s+US6kIeeMglWYchHpCnERDaPeQ+Xxu86FhlguI4Zxka8Il+sqeyaBfMJcNET2SY7QK8a6pOHykw0iMMAkg+yL1em5hiFMgvDJjfJ8F9w+h+f7uEG+FB93owYRWRMCe5gHETiwTta0IVeR9Zce0YOEBKrON3ebZiEucKCV5kEEDrWQM02oNv5gTTnPHC6gIWeMxuHj3Vumj9U6YggXLhaqvMhmr6Rof9Pe/19AJpP55/wCwk7g9HfTvaAAAAAASUVORK5CYII=" y="1229.6992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="168" x="1092.25" y="1295.168">Sanity Cloud Storage</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="85" x="1133.75" y="1310.1445">[Google Cloud]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1178.25" y="1326.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="177" x="1089.75" y="1342.6992">Stores metadata and files.</text><!--MD5=[9a631f4ec9219869b7e8b94d6775f9b9]
link mirador_viewer to api_manifest--><path d="M442.647,772.0332 C463.313,821.3672 492.808,891.7742 514.291,943.0542 " fill="none" id="mirador_viewer-to-api_manifest" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="517.4,950.4762,517.0755,941.9384,511.5416,944.2569,517.4,950.4762" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="506" y="840.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="481" y="854.4336">[JSON/HTTPS]</text><!--MD5=[c00afe3db0c8ea2b21346873462b2a20] entity marcusManifest--><rect fill="#438DD5" height="152.4414" style="stroke:#3C7FC0;stroke-width:1.5;" width="206" x="7" y="935.1992"/><image height="50" width="50" x="85" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABfUlEQVR4XtWOAY7DIAwE+/9P36mVEm0HQ7wcTriRRmo9hvB6recn4bbwoa6Pwses8jb44QrL4QerXQ4/cKfL4MVP+Sd42dNOwUt20YKHd9KCh3czBQ/t6hAu7+wQLu9uCJf+iw1cuEOFLesXjI4K25UKW9YvGB0VtisVNscTBkfCPlJhczxhcIzgTk+FzfEDh64R3OmpsDl+4NC1B/ciFTbXZuA6grtUYXNtBq5K9H+kwubaDFyV0SxSYXNtBq5KNHvDM9Eem2szcFUyc3cnazNwVZyW6Y7NwFUZtTejzubaDFwVtqs+aq7NwFVhy+z05o4nDI4KW7TzJuqcOZ4wOCps2b1o5njC4KiwUYVt1gYuZFXYIhW2GRu4kFVhi1TYZgzhUsYDzkcqbI5duFipwpZ1CJerVNgyXsIDlSpsI9PwYKUKW08LHq70gPPIKXhJlQpbb8+Gl1WpsLFPw0urPOjNl8DLqzzQ3yXww6u9HT5glY/Bh8y6FXzcyKX8AqAq6Wv25cYoAAAAAElFTkSuQmCC" y="945.1992"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="137" x="41.5" y="1010.668">Marcus manifest</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="35" x="92.5" y="1025.6445">[Next]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="112" y="1041.7109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="21" y="1058.1992">Temporary API for Marcus</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="63" y="1074.6875">IIIF manifests.</text><!--MD5=[de93d881034ae2b005eca73b65398148]
link frontend to api--><path d="M686.6,180.5292 C701.481,201.6692 715.164,225.6392 723,250.1992 C773.923,409.8207 765.2148,597.8645 743.508,746.846 C732.6546,821.3367 718.5516,886.0619 707.0281,932.586 C704.1472,944.217 701.4275,954.7104 698.9602,963.9345 C697.7265,968.5465 696.5559,972.8412 695.4597,976.8021 C695.1857,977.7923 694.9163,978.7617 694.6518,979.7099 C694.5195,980.184 694.3884,980.6529 694.2586,981.1164 " fill="none" id="frontend-to-api" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="694.2586,981.1164,699.3052,974.2221,693.5276,972.6037,694.2586,981.1164" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="786" y="549.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="761" y="563.4336">[JSON/HTTPS]</text><!--MD5=[df12e74ca71a6ef000ee08cd9197b84e] entity sparql--><path d="M9,1240.6992 C9,1230.6992 110,1230.6992 110,1230.6992 C110,1230.6992 211,1230.6992 211,1240.6992 L211,1315.6523 C211,1325.6523 110,1325.6523 110,1325.6523 C110,1325.6523 9,1325.6523 9,1315.6523 L9,1240.6992 " fill="#438DD5" style="stroke:#3C7FC0;stroke-width:1.5;"/><path d="M9,1240.6992 C9,1250.6992 110,1250.6992 110,1250.6992 C110,1250.6992 211,1250.6992 211,1240.6992 " fill="none" style="stroke:#3C7FC0;stroke-width:1.5;"/><text fill="#FFFFFF" font-family="sans-serif" font-size="16" font-weight="bold" lengthAdjust="spacing" textLength="143" x="38.5" y="1270.168">SPARQL endpoint</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="44" x="88" y="1285.1445">[Fuseki]</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="112" y="1301.2109"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="178" x="23" y="1317.6992">Data endpoint for Marcus.</text><!--MD5=[8ebd58f6b3375343ecaa75fe0bd18033]
link frontend to app--><path d="M516.803,121.8792 C440.788,139.9192 341.667,176.6592 288,250.1992 C263.891,283.2392 258.9115,328.8137 260.0713,366.5802 C260.2162,371.301 260.4571,375.8998 260.7686,380.3369 C260.8075,380.8916 260.8475,381.4437 260.8886,381.9932 C260.9092,382.2679 260.93,382.542 260.951,382.8155 " fill="none" id="frontend-to-app" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="260.951,382.8155,263.3277,374.6087,257.3455,375.0695,260.951,382.8155" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="347" y="223.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="322" y="237.4336">[JSON/HTTPS]</text><!--MD5=[ba084830ed4dce89920c704d0e19a212] link app to components--><path d="M908,513.2871 C908,513.7599 908,514.2339 908,514.7091 C908,518.5111 908,522.3925 908,526.3375 C908,542.1176 908,558.9148 908,575.7117 C908,579.911 908,584.1102 908,588.2935 C908,589.3393 908,590.3841 908,591.4277 C908,591.9495 908,592.471 908,592.9921 " fill="none" id="app-to-components" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="908,592.9921,911,584.9921,905,584.9921,908,592.9921" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="934" y="550.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="909" y="564.4336">[JSON/HTTPS]</text><!--MD5=[10607478be0e16403529e53e330d8761]
link mirador_viewer to marcusManifest--><path d="M356.781,772.0332 C310.158,816.8392 245.447,879.0292 193.987,928.4842 " fill="none" id="mirador_viewer-to-marcusManifest" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="188.098,934.1442,195.9447,930.7636,191.7871,926.4377,188.098,934.1442" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="95" x="302" y="833.3008">Fetches Marcus</text><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="62" x="320.5" y="847.4336">manifests</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="311.5" y="861.5664">[JSON/HTTPS]</text><!--MD5=[b6a0ac1322f03a45938afc16e0063b61] link app to getStaticPaths--><path d="M899.7056,438.1992 C899.5947,438.1992 899.4828,438.1992 899.3698,438.1992 C898.918,438.1992 898.4499,438.1992 897.9659,438.1992 C896.9978,438.1992 895.9659,438.1992 894.873,438.1992 C892.6873,438.1992 890.2575,438.1992 887.6059,438.1992 C876.9994,438.1992 862.844,438.1992 846.5618,438.1992 C813.9973,438.1992 772.9255,438.1992 734.724,438.1992 " fill="none" id="app-to-getStaticPaths" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="726.422,438.1992,734.422,441.1992,734.422,435.1992,726.422,438.1992" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="144" x="744.32" y="416.8008">Lists paths to generate</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="776.32" y="430.9336">[JSON/HTTPS]</text><!--MD5=[c1b668678ef05cefa81afb033df7a4bf]
link marcusManifest to sparql--><path d="M110,1086.4292 C110,1129.4292 110,1182.3932 110,1221.4312 " fill="none" id="marcusManifest-to-sparql" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="110,1229.5422,113,1221.5422,107,1221.5422,110,1229.5422" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="78" x="112" y="1155.3008">Fetches data</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="111" y="1169.4336">[JSON/HTTPS]</text><!--MD5=[7ea119c7c8011febc771f182c10b6cc3] link getStaticPaths to getStaticProps--><path d="M618.288,505.9822 C617.128,551.2132 615.61,610.4032 614.498,653.7632 " fill="none" id="getStaticPaths-to-getStaticProps" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="614.289,661.9422,617.4937,654.022,611.4957,653.8677,614.289,661.9422" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="111" x="619" y="550.3008">Builds static page</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="634.5" y="564.4336">[JSON/HTTPS]</text><!--MD5=[34cfbe26f1ff072a7179695b0f111cf6]
link api_manifest to sanity_db--><path d="M542,1070.0112 C542,1107.1792 542,1155.6892 542,1196.3182 " fill="none" id="api_manifest-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="542,1204.3332,545,1196.3332,539,1196.3332,542,1204.3332" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="568" y="1155.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="543" y="1169.4336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="668" y="1363.6523"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="674" y="1384.1875">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="729" y="1384.1875"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1387.1406"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="678" y="1400.6758">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1403.6289"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="678" y="1417.1641">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1420.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="678" y="1433.6523">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1436.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="678" y="1450.1406">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1453.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="678" y="1466.6289">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1469.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="678" y="1483.1172">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1486.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="678" y="1499.6055">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="674" y="1502.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="678" y="1516.0938">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1370.6523" y2="1370.6523"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1387.1406" y2="1387.1406"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1403.6289" y2="1403.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1420.1172" y2="1420.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1436.6055" y2="1436.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1453.0938" y2="1453.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1469.582" y2="1469.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1486.0703" y2="1486.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1502.5586" y2="1502.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="821" y1="1519.0469" y2="1519.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="674" x2="674" y1="1370.6523" y2="1519.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="821" x2="821" y1="1370.6523" y2="1519.0469"/><!--MD5=[66eebc1c5bd76ed29c40389db595807a] link id to mirador_viewer--><path d="M1052,489.2712 C1052,533.0712 1052,597.0392 1052,645.2312 " fill="none" id="id-to-mirador_viewer" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1052,653.4292,1055,645.4292,1049,645.4292,1052,653.4292" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1078" y="550.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1053" y="564.4336">[JSON/HTTPS]</text><!--MD5=[009f1bdadfdb747559dc589c849ab181]
link mirador_viewer to api_manifest--><path d="M1076.65,773.0332 C1097.31,822.3672 1126.81,892.7742 1148.29,944.0542 " fill="none" id="mirador_viewer-to-api_manifest" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1151.4,951.4762,1151.0726,942.9385,1145.5395,945.259,1151.4,951.4762" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1140" y="841.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1115" y="855.4336">[JSON/HTTPS]</text><!--MD5=[c00afe3db0c8ea2b21346873462b2a20]
link frontend to api--><path d="M1325.6,180.5292 C1340.48,201.6692 1354.16,225.6392 1362,250.1992 C1413.005,410.0852 1403.0675,598.3772 1380.1013,747.5417 C1368.6181,822.124 1353.8778,886.9243 1341.8695,933.5012 C1338.8675,945.1454 1336.0361,955.6506 1333.4692,964.8849 C1332.1857,969.5021 1330.9683,973.8016 1329.8286,977.7668 C1329.2588,979.7495 1328.7084,981.6485 1328.179,983.462 " fill="none" id="frontend-to-api" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1328.179,983.462,1333.3008,976.6234,1327.5413,974.9418,1328.179,983.462" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1424" y="550.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1399" y="564.4336">[JSON/HTTPS]</text><!--MD5=[df12e74ca71a6ef000ee08cd9197b84e]
link frontend to app--><path d="M1155.79,121.8792 C1079.77,139.9092 980.647,176.6392 927,250.1992 C902.7715,283.4192 897.7903,329.2387 898.979,367.2076 C899.1276,371.9537 899.3726,376.5771 899.6885,381.038 C899.7674,382.1532 899.8508,383.2582 899.9382,384.3525 " fill="none" id="frontend-to-app" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="899.9382,384.3525,902.2916,376.139,896.3106,376.6168,899.9382,384.3525" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="986" y="223.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="961" y="237.4336">[JSON/HTTPS]</text><!--MD5=[ba084830ed4dce89920c704d0e19a212]
link mirador_viewer to marcusManifest--><path d="M995.938,772.8062 C978.899,787.8572 959.281,802.7342 939,813.1992 C701.451,935.7792 386.217,983.4632 221.322,1000.9102 " fill="none" id="mirador_viewer-to-marcusManifest" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="213.101,1001.7682,221.3691,1003.9221,220.7466,997.9544,213.101,1001.7682" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="95" x="920" y="834.3008">Fetches Marcus</text><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="62" x="938.5" y="848.4336">manifests</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="929.5" y="862.5664">[JSON/HTTPS]</text><!--MD5=[b6a0ac1322f03a45938afc16e0063b61]
link marcusManifest to sparql--><path d="M110,1087.4292 C110,1130.4292 110,1183.3932 110,1222.4312 " fill="none" id="marcusManifest-to-sparql" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="110,1230.5422,113,1222.5422,107,1222.5422,110,1230.5422" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="78" x="112" y="1156.3008">Fetches data</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="111" y="1170.4336">[JSON/HTTPS]</text><!--MD5=[7ea119c7c8011febc771f182c10b6cc3]
link api_manifest to sanity_db--><path d="M1176,1071.0112 C1176,1108.1792 1176,1156.6892 1176,1197.3182 " fill="none" id="api_manifest-to-sanity_db" style="stroke:#666666;stroke-width:1.0;"/><polygon fill="#666666" points="1176,1205.3332,1179,1197.3332,1173,1197.3332,1176,1205.3332" style="stroke:#666666;stroke-width:1.0;"/><text fill="#666666" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="30" x="1202" y="1156.3008">Uses</text><text fill="#666666" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="80" x="1177" y="1170.4336">[JSON/HTTPS]</text><rect fill="#FFFFFF" height="162.3945" rx="5" ry="5" style="stroke:#FFFFFF;stroke-width:1.0;" width="159" x="1306" y="1364.6523"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="51" x="1312" y="1385.1875">Legend</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="1367" y="1385.1875"/><rect fill="#08427B" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1388.1406"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="48" x="1316" y="1401.6758">person</text><rect fill="#1168BD" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1404.6289"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47" x="1316" y="1418.1641">system</text><rect fill="#438DD5" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1421.1172"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="65" x="1316" y="1434.6523">container</text><rect fill="#85BBF0" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1437.6055"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="78" x="1316" y="1451.1406">component</text><rect fill="#686868" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1454.0938"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="1316" y="1467.6289">external person</text><rect fill="#999999" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1470.582"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="1316" y="1484.1172">external system</text><rect fill="#B3B3B3" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1487.0703"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="1316" y="1500.6055">external container</text><rect fill="#CCCCCC" height="16.4883" style="stroke:none;stroke-width:1.0;" width="147" x="1312" y="1503.5586"/><text fill="#FFFFFF" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139" x="1316" y="1517.0938">external component</text><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1371.6523" y2="1371.6523"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1388.1406" y2="1388.1406"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1404.6289" y2="1404.6289"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1421.1172" y2="1421.1172"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1437.6055" y2="1437.6055"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1454.0938" y2="1454.0938"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1470.582" y2="1470.582"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1487.0703" y2="1487.0703"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1503.5586" y2="1503.5586"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1459" y1="1520.0469" y2="1520.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1312" x2="1312" y1="1371.6523" y2="1520.0469"/><line style="stroke:#FFFFFF;stroke-width:1.0;" x1="1459" x2="1459" y1="1371.6523" y2="1520.0469"/><!--MD5=[433e43aa513aa7a333470fcf15d4516e]
@startuml "component_web" @startuml "component_web"
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
' uncomment the following line and comment the first to use locally ' uncomment the following line and comment the first to use locally
...@@ -54,11 +60,20 @@ Container_Boundary(next, "Next app", "", NEXT) { ...@@ -54,11 +60,20 @@ Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(api, "Server side API") { Container_Boundary(api, "Server side API") {
Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB") Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(components, "Components") { Container_Boundary(components, "Components") {
Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB") Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(functions, "Functions") {
Component(getStaticProps, "getStaticProps", "function", "Static Generation: Fetch data at build time.")
Component(getStaticPaths, "getStaticPaths", "function", "Static Generation: Specify dynamic routes to pre-render pages based on data.")
Component(getServerSideProps, "getServerSideProps", "function", "Server-side Rendering: Fetch data on each request.")
}
Rel_D(app, components, "Uses", "JSON/HTTPS") Rel_D(app, components, "Uses", "JSON/HTTPS")
Rel_R(app, getStaticPaths, "Lists paths to generate", "JSON/HTTPS")
Rel_D(getStaticPaths, getStaticProps, "Builds static page", "JSON/HTTPS")
Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS") Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS")
Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS") Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS")
...@@ -758,11 +773,20 @@ rectangle "==Pages\n<size:12>[Container]</size>" <<boundary>> as app { ...@@ -758,11 +773,20 @@ rectangle "==Pages\n<size:12>[Container]</size>" <<boundary>> as app {
rectangle "==Server side API\n<size:12>[Container]</size>" <<boundary>> as api { rectangle "==Server side API\n<size:12>[Container]</size>" <<boundary>> as api {
rectangle "==/api/manifest/[id]\n//<size:12>[Route]</size>//\n\n Fetch basic metadata and connected images by id from Sanity DB" <<component>> as api_manifest rectangle "==/api/manifest/[id]\n//<size:12>[Route]</size>//\n\n Fetch basic metadata and connected images by id from Sanity DB" <<component>> as api_manifest
} }
rectangle "==Components\n<size:12>[Container]</size>" <<boundary>> as components { rectangle "==Components\n<size:12>[Container]</size>" <<boundary>> as components {
rectangle "==/miradorViewer\n//<size:12>[React]</size>//\n\n Fetch basic metadata and connected images by id from Sanity DB" <<component>> as mirador_viewer rectangle "==/miradorViewer\n//<size:12>[React]</size>//\n\n Fetch basic metadata and connected images by id from Sanity DB" <<component>> as mirador_viewer
} }
rectangle "==Functions\n<size:12>[Container]</size>" <<boundary>> as functions {
rectangle "==getStaticProps\n//<size:12>[function]</size>//\n\n Static Generation: Fetch data at build time." <<component>> as getStaticProps
rectangle "==getStaticPaths\n//<size:12>[function]</size>//\n\n Static Generation: Specify dynamic routes to pre-render pages based on data." <<component>> as getStaticPaths
rectangle "==getServerSideProps\n//<size:12>[function]</size>//\n\n Server-side Rendering: Fetch data on each request." <<component>> as getServerSideProps
}
app -DOWN->> components : **Uses**\n//<size:12>[JSON/HTTPS]</size>// app -DOWN->> components : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
app -RIGHT->> getStaticPaths : **Lists paths to generate**\n//<size:12>[JSON/HTTPS]</size>//
getStaticPaths -DOWN->> getStaticProps : **Builds static page**\n//<size:12>[JSON/HTTPS]</size>//
id -DOWN->> mirador_viewer : **Uses**\n//<size:12>[JSON/HTTPS]</size>// id -DOWN->> mirador_viewer : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
mirador_viewer -DOWN->> api_manifest : **Uses**\n//<size:12>[JSON/HTTPS]</size>// mirador_viewer -DOWN->> api_manifest : **Uses**\n//<size:12>[JSON/HTTPS]</size>//
......
...@@ -17,7 +17,7 @@ LAYOUT_WITH_LEGEND() ...@@ -17,7 +17,7 @@ LAYOUT_WITH_LEGEND()
title Component diagram for Sanity Studio title Component diagram for Sanity Studio
Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.") Container(spa, "Sanity Studio SPA", "Javascript and React", "Provides all editing functionality to editors via their web browser.", SANITY)
ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY") ContainerDb_Ext(sanity_db, "Sanity Cloud Storage", "Google Cloud", "Stores metadata and files.", "SANITY")
Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform") Container_Ext(auth, "Google Authentication", "Google Cloud", "Authenticates editors.", "google_cloud_platform")
...@@ -28,16 +28,34 @@ System_Ext(nb, "NB.no", "Content provider") ...@@ -28,16 +28,34 @@ System_Ext(nb, "NB.no", "Content provider")
Container_Boundary(api, "SPA Application", "SANITY") { Container_Boundary(api, "SPA Application", "SANITY") {
Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.") Component(sign, "Sign In Controller", "React", "Allows users to sign in to the Studio.")
Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.") Component(import_tool, "Import tool", "React", "Plugin for importing external resources into the Studio.")
Component(preview, "Desk preview", "React", "Preview tab addition to desk forms.")
Component(resolveProductionUrl, "resolveProductionUrl", "React", "Sends correct id to preview api along with secret.")
Rel(import_tool, sanity_db, "Uses") Rel(import_tool, sanity_db, "Uses")
Rel(preview, resolveProductionUrl, "Uses")
Rel(sign, auth, "Uses", "JSON/HTTPS")
}
Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(app, "Preview fetch") {
Component(overlay, "/*", "Route", "Serves static page.")
}
Container_Boundary(next_api, "Server side API") {
Component(api_preview, "/api/preview?token=[]&slug=[]", "Route", "Validates token and sets preview variable to true")
Component(api_exit_preview, "/api/exit-preview", "Route", "Sets preview variable to false")
}
Rel_R(api_preview, overlay, "Redirects", "JSON/HTTPS")
Rel_U(overlay, preview, "Streams changes", "JSON/HTTPS")
} }
Rel_D(import_tool, marcus, "Imports", "HTTPS") Rel_U(import_tool, marcus, "Imports", "HTTPS")
Rel_D(import_tool, kulturnav, "Imports", "HTTPS") Rel_U(import_tool, kulturnav, "Imports", "HTTPS")
Rel_D(import_tool, nb, "Imports", "HTTPS") Rel_U(import_tool, nb, "Imports", "HTTPS")
Rel_L(spa, sanity_db, "Uses", "JSON/HTTPS") Rel_R(spa, sanity_db, "Uses", "JSON/HTTPS")
Rel_D(spa, api, "Uses", "JSON/HTTPS") Rel_D(overlay, sanity_db, "Uses", "JSON/HTTPS")
Rel(sign, auth, "Uses", "JSON/HTTPS") Rel_R(resolveProductionUrl, api_preview, "Uses", "JSON/HTTPS")
Rel_U(spa, api, "Uses", "JSON/HTTPS")
@enduml @enduml
\ No newline at end of file
...@@ -33,11 +33,20 @@ Container_Boundary(next, "Next app", "", NEXT) { ...@@ -33,11 +33,20 @@ Container_Boundary(next, "Next app", "", NEXT) {
Container_Boundary(api, "Server side API") { Container_Boundary(api, "Server side API") {
Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB") Component(api_manifest, "/api/manifest/[id]", "Route", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(components, "Components") { Container_Boundary(components, "Components") {
Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB") Component(mirador_viewer, "/miradorViewer", "React", "Fetch basic metadata and connected images by id from Sanity DB")
} }
Container_Boundary(functions, "Functions") {
Component(getStaticProps, "getStaticProps", "function", "Static Generation: Fetch data at build time.")
Component(getStaticPaths, "getStaticPaths", "function", "Static Generation: Specify dynamic routes to pre-render pages based on data.")
Component(getServerSideProps, "getServerSideProps", "function", "Server-side Rendering: Fetch data on each request.")
}
Rel_D(app, components, "Uses", "JSON/HTTPS") Rel_D(app, components, "Uses", "JSON/HTTPS")
Rel_R(app, getStaticPaths, "Lists paths to generate", "JSON/HTTPS")
Rel_D(getStaticPaths, getStaticProps, "Builds static page", "JSON/HTTPS")
Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS") Rel_D(id, mirador_viewer, "Uses", "JSON/HTTPS")
Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS") Rel_D(mirador_viewer, api_manifest, "Uses", "JSON/HTTPS")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment