<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Core &amp; Project Overview on GENIE.AI</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/core/</link><description>Recent content in Core &amp; Project Overview on GENIE.AI</description><generator>Hugo</generator><language>en</language><atom:link href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Overview</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/core/project-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/core/project-overview/</guid><description>&lt;p&gt;GENIE.AI is an open-source generative-AI framework for the public sector: a
sovereign, Digital Public Good (DPG)-compliant Retrieval-Augmented Generation
(RAG) platform with multilingual support. It answers questions strictly from an
indexed knowledge base you control, running every model on infrastructure you
own. It integrates with &lt;a href="https://opea.dev"&gt;OPEA&lt;/a&gt; (Open Platform for Enterprise
AI) for AI/ML services.&lt;/p&gt;
&lt;p&gt;This page is the &lt;strong&gt;orientation layer&lt;/strong&gt; — what GENIE.AI is, how it is built, and
where to read deeper. Each area below has a dedicated page; this overview
intentionally stays high-level.&lt;/p&gt;</description></item><item><title>Source Tree Analysis</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For developers.&lt;/strong&gt; A walk-through of the repository layout — use it to find where a component lives and what it depends on. Operators and content managers do not need this page.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#top-level-directory-structure"&gt;Top-Level Directory Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-1-frontend-vue-3-web-app"&gt;Part 1: Frontend (Vue 3 Web App)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-2-backend-nodejsexpress-api"&gt;Part 2: Backend (Node.js/Express API)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-3-document-repository"&gt;Part 3: Document Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-4-mobile-flutter-app"&gt;Part 4: Mobile (Flutter App)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-5-aiml-opea-microservices"&gt;Part 5: AI/ML (OPEA Microservices)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#part-6-api-gateway-kongnginx"&gt;Part 6: API Gateway (Kong/Nginx)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#integration-points"&gt;Integration Points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#configuration--deployment"&gt;Configuration &amp;amp; Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/source-tree-analysis/#testing-structure"&gt;Testing Structure&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;GENIE.AI is a sovereign, DPG-compliant RAG (Retrieval-Augmented Generation) system with multilingual support. The monorepo is organized into 6 main parts:&lt;/p&gt;</description></item><item><title>Integration Architecture</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For integrators and developers.&lt;/strong&gt; How the components fit together: service boundaries, dependencies, and the inter-service contract surface.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This document describes the integration points, communication patterns, and data flows between all components of the GENIE.AI platform.&lt;/p&gt;
&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#system-overview"&gt;System Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#integration-points"&gt;Integration Points&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#communication-protocols"&gt;Communication Protocols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#data-flow-diagrams"&gt;Data Flow Diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#authentication--authorization"&gt;Authentication &amp;amp; Authorization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#service-discovery--routing"&gt;Service Discovery &amp;amp; Routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#error-handling--resilience"&gt;Error Handling &amp;amp; Resilience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/integration-architecture/#security-considerations"&gt;Security Considerations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="system-overview"&gt;System Overview&lt;/h2&gt;
&lt;p&gt;GENIE.AI is a monorepo consisting of 6 main parts that communicate through REST APIs, SSE (Server-Sent Events), and direct database connections:&lt;/p&gt;</description></item><item><title>Development Guide</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/</guid><description>&lt;h1 id="genieai-development-guide"&gt;GENIE.AI Development Guide&lt;/h1&gt;
&lt;p&gt;This guide covers all aspects of developing GENIE.AI, a sovereign RAG system for public sector services.&lt;/p&gt;
&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#quick-start"&gt;Quick Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#project-structure"&gt;Project Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#environment-configuration"&gt;Environment Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#component-development"&gt;Component Development&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#frontend-vue-3"&gt;Frontend (Vue 3)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#backend-nodejs"&gt;Backend (Node.js)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#document-repository-nodejs"&gt;Document Repository (Node.js)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#mobile-flutter"&gt;Mobile (Flutter)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#aiml-services-python"&gt;AI/ML Services (Python)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#api-gateway-kongnginx"&gt;API Gateway (Kong/NGINX)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#docker-development"&gt;Docker Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#database-setup"&gt;Database Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#testing"&gt;Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#linting-and-formatting"&gt;Linting and Formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#api-client-generation"&gt;API Client Generation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#git-workflow"&gt;Git Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/core/development-guide/#deployment"&gt;Deployment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;h3 id="global-requirements"&gt;Global Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt;: 22.x LTS (for all JS components)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;npm&lt;/strong&gt;: 9.x or later&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;: 3.10 or later (for AI/ML services)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt;: 24.x or later&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;: v2.x&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git&lt;/strong&gt;: 2.x or later&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="component-specific-requirements"&gt;Component-Specific Requirements&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Requirements&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontend&lt;/td&gt;
 &lt;td&gt;Node.js 22+, npm 9+&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backend&lt;/td&gt;
 &lt;td&gt;Node.js 22+, npm 9+&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Document Repository&lt;/td&gt;
 &lt;td&gt;Node.js 22+, npm 9+&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mobile&lt;/td&gt;
 &lt;td&gt;Flutter 3.10+, Dart 3.10.8+, Android Studio / Xcode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI/ML Services&lt;/td&gt;
 &lt;td&gt;Python 3.10+, pip, GPU (NVIDIA) for OPEA services&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API Gateway&lt;/td&gt;
 &lt;td&gt;Docker, OpenSSL (for certificates)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;h3 id="1-clone-and-install-dependencies"&gt;1. Clone and Install Dependencies&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Clone the repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone &amp;lt;repository-url&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; genie-ai
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install root dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install component dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install --prefix components/gov-chat-frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install --prefix components/gov-chat-backend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install --prefix components/document-repository
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install --prefix components/shared/lib
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-configure-environment"&gt;2. Configure Environment&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Copy environment template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp env .env
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Edit .env with your local values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Required: ARANGO_PASSWORD, POSTGRES_PASSWORD, KONG_DB_PASSWORD,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# KEYCLOAK_ADMIN_PASSWORD, KEYCLOAK_CLIENT_SECRET,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# KEYCLOAK_PROXY_CLIENT_SECRET, KC_DATAPREP_CLIENT_SECRET,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# EMAIL_* (SMTP configuration)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-start-services"&gt;3. Start Services&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Option 1: Core services only (no AI/ML)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Option 2: Full stack with AI/ML services&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose --profile opea up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Option 3: With GPU-specific configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose --env-file .env --env-file env.t4 --profile opea up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="4-access-services"&gt;4. Access Services&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: http://localhost:8090 (or https://localhost via nginx)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend API&lt;/strong&gt;: http://localhost:3000/api&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document Repository&lt;/strong&gt;: http://localhost:3001/api&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keycloak Admin&lt;/strong&gt;: https://localhost/auth/admin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Documentation&lt;/strong&gt;: http://localhost:3000/api-docs&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="project-structure"&gt;Project Structure&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;genie-ai/
├── components/
│ ├── gov-chat-frontend/ # Vue 3 web application
│ ├── gov-chat-backend/ # Node.js/Express API
│ ├── document-repository/ # File upload/processing service
│ └── shared/lib/ # Shared utilities (logger, ArangoDB)
├── mobile/
│ └── genie_ai_mobile/ # Flutter mobile application
├── genie-ai-overlay/ # OPEA AI/ML microservices
│ ├── chatqna/ # Main chat service
│ ├── retriever/ # Hybrid vector-graph retrieval
│ ├── reranker/ # Result reranking
│ ├── dataprep/ # Document ingestion pipeline
│ └── core/ # Shared types and utilities
├── api-gateway-solution/ # Kong/NGINX configuration
├── deploy/ansible/ # Ansible deployment playbooks
├── configs/ # Configuration files (Keycloak, prompts)
├── scripts/ # Utility scripts
└── docs/ # Documentation
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="environment-configuration"&gt;Environment Configuration&lt;/h2&gt;
&lt;h3 id="environment-files"&gt;Environment Files&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;env&lt;/code&gt;&lt;/strong&gt; (no extension): Template file, committed to git&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; (with dot): Local overrides, &lt;strong&gt;NEVER committed&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="required-secrets"&gt;Required Secrets&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Database passwords&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ARANGO_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KONG_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;different-strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KEYCLOAK_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;different-strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TRANSLATION_CACHE_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Keycloak secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KEYCLOAK_ADMIN_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;strong-admin-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KEYCLOAK_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;generate-with-openssl-rand-base64-32&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KEYCLOAK_PROXY_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;generate-with-openssl-rand-base64-32&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GENIE_ADMIN_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;strong-password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KC_DATAPREP_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;generate-with-openssl-rand-base64-32&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Email configuration (required for user verification)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EMAIL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smtp.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;587&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EMAIL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-email@example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EMAIL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-email-password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EMAIL_FROM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noreply@example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Optional: AI model access&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HUGGING_FACE_HUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-huggingface-token&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="generating-secure-passwords"&gt;Generating Secure Passwords&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using OpenSSL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl rand -base64 &lt;span class="m"&gt;32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Using Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 -c &lt;span class="s2"&gt;&amp;#34;import secrets; print(secrets.token_urlsafe(32))&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="component-development"&gt;Component Development&lt;/h2&gt;
&lt;h3 id="frontend-vue-3"&gt;Frontend (Vue 3)&lt;/h3&gt;
&lt;h4 id="prerequisites-1"&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 22.x LTS&lt;/li&gt;
&lt;li&gt;npm 9.x or later&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="installation"&gt;Installation&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; components/gov-chat-frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="development-commands"&gt;Development Commands&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run development server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run serve
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Build for production&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run tests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Lint code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run lint
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Auto-fix lint issues&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run lint:fix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Format code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run format
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check formatting without modifying&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run format:check
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="common-development-tasks"&gt;Common Development Tasks&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Adding a New Component&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>