diff --git a/FalahOS-TOGAF-Architecture.excalidraw b/FalahOS-TOGAF-Architecture.excalidraw new file mode 100644 index 0000000..2ba5a28 --- /dev/null +++ b/FalahOS-TOGAF-Architecture.excalidraw @@ -0,0 +1,1734 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "hermes-agent", + "elements": [ + { + "type": "text", + "id": "title_1", + "x": 1100, + "y": 10, + "width": 600, + "height": 40, + "angle": 0, + "strokeColor": "#C9A84C", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 32, + "fontFamily": 1, + "text": "FalahOS \u2014 TOGAF Architecture Diagram", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "FalahOS \u2014 TOGAF Architecture Diagram", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 1, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "zone_2", + "x": 10, + "y": 60, + "width": 2780, + "height": 520, + "angle": 0, + "strokeColor": "#fbbf24", + "backgroundColor": "rgba(120,53,15,0.08)", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_zone_3", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 2, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_zone_3", + "x": 30, + "y": 72, + "width": 234, + "height": 30, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 24, + "fontFamily": 1, + "text": "L1 \u2014 Business Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "zone_2", + "originalText": "L1 \u2014 Business Architecture", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 3, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_4", + "x": 40, + "y": 110, + "width": 2720, + "height": 44, + "angle": 0, + "strokeColor": "#fbbf24", + "backgroundColor": "#78350f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_5", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 4, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_5", + "x": 45, + "y": 115, + "width": 2710, + "height": 34, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 15, + "fontFamily": 1, + "text": "Vision: Shariah-compliant digital economy platform | Mission: Democratise Islamic finance, halal certification, inheritance planning", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_4", + "originalText": "Vision: Shariah-compliant digital economy platform | Mission: Democratise Islamic finance, halal certification, inheritance planning", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 5, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_6", + "x": 40, + "y": 170, + "width": 620, + "height": 90, + "angle": 0, + "strokeColor": "#fb7185", + "backgroundColor": "#881337", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_7", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 6, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_7", + "x": 45, + "y": 175, + "width": 1107.5, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 15, + "fontFamily": 1, + "text": "Faraid Tokenisation (Solidity+Foundry)\nHalal Certification (ASEAN)\nFalah Mobile (Next.js)\nIslamic Finance Education\nFLH Token Wallet | Falah Souq", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_6", + "originalText": "Faraid Tokenisation (Solidity+Foundry)\nHalal Certification (ASEAN)\nFalah Mobile (Next.js)\nIslamic Finance Education\nFLH Token Wallet | Falah Souq", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 7, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_8", + "x": 680, + "y": 170, + "width": 620, + "height": 90, + "angle": 0, + "strokeColor": "#60a5fa", + "backgroundColor": "#1e3a5f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_9", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 8, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_9", + "x": 685, + "y": 175, + "width": 1017.5, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 15, + "fontFamily": 1, + "text": "ummah.falahos.my (WordPress)\nmy.falahos.my | falahos.my (Next.js)\nTelegram (@FalahOS_opsbot)\nWhatsApp (+6013-225-0691)\nGitea | GitHub", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_8", + "originalText": "ummah.falahos.my (WordPress)\nmy.falahos.my | falahos.my (Next.js)\nTelegram (@FalahOS_opsbot)\nWhatsApp (+6013-225-0691)\nGitea | GitHub", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 9, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_10", + "x": 1320, + "y": 170, + "width": 620, + "height": 90, + "angle": 0, + "strokeColor": "#34d399", + "backgroundColor": "#064e3b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_11", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 10, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_11", + "x": 1325, + "y": 175, + "width": 860.0, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 15, + "fontFamily": 1, + "text": "EDD Digital Products (RM0-299)\nPayPal Standard\nMemberPress Memberships\nTutor LMS Course Fees\nMailPoet Newsletter", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_10", + "originalText": "EDD Digital Products (RM0-299)\nPayPal Standard\nMemberPress Memberships\nTutor LMS Course Fees\nMailPoet Newsletter", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 11, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "zone_12", + "x": 10, + "y": 600, + "width": 2780, + "height": 480, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "rgba(76,29,149,0.08)", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_zone_13", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 12, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_zone_13", + "x": 30, + "y": 612, + "width": 198, + "height": 30, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 24, + "fontFamily": 1, + "text": "L2 \u2014 Data Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "zone_12", + "originalText": "L2 \u2014 Data Architecture", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 13, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_14", + "x": 40, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_15", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 14, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_15", + "x": 45, + "y": 655, + "width": 391.0, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "PostgreSQL 16 (Swarm)\nMain app: falah-mobile, Casdoor", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_14", + "originalText": "PostgreSQL 16 (Swarm)\nMain app: falah-mobile, Casdoor", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 15, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_16", + "x": 435, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_17", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 16, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_17", + "x": 440, + "y": 655, + "width": 412.0, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "PostgreSQL 16 (Synology)\nCasdoor DB, Mattermost, PostGIS", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_16", + "originalText": "PostgreSQL 16 (Synology)\nCasdoor DB, Mattermost, PostGIS", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 17, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_18", + "x": 830, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_19", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 18, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_19", + "x": 835, + "y": 655, + "width": 370, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "MySQL 8 (cPanel)\nWordPress: posts, users, orders", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_18", + "originalText": "MySQL 8 (cPanel)\nWordPress: posts, users, orders", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 19, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_20", + "x": 1225, + "y": 650, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_21", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 20, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_21", + "x": 1230, + "y": 655, + "width": 370, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Redis 7\nCache: sessions, queues, real-time", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_20", + "originalText": "Redis 7\nCache: sessions, queues, real-time", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 21, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_22", + "x": 40, + "y": 760, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_23", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 22, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_23", + "x": 45, + "y": 765, + "width": 377.0, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Garage S3 (Synology)\nObject storage: files, backups", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_22", + "originalText": "Garage S3 (Synology)\nObject storage: files, backups", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 23, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_24", + "x": 435, + "y": 760, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_25", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 24, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_25", + "x": 440, + "y": 765, + "width": 370.0, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Meilisearch (Synology)\nFull-text search (Karakeep)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_24", + "originalText": "Meilisearch (Synology)\nFull-text search (Karakeep)", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 25, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_26", + "x": 830, + "y": 760, + "width": 380, + "height": 90, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "#4c1d95", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_27", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 26, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_27", + "x": 835, + "y": 765, + "width": 370, + "height": 80, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Gitea / GitHub\nSource code, wiki, artifacts", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_26", + "originalText": "Gitea / GitHub\nSource code, wiki, artifacts", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 27, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_28", + "x": 40, + "y": 880, + "width": 600, + "height": 150, + "angle": 0, + "strokeColor": "#94a3b8", + "backgroundColor": "#1e293b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_29", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 28, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_29", + "x": 45, + "y": 885, + "width": 867.0, + "height": 140, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Content Library:\n12 SEO blog posts \u00b7 7 EDD products\n10 MailPoet sequences \u00b7 Lead magnet\nFaraid whitepapers \u00b7 Falah Letter", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_28", + "originalText": "Content Library:\n12 SEO blog posts \u00b7 7 EDD products\n10 MailPoet sequences \u00b7 Lead magnet\nFaraid whitepapers \u00b7 Falah Letter", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 29, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_30", + "x": 660, + "y": 880, + "width": 900, + "height": 150, + "angle": 0, + "strokeColor": "#94a3b8", + "backgroundColor": "#1e293b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_31", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 30, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_31", + "x": 665, + "y": 885, + "width": 1378.0, + "height": 140, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Code & Config:\nfalah-os-master \u00b7 falah-mobile \u00b7 war-room \u00b7 cpanel-db-backups\nfaraid-sandbox \u00b7 falah-umbrel \u00b7 falah-extension \u00b7 falah-os-sdk\nHermes memory+sessions \u00b7 OpenClaw config \u00b7 Stack files", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_30", + "originalText": "Code & Config:\nfalah-os-master \u00b7 falah-mobile \u00b7 war-room \u00b7 cpanel-db-backups\nfaraid-sandbox \u00b7 falah-umbrel \u00b7 falah-extension \u00b7 falah-os-sdk\nHermes memory+sessions \u00b7 OpenClaw config \u00b7 Stack files", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 31, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "zone_32", + "x": 10, + "y": 1100, + "width": 2780, + "height": 720, + "angle": 0, + "strokeColor": "#22d3ee", + "backgroundColor": "rgba(8,51,68,0.08)", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_zone_33", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 32, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_zone_33", + "x": 30, + "y": 1112, + "width": 261, + "height": 30, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 24, + "fontFamily": 1, + "text": "L3 \u2014 Application Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "zone_32", + "originalText": "L3 \u2014 Application Architecture", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 33, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_34", + "x": 40, + "y": 1150, + "width": 620, + "height": 130, + "angle": 0, + "strokeColor": "#60a5fa", + "backgroundColor": "#1e3a5f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_35", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 34, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_35", + "x": 45, + "y": 1155, + "width": 811.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "Docker Swarm Services:\nTraefik v2 \u00b7 Gitea 1.26 \u00b7 Casdoor\ntalah-mobile (Next.js) \u00b7 Staging\nPostgreSQL 16 \u00b7 Redis 7", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_34", + "originalText": "Docker Swarm Services:\nTraefik v2 \u00b7 Gitea 1.26 \u00b7 Casdoor\ntalah-mobile (Next.js) \u00b7 Staging\nPostgreSQL 16 \u00b7 Redis 7", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 35, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_36", + "x": 680, + "y": 1150, + "width": 620, + "height": 130, + "angle": 0, + "strokeColor": "#60a5fa", + "backgroundColor": "#1e3a5f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_37", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 36, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_37", + "x": 685, + "y": 1155, + "width": 1346.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 13, + "fontFamily": 1, + "text": "Synology Standalone (40+ containers):\nFalah Umbrel (9) \u00b7 Halal Monitor (3)\nKarakeep (3) \u00b7 Mattermost (2)\nGitea Runners (3) \u00b7 Garage S3\nPortainer \u00b7 Dockge (2) \u00b7 Watchtower\nFalah services (7) \u00b7 Faraid-anvil", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_36", + "originalText": "Synology Standalone (40+ containers):\nFalah Umbrel (9) \u00b7 Halal Monitor (3)\nKarakeep (3) \u00b7 Mattermost (2)\nGitea Runners (3) \u00b7 Garage S3\nPortainer \u00b7 Dockge (2) \u00b7 Watchtower\nFalah services (7) \u00b7 Faraid-anvil", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 37, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_38", + "x": 1320, + "y": 1150, + "width": 620, + "height": 130, + "angle": 0, + "strokeColor": "#fbbf24", + "backgroundColor": "#78350f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_39", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 38, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_39", + "x": 1325, + "y": 1155, + "width": 1034.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 13, + "fontFamily": 1, + "text": "cPanel / WordPress:\nummah.falahos.my + my.falahos.my\nEDD \u00b7 MailPoet \u00b7 bbPress \u00b7 GamiPress\nTutor LMS \u00b7 falah-wallet \u00b7 falah-souq\nnur-ai-coach \u00b7 islamic-tools", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_38", + "originalText": "cPanel / WordPress:\nummah.falahos.my + my.falahos.my\nEDD \u00b7 MailPoet \u00b7 bbPress \u00b7 GamiPress\nTutor LMS \u00b7 falah-wallet \u00b7 falah-souq\nnur-ai-coach \u00b7 islamic-tools", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 39, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_40", + "x": 40, + "y": 1300, + "width": 820, + "height": 130, + "angle": 0, + "strokeColor": "#fb7185", + "backgroundColor": "#881337", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_41", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 40, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_41", + "x": 45, + "y": 1305, + "width": 1736.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 13, + "fontFamily": 1, + "text": "AI Agent Fleet:\nHermes Agent (Contabo) \u2014 Orchestrator\nOdysseus (Mac Mini :7860) \u2014 API/AI/Email\nPi (:4747) \u2014 Assistant\nOpenHand (:3000) \u2014 Coding\nOpenClaw (:3100) \u2014 Model Proxy\nClaude Code (CLI) \u2014 Coding\nopenclaw (MBA :18789) \u2014 MCP Gateway\nHermes MBA \u2014 Fallback/Cron", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_40", + "originalText": "AI Agent Fleet:\nHermes Agent (Contabo) \u2014 Orchestrator\nOdysseus (Mac Mini :7860) \u2014 API/AI/Email\nPi (:4747) \u2014 Assistant\nOpenHand (:3000) \u2014 Coding\nOpenClaw (:3100) \u2014 Model Proxy\nClaude Code (CLI) \u2014 Coding\nopenclaw (MBA :18789) \u2014 MCP Gateway\nHermes MBA \u2014 Fallback/Cron", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 41, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_42", + "x": 880, + "y": 1300, + "width": 820, + "height": 130, + "angle": 0, + "strokeColor": "#94a3b8", + "backgroundColor": "#1e293b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_43", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 42, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_43", + "x": 885, + "y": 1305, + "width": 1463.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 13, + "fontFamily": 1, + "text": "Infrastructure:\nFalahOS Relay (Contabo :8088) \u2014 Telegram bus\nCloudflare \u2014 DNS / WAF / CDN / tunnel\nTraefik \u2014 Internal routing + TLS\ntalah-auto-healer \u00b7 falah-dns-healer\nKomodo \u2014 GitOps\ndeployment\nMCP Servers \u2014 UI/UX Tester", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_42", + "originalText": "Infrastructure:\nFalahOS Relay (Contabo :8088) \u2014 Telegram bus\nCloudflare \u2014 DNS / WAF / CDN / tunnel\nTraefik \u2014 Internal routing + TLS\ntalah-auto-healer \u00b7 falah-dns-healer\nKomodo \u2014 GitOps\ndeployment\nMCP Servers \u2014 UI/UX Tester", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 43, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "arrow", + "id": "arr_44", + "x": 580, + "y": 1215, + "width": 0, + "height": 1000, + "angle": 0, + "strokeColor": "#a78bfa", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "points": [ + [ + 0, + 0 + ], + [ + 0, + -1000 + ] + ], + "endArrowhead": "arrow", + "startBinding": { + "elementId": "node_14", + "focus": 0, + "gap": 5 + }, + "endBinding": { + "elementId": "node_5", + "focus": 0, + "gap": 5 + }, + "groupIds": [], + "frameId": null, + "seed": 44, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "zone_45", + "x": 10, + "y": 1840, + "width": 2780, + "height": 720, + "angle": 0, + "strokeColor": "#34d399", + "backgroundColor": "rgba(6,78,59,0.08)", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_zone_46", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 45, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_zone_46", + "x": 30, + "y": 1852, + "width": 252, + "height": 30, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 24, + "fontFamily": 1, + "text": "L4 \u2014 Technology Architecture", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "zone_45", + "originalText": "L4 \u2014 Technology Architecture", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 46, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_47", + "x": 40, + "y": 1890, + "width": 620, + "height": 140, + "angle": 0, + "strokeColor": "#34d399", + "backgroundColor": "#064e3b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_48", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 47, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_48", + "x": 45, + "y": 1895, + "width": 1688.0, + "height": 130, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 12, + "fontFamily": 1, + "text": "Physical Nodes:\nSynology DS3617xs \u2014 DSM 6.2.3, 8GB\n 4 volumes (2.6TB), Tailscale 100.126.73.29\nContabo VPS \u2014 Ubuntu 24.04, 6 vCPU/16GB/400GB\n 13.140.161.244\nRoketServer cPanel \u2014 Shared, Imunify360\n Mac Mini \u2014 macOS 12.7.6, 8GB, 100.72.2.115\n MacBook Air \u2014 macOS, 100.76.3.26", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_47", + "originalText": "Physical Nodes:\nSynology DS3617xs \u2014 DSM 6.2.3, 8GB\n 4 volumes (2.6TB), Tailscale 100.126.73.29\nContabo VPS \u2014 Ubuntu 24.04, 6 vCPU/16GB/400GB\n 13.140.161.244\nRoketServer cPanel \u2014 Shared, Imunify360\n Mac Mini \u2014 macOS 12.7.6, 8GB, 100.72.2.115\n MacBook Air \u2014 macOS, 100.76.3.26", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 48, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_49", + "x": 680, + "y": 1890, + "width": 620, + "height": 140, + "angle": 0, + "strokeColor": "#94a3b8", + "backgroundColor": "#1e293b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_50", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 49, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_50", + "x": 685, + "y": 1895, + "width": 1412.0, + "height": 130, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 12, + "fontFamily": 1, + "text": "Network:\nTailscale Mesh VPN \u2014 All nodes (100.x.x.x)\nCloudflare \u2014 DNS proxy + WAF + CDN\nDocker Swarm Overlay \u2014 Synology \u2194 Contabo\nSSH Tunnel \u2014 :17860 \u2194 Mac Mini :7860\nImunify360 \u2014 cPanel security\nTraefik v2 \u2014 Internal service routing", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_49", + "originalText": "Network:\nTailscale Mesh VPN \u2014 All nodes (100.x.x.x)\nCloudflare \u2014 DNS proxy + WAF + CDN\nDocker Swarm Overlay \u2014 Synology \u2194 Contabo\nSSH Tunnel \u2014 :17860 \u2194 Mac Mini :7860\nImunify360 \u2014 cPanel security\nTraefik v2 \u2014 Internal service routing", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 50, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_51", + "x": 1320, + "y": 1890, + "width": 620, + "height": 140, + "angle": 0, + "strokeColor": "#60a5fa", + "backgroundColor": "#1e3a5f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_52", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 51, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_52", + "x": 1325, + "y": 1895, + "width": 1544.0, + "height": 130, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 12, + "fontFamily": 1, + "text": "Runtime / Software Stack:\nDocker (Synology) \u2014 Swarm manager + standalone\nDocker (Contabo) \u2014 Swarm worker\nPython 3.11 / Node.js 22 / PHP 8.x / Nginx\nPostgreSQL 16 / MySQL 8 / Redis 7\nSolidity + Foundry (Blockchain)\nHermes CLI+Gateway / OpenClaw / OpenHand", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_51", + "originalText": "Runtime / Software Stack:\nDocker (Synology) \u2014 Swarm manager + standalone\nDocker (Contabo) \u2014 Swarm worker\nPython 3.11 / Node.js 22 / PHP 8.x / Nginx\nPostgreSQL 16 / MySQL 8 / Redis 7\nSolidity + Foundry (Blockchain)\nHermes CLI+Gateway / OpenClaw / OpenHand", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 52, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_53", + "x": 40, + "y": 2050, + "width": 1300, + "height": 130, + "angle": 0, + "strokeColor": "#fbbf24", + "backgroundColor": "#78350f", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_54", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 53, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_54", + "x": 45, + "y": 2055, + "width": 1826.0, + "height": 120, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 14, + "fontFamily": 1, + "text": "CI / CD Pipeline:\nGitea Actions \u2014 3x act_runner (Synology)\nKomodo \u2014 GitOps stack deploys (webhook \u2192 Docker Swarm)\ncPanel Git \u2014 WordPress deployment via Git API\nAuto-healer \u2014 Hourly health recovery cron\nDaily agent crons \u2014 Wiki sync, board sync, health checks", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_53", + "originalText": "CI / CD Pipeline:\nGitea Actions \u2014 3x act_runner (Synology)\nKomodo \u2014 GitOps stack deploys (webhook \u2192 Docker Swarm)\ncPanel Git \u2014 WordPress deployment via Git API\nAuto-healer \u2014 Hourly health recovery cron\nDaily agent crons \u2014 Wiki sync, board sync, health checks", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 54, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "rectangle", + "id": "node_55", + "x": 40, + "y": 2220, + "width": 2720, + "height": 120, + "angle": 0, + "strokeColor": "#C9A84C", + "backgroundColor": "#1e293b", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "t_node_56", + "type": "text" + } + ], + "groupIds": [], + "frameId": null, + "seed": 55, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + }, + { + "type": "text", + "id": "t_node_56", + "x": 45, + "y": 2225, + "width": 2899.5, + "height": 110, + "angle": 0, + "strokeColor": "#E8E4DC", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": 1, + "opacity": 100, + "fontSize": 13, + "fontFamily": 1, + "text": "Architecture Principles:\n1. Synology is core \u2014 Swarm manager + 40+ containers\n2. Hybrid orchestration \u2014 Swarm for prod, standalone for specialised\n3. Tailscale mesh \u2014 Zero exposed ports\n4. Agent-driven ops \u2014 AI agents manage CI/CD/health/content/wiki\n5. Defence in depth \u2014 CF WAF \u2192 Imunify360 \u2192 Traefik \u2192 Tailscale\n6. Multi-agent fleet \u2014 8+ agents with defined roles\n7. Progressive monetisation \u2014 Free \u2192 Lead \u2192 Products \u2192 Memberships \u2192 Courses", + "textAlign": "left", + "verticalAlign": "top", + "containerId": "node_55", + "originalText": "Architecture Principles:\n1. Synology is core \u2014 Swarm manager + 40+ containers\n2. Hybrid orchestration \u2014 Swarm for prod, standalone for specialised\n3. Tailscale mesh \u2014 Zero exposed ports\n4. Agent-driven ops \u2014 AI agents manage CI/CD/health/content/wiki\n5. Defence in depth \u2014 CF WAF \u2192 Imunify360 \u2192 Traefik \u2192 Tailscale\n6. Multi-agent fleet \u2014 8+ agents with defined roles\n7. Progressive monetisation \u2014 Free \u2192 Lead \u2192 Products \u2192 Memberships \u2192 Courses", + "autoResize": true, + "groupIds": [], + "frameId": null, + "seed": 56, + "version": 1, + "isDeleted": false, + "updated": 1, + "customData": {} + } + ], + "appState": { + "viewBackgroundColor": "#070A0D", + "currentItemStrokeColor": "#E8E4DC", + "currentItemBackgroundColor": "#1e3a5f", + "currentItemFontFamily": 1, + "gridSize": null + } +} \ No newline at end of file diff --git a/TOGAF-Architecture.md b/TOGAF-Architecture.md index 0f49c2e..5326495 100644 --- a/TOGAF-Architecture.md +++ b/TOGAF-Architecture.md @@ -296,3 +296,13 @@ flowchart TB | 5 | **Defence in depth** | Cloudflare WAF → Imunify360 → Traefik → Tailscale ACLs | | 6 | **Multi-agent fleet** | 8+ specialised agents (Hermes, Odysseus, Pi, OpenHand, OpenClaw, Claude) each with defined role | | 7 | **Progressive monetisation** | Free content → Lead magnet → Digital products → Memberships → Courses | + +--- + +## 📐 Excalidraw Diagram + +An interactive hand-drawn version of this TOGAF architecture is available as an Excalidraw file: + +📄 **[FalahOS-TOGAF-Architecture.excalidraw](./FalahOS-TOGAF-Architecture.excalidraw)** + +Drag-and-drop the file onto [excalidraw.com](https://excalidraw.com) to view, zoom, and edit. Dark theme with FalahOS gold/green palette.