[{"data":1,"prerenderedAt":533},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fengineering\u002Finfrastructure":180,"\u002Fdocs\u002Fengineering\u002Finfrastructure-surround":528},[4,8,20,24,59,65,69,73,77,100,104,108,112,116,120,124,128,160,164,168,172,176],{"title":5,"path":6,"stem":7},"","\u002Fdocs","1.docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12,"icon":19},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F01.getting-started\u002F1.index",[13,15],{"title":14,"path":10,"stem":11},"Bosca",{"title":16,"path":17,"stem":18},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","1.docs\u002F01.getting-started\u002F2.quickstart",false,{"title":21,"path":22,"stem":23},"Kit","\u002Fdocs\u002Fkit","1.docs\u002F01.kit",{"title":25,"path":26,"stem":27,"children":28},"Content","\u002Fdocs\u002Fcontent","1.docs\u002F02.content\u002F1.index",[29,31,53],{"title":30,"path":26,"stem":27},"Content Strategy",{"title":32,"path":33,"stem":34,"children":35},"Metadata","\u002Fdocs\u002Fcontent\u002Fmetadata","1.docs\u002F02.content\u002F1.metadata\u002F1.index",[36,37,41,45,49],{"title":32,"path":33,"stem":34},{"title":38,"path":39,"stem":40},"Supplementary","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fsupplementary","1.docs\u002F02.content\u002F1.metadata\u002F2.supplementary",{"title":42,"path":43,"stem":44},"Documents","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fdocuments","1.docs\u002F02.content\u002F1.metadata\u002F3.documents",{"title":46,"path":47,"stem":48},"Guides","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fguides","1.docs\u002F02.content\u002F1.metadata\u002F4.guides",{"title":50,"path":51,"stem":52},"Bible","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fbible","1.docs\u002F02.content\u002F1.metadata\u002F5.bible",{"title":54,"path":55,"stem":56,"children":57},"Collections","\u002Fdocs\u002Fcontent\u002Fcollections","1.docs\u002F02.content\u002F2.collections\u002F1.index",[58],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"children":63},"Workflows","\u002Fdocs\u002Fworkflows","1.docs\u002F03.workflows\u002F1.index",[64],{"title":60,"path":61,"stem":62},{"title":66,"path":67,"stem":68},"Search","\u002Fdocs\u002Fsearch","1.docs\u002F04.search",{"title":70,"path":71,"stem":72},"Profiles","\u002Fdocs\u002Fprofiles","1.docs\u002F05.profiles",{"title":74,"path":75,"stem":76},"Organizations","\u002Fdocs\u002Forganizations","1.docs\u002F06.organizations",{"title":78,"path":79,"stem":80,"children":81,"icon":99},"Engineering","\u002Fdocs\u002Fengineering","1.docs\u002F07.engineering\u002F1.index",[82,83,87,91,95],{"title":78,"path":79,"stem":80},{"title":84,"path":85,"stem":86},"Infrastructure","\u002Fdocs\u002Fengineering\u002Finfrastructure","1.docs\u002F07.engineering\u002F2.infrastructure",{"title":88,"path":89,"stem":90},"Backend Services","\u002Fdocs\u002Fengineering\u002Fservices","1.docs\u002F07.engineering\u002F3.services",{"title":92,"path":93,"stem":94},"Deployment","\u002Fdocs\u002Fengineering\u002Fdeployment","1.docs\u002F07.engineering\u002F4.deployment",{"title":96,"path":97,"stem":98},"Framework Modules","\u002Fdocs\u002Fengineering\u002Fframework","1.docs\u002F07.engineering\u002F5.framework","i-heroicons-wrench-screwdriver",{"title":101,"path":102,"stem":103},"Identity Management","\u002Fdocs\u002Fidentity","1.docs\u002F07.identity",{"title":105,"path":106,"stem":107},"Localization","\u002Fdocs\u002Flocalization","1.docs\u002F08.localization",{"title":109,"path":110,"stem":111},"Analytics","\u002Fdocs\u002Fanalytics","1.docs\u002F09.analytics",{"title":113,"path":114,"stem":115},"AI & Agents","\u002Fdocs\u002Fai","1.docs\u002F10.ai",{"title":117,"path":118,"stem":119},"Messaging & Email","\u002Fdocs\u002Fmessages","1.docs\u002F11.messages",{"title":121,"path":122,"stem":123},"Scheduler","\u002Fdocs\u002Fscheduler","1.docs\u002F12.scheduler",{"title":125,"path":126,"stem":127},"Backup & Restore","\u002Fdocs\u002Fbackup","1.docs\u002F13.backup",{"title":129,"path":130,"stem":131,"children":132},"Architecture","\u002Fdocs\u002Farchitecture","1.docs\u002F14.architecture\u002F1.index",[133,134,137,141,145,149,153,157],{"title":129,"path":130,"stem":131},{"title":92,"path":135,"stem":136},"\u002Fdocs\u002Farchitecture\u002Fdeployment","1.docs\u002F14.architecture\u002F2.deployment",{"title":138,"path":139,"stem":140},"Security","\u002Fdocs\u002Farchitecture\u002Fsecurity","1.docs\u002F14.architecture\u002F3.security",{"title":142,"path":143,"stem":144},"Telemetry","\u002Fdocs\u002Farchitecture\u002Ftelemetry","1.docs\u002F14.architecture\u002F4.telemetry",{"title":146,"path":147,"stem":148},"Administration","\u002Fdocs\u002Farchitecture\u002Fadministration","1.docs\u002F14.architecture\u002F5.administration",{"title":150,"path":151,"stem":152},"GraphQL Schema","\u002Fdocs\u002Farchitecture\u002Fgraphql","1.docs\u002F14.architecture\u002F6.graphql",{"title":154,"path":155,"stem":156},"Storage","\u002Fdocs\u002Farchitecture\u002Fstorage","1.docs\u002F14.architecture\u002F7.storage",{"title":105,"path":158,"stem":159},"\u002Fdocs\u002Farchitecture\u002Flocalization","1.docs\u002F14.architecture\u002F8.localization",{"title":161,"path":162,"stem":163},"Scripting","\u002Fdocs\u002Fscripting","1.docs\u002F15.scripting",{"title":165,"path":166,"stem":167},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F16.configuration",{"title":169,"path":170,"stem":171},"Forms","\u002Fdocs\u002Fforms","1.docs\u002F17.forms",{"title":173,"path":174,"stem":175},"Segmentation & Campaigns","\u002Fdocs\u002Fsegmentation","1.docs\u002F18.segmentation",{"title":177,"path":178,"stem":179},"Devices & Push","\u002Fdocs\u002Fdevices","1.docs\u002F19.devices",{"id":181,"title":84,"body":182,"description":192,"extension":524,"meta":525,"navigation":446,"path":85,"seo":526,"stem":86,"__hash__":527},"docs\u002F1.docs\u002F07.engineering\u002F2.infrastructure.md",{"type":183,"value":184,"toc":520},"minimark",[185,189,193,198,201,391,395,516],[186,187,84],"h1",{"id":188},"infrastructure",[190,191,192],"p",{},"The Bosca Framework relies on a set of robust infrastructure services to ensure scalability, reliability, and performance.",[194,195,197],"h2",{"id":196},"docker-services","Docker Services",[190,199,200],{},"The development environment is containerized using Docker Compose. The following services are configured:",[202,203,204,224],"table",{},[205,206,207],"thead",{},[208,209,210,215,218,221],"tr",{},[211,212,214],"th",{"align":213},"left","Service",[211,216,217],{"align":213},"Image",[211,219,220],{"align":213},"Port",[211,222,223],{"align":213},"Description",[225,226,227,248,266,284,301,319,337,355,373],"tbody",{},[208,228,229,236,242,245],{},[230,231,232],"td",{"align":213},[233,234,235],"strong",{},"NATS",[230,237,238],{"align":213},[239,240,241],"code",{},"nats",[230,243,244],{"align":213},"4222",[230,246,247],{"align":213},"High-performance messaging system. Can be used for caching, pub\u002Fsub, job queues, and distributed locking.",[208,249,250,255,260,263],{},[230,251,252],{"align":213},[233,253,254],{},"Meilisearch",[230,256,257],{"align":213},[239,258,259],{},"getmeili\u002Fmeilisearch",[230,261,262],{"align":213},"7701",[230,264,265],{"align":213},"Next-generation search engine used for fast and relevant content search.",[208,267,268,273,278,281],{},[230,269,270],{"align":213},[233,271,272],{},"PostgreSQL",[230,274,275],{"align":213},[239,276,277],{},"postgres",[230,279,280],{"align":213},"5433",[230,282,283],{"align":213},"Primary relational database for transactional data.",[208,285,286,291,295,298],{},[230,287,288],{"align":213},[233,289,290],{},"PostgreSQL Warehouse",[230,292,293],{"align":213},[239,294,277],{},[230,296,297],{"align":213},"5434",[230,299,300],{"align":213},"Secondary database optimized for analytics and warehousing tasks.",[208,302,303,308,313,316],{},[230,304,305],{"align":213},[233,306,307],{},"S3Proxy",[230,309,310],{"align":213},[239,311,312],{},"andrewgaul\u002Fs3proxy",[230,314,315],{"align":213},"8000",[230,317,318],{"align":213},"S3-compatible interface for local object storage testing.",[208,320,321,326,331,334],{},[230,322,323],{"align":213},[233,324,325],{},"Trino",[230,327,328],{"align":213},[239,329,330],{},"trinodb\u002Ftrino",[230,332,333],{"align":213},"8089",[230,335,336],{"align":213},"Distributed SQL query engine for big data analytics over S3 storage.",[208,338,339,344,349,352],{},[230,340,341],{"align":213},[233,342,343],{},"Text Extractor",[230,345,346],{"align":213},[239,347,348],{},"ghcr.io\u002Fsowers-io\u002Fbosca\u002Ftext-extractor",[230,350,351],{"align":213},"8083",[230,353,354],{"align":213},"Service for extracting text from various document formats.",[208,356,357,362,367,370],{},[230,358,359],{"align":213},[233,360,361],{},"Jaeger",[230,363,364],{"align":213},[239,365,366],{},"cr.jaegertracing.io\u002Fjaegertracing\u002Fjaeger",[230,368,369],{"align":213},"16686",[230,371,372],{"align":213},"Distributed tracing platform for monitoring and troubleshooting.",[208,374,375,380,385,388],{},[230,376,377],{"align":213},[233,378,379],{},"Redis",[230,381,382],{"align":213},[239,383,384],{},"docker.dragonflydb.io\u002Fdragonflydb\u002Fdragonfly",[230,386,387],{"align":213},"6380",[230,389,390],{"align":213},"In-memory datastore. Can be used for caching, pub\u002Fsub, job queues, and distributed locking.",[194,392,394],{"id":393},"infrastructure-diagram","Infrastructure Diagram",[396,397,401],"pre",{"className":398,"code":399,"language":400,"meta":5,"style":5},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","graph TD\n    subgraph Storage\n        DB[(PostgreSQL)]\n        Warehouse[(PostgreSQL Warehouse)]\n        S3[S3 Object Storage]\n    end\n\n    subgraph \"Search & Analytics\"\n        Meilisearch\n        Trino\n        Jaeger\n    end\n\n    subgraph \"Messaging & Cache\"\n        NATS\n        Redis\n    end\n\n    Trino --> S3\n","mermaid",[239,402,403,411,417,423,429,435,441,448,454,460,466,472,477,482,488,494,500,505,510],{"__ignoreMap":5},[404,405,408],"span",{"class":406,"line":407},"line",1,[404,409,410],{},"graph TD\n",[404,412,414],{"class":406,"line":413},2,[404,415,416],{},"    subgraph Storage\n",[404,418,420],{"class":406,"line":419},3,[404,421,422],{},"        DB[(PostgreSQL)]\n",[404,424,426],{"class":406,"line":425},4,[404,427,428],{},"        Warehouse[(PostgreSQL Warehouse)]\n",[404,430,432],{"class":406,"line":431},5,[404,433,434],{},"        S3[S3 Object Storage]\n",[404,436,438],{"class":406,"line":437},6,[404,439,440],{},"    end\n",[404,442,444],{"class":406,"line":443},7,[404,445,447],{"emptyLinePlaceholder":446},true,"\n",[404,449,451],{"class":406,"line":450},8,[404,452,453],{},"    subgraph \"Search & Analytics\"\n",[404,455,457],{"class":406,"line":456},9,[404,458,459],{},"        Meilisearch\n",[404,461,463],{"class":406,"line":462},10,[404,464,465],{},"        Trino\n",[404,467,469],{"class":406,"line":468},11,[404,470,471],{},"        Jaeger\n",[404,473,475],{"class":406,"line":474},12,[404,476,440],{},[404,478,480],{"class":406,"line":479},13,[404,481,447],{"emptyLinePlaceholder":446},[404,483,485],{"class":406,"line":484},14,[404,486,487],{},"    subgraph \"Messaging & Cache\"\n",[404,489,491],{"class":406,"line":490},15,[404,492,493],{},"        NATS\n",[404,495,497],{"class":406,"line":496},16,[404,498,499],{},"        Redis\n",[404,501,503],{"class":406,"line":502},17,[404,504,440],{},[404,506,508],{"class":406,"line":507},18,[404,509,447],{"emptyLinePlaceholder":446},[404,511,513],{"class":406,"line":512},19,[404,514,515],{},"    Trino --> S3\n",[517,518,519],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":5,"searchDepth":413,"depth":413,"links":521},[522,523],{"id":196,"depth":413,"text":197},{"id":393,"depth":413,"text":394},"md",{},{"title":84,"description":192},"ZqGl-RamBmWR-uLPjzXbFRPZuetGCbTNFJDm9vLnA3w",[529,531],{"title":78,"path":79,"stem":80,"description":530,"children":-1},"Welcome to the engineering documentation for the Bosca Framework. This section is designed to provide software engineers with a detailed understanding of the system's architecture, components, and data flow.",{"title":88,"path":89,"stem":90,"description":532,"children":-1},"The backend logic is distributed across several key services, each responsible for a specific domain of the Bosca Framework.",1775372112857]