diff --git a/.excalidraw/architecture.excalidraw b/.excalidraw/architecture.excalidraw new file mode 100644 index 0000000..ba648c8 --- /dev/null +++ b/.excalidraw/architecture.excalidraw @@ -0,0 +1,1283 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "SRLZoKZp5pzWoKtQh-1-Z", + "type": "rectangle", + "x": 653.0957789389095, + "y": 366.3198273592001, + "width": 1316.7771921221815, + "height": 284.6999118211038, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a2", + "roundness": { + "type": 3 + }, + "seed": 175333348, + "version": 561, + "versionNonce": 152765796, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "XqRriRvBchPrEbr_cxGBx", + "type": "rectangle", + "x": 676.5724216914796, + "y": 416.8664083801997, + "width": 1046.1238185760335, + "height": 211.4279103470987, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a3", + "roundness": { + "type": 3 + }, + "seed": 1950729060, + "version": 448, + "versionNonce": 1846375132, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "VtS7bBUm_VtYTIC2M8ZXg", + "type": "text", + "x": 705.755837943143, + "y": 429.4801736011558, + "width": 86.29991149902344, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a4", + "roundness": null, + "seed": 1291826916, + "version": 177, + "versionNonce": 1507637476, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "text": "inalia.app", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "inalia.app", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "WSVlxl-uKHz088ZcLNou7", + "type": "rectangle", + "x": 701.3404930566876, + "y": 465.2831959743679, + "width": 222.5369759324813, + "height": 233.51550128918342, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a5", + "roundness": { + "type": 3 + }, + "seed": 1898920548, + "version": 168, + "versionNonce": 1242740572, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "zmcjLbheRSzRQR0Fw-ySK" + }, + { + "id": "kuUN8Yzku2q27Gvgg3bmR", + "type": "arrow" + }, + { + "id": "wqAawSGxLsFhJ5ftnenqs", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "zmcjLbheRSzRQR0Fw-ySK", + "type": "text", + "x": 795.1089962817173, + "y": 569.5409466189597, + "width": 34.999969482421875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a6", + "roundness": null, + "seed": 2074234340, + "version": 39, + "versionNonce": 1414961636, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "App", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "WSVlxl-uKHz088ZcLNou7", + "originalText": "App", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "doFiRAiT6nV9nkTXreZKH", + "type": "rectangle", + "x": 1217.547574562671, + "y": 464.99842182765303, + "width": 222.5369759324813, + "height": 233.51550128918342, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": { + "type": 3 + }, + "seed": 2103898468, + "version": 315, + "versionNonce": 1845193692, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "36SuQV7HJsw39cv0Z3jk1" + }, + { + "id": "eyB9WI36jnDS7zJj3wjlX", + "type": "arrow" + }, + { + "id": "bkKU191z0oZ9PHOF9uHDv", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "36SuQV7HJsw39cv0Z3jk1", + "type": "text", + "x": 1265.9661098311576, + "y": 569.2561724722448, + "width": 125.69990539550781, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a8", + "roundness": null, + "seed": 902505700, + "version": 195, + "versionNonce": 1370602852, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "Presentation", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "doFiRAiT6nV9nkTXreZKH", + "originalText": "Presentation", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ez52ceTs010EABmL1t9hX", + "type": "rectangle", + "x": 1475.9540665355717, + "y": 464.99842182765303, + "width": 222.5369759324813, + "height": 233.51550128918342, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a9", + "roundness": { + "type": 3 + }, + "seed": 1247602788, + "version": 387, + "versionNonce": 1809420380, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "68Ne2E98wED5BziVcq_5-" + }, + { + "id": "A0r3VgYH_AL8hemceCXWQ", + "type": "arrow" + }, + { + "id": "1T7uDhy2t58rYVDvH6_AW", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "68Ne2E98wED5BziVcq_5-", + "type": "text", + "x": 1568.032567319195, + "y": 569.2561724722448, + "width": 38.379974365234375, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aA", + "roundness": null, + "seed": 2129279972, + "version": 270, + "versionNonce": 1323069668, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "API", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ez52ceTs010EABmL1t9hX", + "originalText": "API", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "rk8KINYKFRlD4BnvBM_77", + "type": "rectangle", + "x": 1745.406662230108, + "y": 413.0087614797693, + "width": 204.66216419180444, + "height": 292.63451933731704, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aB", + "roundness": { + "type": 3 + }, + "seed": 1837178724, + "version": 705, + "versionNonce": 1132405980, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "k-BCly9m1YVBH6UY5l7qR" + }, + { + "id": "98PBXjnmdTDTVF6HlRXl1", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "k-BCly9m1YVBH6UY5l7qR", + "type": "text", + "x": 1762.107815737143, + "y": 546.8260211484278, + "width": 171.25985717773438, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aC", + "roundness": null, + "seed": 1047499492, + "version": 275, + "versionNonce": 1264890980, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "Websocket Server", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "rk8KINYKFRlD4BnvBM_77", + "originalText": "Websocket Server", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "NvctwFkUROMoAeh7hlDgo", + "type": "text", + "x": 679.4202247339372, + "y": 381.1800287105938, + "width": 142.119873046875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aD", + "roundness": null, + "seed": 1615042148, + "version": 232, + "versionNonce": 712911196, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "text": "Infrastructure", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Infrastructure", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "9kB0vPL_XWFuWc0eBOCuv", + "type": "ellipse", + "x": 853.9563550406292, + "y": 802.684298121843, + "width": 165.57399951895695, + "height": 165.57399951895695, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aE", + "roundness": { + "type": 2 + }, + "seed": 1070279140, + "version": 309, + "versionNonce": 1658366564, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "MbefyD4kvdyQj4j6yjL-p" + }, + { + "id": "kuUN8Yzku2q27Gvgg3bmR", + "type": "arrow" + }, + { + "id": "wqAawSGxLsFhJ5ftnenqs", + "type": "arrow" + }, + { + "id": "M1-q65OBfG1f3HwEcpwlg", + "type": "arrow" + }, + { + "id": "pw9UNZC9A6QrMNqQVzpCg", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "MbefyD4kvdyQj4j6yjL-p", + "type": "text", + "x": 920.184109233025, + "y": 872.9320489573051, + "width": 33.03999328613281, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aF", + "roundness": null, + "seed": 1330532, + "version": 260, + "versionNonce": 622364644, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "You", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "9kB0vPL_XWFuWc0eBOCuv", + "originalText": "You", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "38ayVu3c57rnTTQW_SCA9", + "type": "ellipse", + "x": 1253.2847796307224, + "y": 802.684298121843, + "width": 165.57399951895695, + "height": 165.57399951895695, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aG", + "roundness": { + "type": 2 + }, + "seed": 846004452, + "version": 319, + "versionNonce": 1453178340, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "hZAstLN8bM1XhPjMZ8f2c" + }, + { + "id": "eyB9WI36jnDS7zJj3wjlX", + "type": "arrow" + }, + { + "id": "bkKU191z0oZ9PHOF9uHDv", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "hZAstLN8bM1XhPjMZ8f2c", + "type": "text", + "x": 1294.2625719700907, + "y": 872.9320489573051, + "width": 83.5399169921875, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aH", + "roundness": null, + "seed": 241386596, + "version": 279, + "versionNonce": 1342565220, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252839, + "link": null, + "locked": false, + "text": "Audience", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "38ayVu3c57rnTTQW_SCA9", + "originalText": "Audience", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ewMTfTOtRbV9XzCwBz3oj", + "type": "ellipse", + "x": 1502.0255601411327, + "y": 802.684298121843, + "width": 165.57399951895695, + "height": 165.57399951895695, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aI", + "roundness": { + "type": 2 + }, + "seed": 700782564, + "version": 545, + "versionNonce": 1198809444, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "UO_I1NRa5bnRWJq1Iyzdm" + }, + { + "id": "A0r3VgYH_AL8hemceCXWQ", + "type": "arrow" + }, + { + "id": "1T7uDhy2t58rYVDvH6_AW", + "type": "arrow" + }, + { + "id": "98PBXjnmdTDTVF6HlRXl1", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "UO_I1NRa5bnRWJq1Iyzdm", + "type": "text", + "x": 1536.8233369165362, + "y": 847.9320489573051, + "width": 95.89994812011719, + "height": 75, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aJ", + "roundness": null, + "seed": 815823716, + "version": 562, + "versionNonce": 242933476, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252840, + "link": null, + "locked": false, + "text": "Slidev\n(only on\nlocalhost)", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ewMTfTOtRbV9XzCwBz3oj", + "originalText": "Slidev\n(only on localhost)", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "CRW2Y-35pC3ceQYrgXrPg", + "type": "rectangle", + "x": 959.1410825897701, + "y": 464.99842182765303, + "width": 222.5369759324813, + "height": 233.51550128918342, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aK", + "roundness": { + "type": 3 + }, + "seed": 490958564, + "version": 480, + "versionNonce": 1017812196, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "kbCOt7AQRnnMId2uutmUR" + }, + { + "id": "M1-q65OBfG1f3HwEcpwlg", + "type": "arrow" + }, + { + "id": "pw9UNZC9A6QrMNqQVzpCg", + "type": "arrow" + } + ], + "updated": 1757265252838, + "link": null, + "locked": false + }, + { + "id": "kbCOt7AQRnnMId2uutmUR", + "type": "text", + "x": 1018.269609313335, + "y": 569.2561724722448, + "width": 104.27992248535156, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aL", + "roundness": null, + "seed": 1882976868, + "version": 373, + "versionNonce": 688218724, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252840, + "link": null, + "locked": false, + "text": "Dashboard", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CRW2Y-35pC3ceQYrgXrPg", + "originalText": "Dashboard", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "kuUN8Yzku2q27Gvgg3bmR", + "type": "arrow", + "x": 832.5848816797143, + "y": 708.6134384127837, + "width": 50.133675241217134, + "height": 106.00308440312665, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aM", + "roundness": { + "type": 2 + }, + "seed": 1750599140, + "version": 363, + "versionNonce": 600725604, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 50.133675241217134, + 106.00308440312665 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "WSVlxl-uKHz088ZcLNou7", + "focus": 0.2402695064390795, + "gap": 9.814741149232532 + }, + "endBinding": { + "elementId": "9kB0vPL_XWFuWc0eBOCuv", + "focus": -0.1685061805389697, + "gap": 6.314503793805805 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "wqAawSGxLsFhJ5ftnenqs", + "type": "arrow", + "x": 915.3150683244248, + "y": 798.8205782097931, + "width": 41.25485373071706, + "height": 93.27364029583396, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aN", + "roundness": { + "type": 2 + }, + "seed": 983935332, + "version": 266, + "versionNonce": 153931740, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -41.25485373071706, + -93.27364029583396 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "9kB0vPL_XWFuWc0eBOCuv", + "focus": 0.14112400405480816, + "gap": 6.47395856429105 + }, + "endBinding": { + "elementId": "WSVlxl-uKHz088ZcLNou7", + "focus": -0.040755898679742004, + "gap": 6.748240650407752 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "M1-q65OBfG1f3HwEcpwlg", + "type": "arrow", + "x": 963.541544330893, + "y": 800.3460367940876, + "width": 57.07560870338875, + "height": 91.39183644481386, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aO", + "roundness": { + "type": 2 + }, + "seed": 1249041636, + "version": 243, + "versionNonce": 145599460, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 57.07560870338875, + -91.39183644481386 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "9kB0vPL_XWFuWc0eBOCuv", + "focus": -0.19675200823079345, + "gap": 6.456784546755616 + }, + "endBinding": { + "elementId": "CRW2Y-35pC3ceQYrgXrPg", + "focus": -0.15993522660837398, + "gap": 10.44027723243721 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "pw9UNZC9A6QrMNqQVzpCg", + "type": "arrow", + "x": 1070.2194957251095, + "y": 709.363121911031, + "width": 71.43915149336681, + "height": 109.15785131872076, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aP", + "roundness": { + "type": 2 + }, + "seed": 1632477284, + "version": 344, + "versionNonce": 1665037404, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -71.43915149336681, + 109.15785131872076 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "CRW2Y-35pC3ceQYrgXrPg", + "focus": -0.44343240317099525, + "gap": 10.849198794194535 + }, + "endBinding": { + "elementId": "9kB0vPL_XWFuWc0eBOCuv", + "focus": 0.13253983926920562, + "gap": 8.486950679249029 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "eyB9WI36jnDS7zJj3wjlX", + "type": "arrow", + "x": 1357.9506591429954, + "y": 795.7567638243282, + "width": 4.2869214553147685, + "height": 90.7971172959925, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQ", + "roundness": { + "type": 2 + }, + "seed": 1728312292, + "version": 287, + "versionNonce": 1297518436, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -4.2869214553147685, + -90.7971172959925 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "38ayVu3c57rnTTQW_SCA9", + "focus": 0.3004274722867258, + "gap": 9.556830572063433 + }, + "endBinding": { + "elementId": "doFiRAiT6nV9nkTXreZKH", + "focus": -0.16093959590556325, + "gap": 6.445723411499216 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "bkKU191z0oZ9PHOF9uHDv", + "type": "arrow", + "x": 1312.8116068616664, + "y": 705.0190959930491, + "width": 2.8381753828152796, + "height": 90.73211126490526, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aR", + "roundness": { + "type": 2 + }, + "seed": 430167908, + "version": 240, + "versionNonce": 1151830236, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 2.8381753828152796, + 90.73211126490526 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "doFiRAiT6nV9nkTXreZKH", + "focus": 0.17407186575182118, + "gap": 6.505172876212782 + }, + "endBinding": { + "elementId": "38ayVu3c57rnTTQW_SCA9", + "focus": -0.20731161808111417, + "gap": 9.227958964008355 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "A0r3VgYH_AL8hemceCXWQ", + "type": "arrow", + "x": 1565.3608998476166, + "y": 793.654174387989, + "width": 1.9625435758916865, + "height": 82.57366214249032, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aS", + "roundness": { + "type": 2 + }, + "seed": 1165708004, + "version": 222, + "versionNonce": 1645675236, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -1.9625435758916865, + -82.57366214249032 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ewMTfTOtRbV9XzCwBz3oj", + "focus": -0.20490525930065623, + "gap": 11.067948141029797 + }, + "endBinding": { + "elementId": "ez52ceTs010EABmL1t9hX", + "focus": 0.23722098427830854, + "gap": 12.566589128662145 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "1T7uDhy2t58rYVDvH6_AW", + "type": "arrow", + "x": 1610.2189094935557, + "y": 711.4984649210459, + "width": 3.0492889953147824, + "height": 86.07445962510815, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aT", + "roundness": { + "type": 2 + }, + "seed": 2098744932, + "version": 226, + "versionNonce": 821693788, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 3.0492889953147824, + 86.07445962510815 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ez52ceTs010EABmL1t9hX", + "focus": -0.15712658455768602, + "gap": 12.984541804209357 + }, + "endBinding": { + "elementId": "ewMTfTOtRbV9XzCwBz3oj", + "focus": 0.3674798506710081, + "gap": 9.602650106911751 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "98PBXjnmdTDTVF6HlRXl1", + "type": "arrow", + "x": 1750.628590458441, + "y": 707.4961679344163, + "width": 103.99101716424411, + "height": 106.24244441053293, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aU", + "roundness": { + "type": 2 + }, + "seed": 1363730916, + "version": 320, + "versionNonce": 2105345636, + "isDeleted": false, + "boundElements": [], + "updated": 1757265252838, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -103.99101716424411, + 106.24244441053293 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "rk8KINYKFRlD4BnvBM_77", + "focus": -0.19512429018242544, + "gap": 9.323775348784466 + }, + "endBinding": { + "elementId": "ewMTfTOtRbV9XzCwBz3oj", + "focus": -0.051825078657742066, + "gap": 11.912052270503526 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": {} +} \ No newline at end of file diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 4325a42..a0ae783 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,8 +1,10 @@ import { defineConfig } from 'vitepress' +import implicitFigures from 'markdown-it-image-figures' export default defineConfig({ title: "Inalia", description: "Make your talks more engaging with real-time interactions.", + themeConfig: { nav: [ { text: 'Getting Started', link: '/getting-started' }, @@ -11,5 +13,15 @@ export default defineConfig({ socialLinks: [ { icon: 'github', link: 'https://github.com/inalia-app' } ] - } + }, + + appearance: true, + cleanUrls: true, + + markdown: { + config(md) { + md + .use(implicitFigures, { figcaption: 'alt' }) + }, + }, }) diff --git a/.vitepress/theme/app.css b/.vitepress/theme/app.css new file mode 100644 index 0000000..0dbd977 --- /dev/null +++ b/.vitepress/theme/app.css @@ -0,0 +1,15 @@ +figure { + border: 1px solid var(--vp-c-divider); + border-radius: 0.375rem; + background-color: var(--vp-c-default-soft); +} + +figure img { + border-radius: 0.375rem; +} + +figure figcaption { + color: var(--vp-c-text-1); + text-align: center; + font-size: 14px; +} diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts new file mode 100644 index 0000000..5283ced --- /dev/null +++ b/.vitepress/theme/index.ts @@ -0,0 +1,4 @@ +import DefaultTheme from 'vitepress/theme' +import './app.css' + +export default DefaultTheme diff --git a/architecture.md b/architecture.md new file mode 100644 index 0000000..41f7e8b --- /dev/null +++ b/architecture.md @@ -0,0 +1,29 @@ +# Architecture + +This page explains Inalia's architecture and how its components interact. + +> [!NOTE] +> It can be helpful when troubleshooting issues. + +## Components + +Inalia has two components: + +1. **Web application** — the core service, available at [inalia.app](https://inalia.app). +2. **Slidev addon** — an [addon for Slidev](./slidev-addon-inalia.md) that integrates Inalia into presentations. + +The web application is deployed publicly so the audience can interact with a presentation in real time. We considered removing the internet dependency, but remote talks, unreliable local networks, and audience connectivity make a public deployment the most reliable option. + +The Slidev addon runs inside [Slidev](https://sli.dev/guide/theme-addon#use-addon). It enables real-time features automatically when specific environment variables are present. These variables should be defined only in local developer environments because a personal access token is required to communicate with the API. For finished talks, Inalia provides a [static mode](./static-mode.md) to deploy the presentation without runtime connections. + +## Communication + +The web application is a monolith composed of several parts: + +1. **App** — the main interface where we create and manage talks. +2. **Dashboard** - the interface where you can view audience questions during your talk. +3. **Presentation** — the view the audience sees during a talk. +4. **API** — the backend service that provides data to the addon. Because the app is monolithic, the API does not serve the frontend. The addon exposes primitives to [customize the experience](./fully-customizable.md), so direct API access is usually unnecessary. +5. **Websocket server** — an external, from the monolithic point of view, server that communicates with both the addon and the application to enable real-time interactions. It provides low-latency messaging between components. The addon exposes the required primitives, so you normally do not need to manage the websocket server directly. + +![Components Communication (internal flow aren't visible)](/architecture.png) diff --git a/package.json b/package.json index 4c81553..cd9449c 100644 --- a/package.json +++ b/package.json @@ -8,5 +8,8 @@ "devDependencies": { "typescript": "^5.9.2", "vitepress": "^1.6.4" + }, + "dependencies": { + "markdown-it-image-figures": "^2.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81f2917..ae46ce9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + markdown-it-image-figures: + specifier: ^2.1.1 + version: 2.1.1(markdown-it@14.1.0) devDependencies: typescript: specifier: ^5.9.2 @@ -530,6 +534,9 @@ packages: resolution: {integrity: sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==} engines: {node: '>= 14.0.0'} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} @@ -598,15 +605,31 @@ packages: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + markdown-it-image-figures@2.1.1: + resolution: {integrity: sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==} + engines: {node: '>=12.0.0'} + peerDependencies: + markdown-it: '*' + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + micromark-util-character@2.1.1: resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} @@ -652,6 +675,10 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -704,6 +731,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -1253,6 +1283,8 @@ snapshots: '@algolia/requester-fetch': 5.35.0 '@algolia/requester-node-http': 5.35.0 + argparse@2.0.1: {} + birpc@2.5.0: {} ccount@2.0.1: {} @@ -1338,12 +1370,29 @@ snapshots: is-what@4.1.16: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 mark.js@8.11.1: {} + markdown-it-image-figures@2.1.1(markdown-it@14.1.0): + dependencies: + markdown-it: 14.1.0 + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 @@ -1356,6 +1405,8 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.3 + mdurl@2.0.0: {} + micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 @@ -1399,6 +1450,8 @@ snapshots: property-information@7.1.0: {} + punycode.js@2.3.1: {} + regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -1471,6 +1524,8 @@ snapshots: typescript@5.9.2: {} + uc.micro@2.1.0: {} + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 diff --git a/public/architecture.png b/public/architecture.png new file mode 100644 index 0000000..de7e384 Binary files /dev/null and b/public/architecture.png differ