# ============================================================================ # ForensicPathways Environment Configuration # ============================================================================ # Copy this file to .env and configure the REQUIRED values below. # Optional features can be enabled by uncommenting and configuring them. # ============================================================================ # 🔥 CRITICAL - REQUIRED FOR BASIC OPERATION # ============================================================================ # Your application's public URL (used for redirects and links) PUBLIC_BASE_URL=http://localhost:4321 # Secret key for session encryption (GENERATE A SECURE RANDOM STRING!) AUTH_SECRET=your-secret-key-change-in-production-please # Primary AI service for query processing (REQUIRED for core functionality) AI_ANALYZER_ENDPOINT=https://api.mistral.ai/v1/chat/completions AI_ANALYZER_API_KEY=your-ai-api-key-here AI_ANALYZER_MODEL=mistral/mistral-small-latest # ============================================================================ # ⚙️ IMPORTANT - CORE FEATURES CONFIGURATION # ============================================================================ # Application environment NODE_ENV=development # === AUTHENTICATION & SECURITY === # Set to true to require authentication (RECOMMENDED for production) AUTHENTICATION_NECESSARY_CONTRIBUTIONS=false AUTHENTICATION_NECESSARY_AI=false AUTHENTICATION_NECESSARY_GATEDCONTENT=true # OIDC Provider Configuration - Server appends endpoint (e.g. auth/callback) automatically OIDC_ENDPOINT=https://cloud.cc24.dev/index.php OIDC_CLIENT_ID=your-client-id OIDC_CLIENT_SECRET=your-client-secret # === FILE HANDLING === # Nextcloud server for file uploads (knowledgebase contributions) NEXTCLOUD_ENDPOINT=https://your-nextcloud.com NEXTCLOUD_USERNAME=your-username NEXTCLOUD_PASSWORD=your-app-password NEXTCLOUD_UPLOAD_PATH=/kb-media NEXTCLOUD_PUBLIC_URL=https://your-nextcloud.com/s/ # === COLLABORATION & CONTRIBUTIONS === # Git provider: gitea, github, or gitlab GIT_PROVIDER=gitea GIT_REPO_URL=https://git.example.com/owner/forensic-pathways.git GIT_API_ENDPOINT=https://git.example.com/api/v1 GIT_API_TOKEN=your-git-api-token # === AUDIT TRAIL (Important for forensic work) === FORENSIC_AUDIT_ENABLED=true FORENSIC_AUDIT_DETAIL_LEVEL=standard FORENSIC_AUDIT_RETENTION_HOURS=24 FORENSIC_AUDIT_MAX_ENTRIES=50 # === AI SEMANTIC SEARCH === # Enable semantic search (highly recommended for better results) AI_EMBEDDINGS_ENABLED=true AI_EMBEDDINGS_ENDPOINT=https://api.mistral.ai/v1/embeddings AI_EMBEDDINGS_API_KEY=your-embeddings-api-key-here AI_EMBEDDINGS_MODEL=mistral-embed # User rate limiting (queries per minute) AI_RATE_LIMIT_MAX_REQUESTS=4 # ============================================================================ # 🎥 VIDEO EMBEDDING - PRODUCTION CONFIGURATION # ============================================================================ # Enable local caching of Nextcloud videos (highly recommended) VIDEO_CACHE_ENABLED=true # Directory for cached videos (ensure it's writable and has sufficient space) # This directory will grow over time as videos are cached permanently VIDEO_CACHE_DIR=./cache/videos # Emergency cleanup threshold in MB - videos are cached indefinitely # Only triggers cleanup when approaching this limit to prevent disk full # Recommended: 2000MB (2GB) for small deployments, 5000MB+ for larger ones VIDEO_CACHE_MAX_SIZE=2000 # Maximum individual video file size for caching in MB # Videos larger than this will stream directly without caching VIDEO_MAX_SIZE=200 MINIO_URL=http://127.0.0.1:9000 MINIO_ACCESS_KEY=your-access-key MINIO_SECRET_KEY=your-secret-key # ============================================================================ # CACHING BEHAVIOR # ============================================================================ # - Videos downloaded once, cached permanently # - No time-based expiration # - Dramatically improves loading times after first download # - Emergency cleanup only when approaching disk space limit # - Perfect for manually curated forensics training content # ============================================================================ # ============================================================================ # 🎛️ PERFORMANCE TUNING - SENSIBLE DEFAULTS PROVIDED # ============================================================================ # === AI Pipeline Configuration === # These values are pre-tuned for optimal performance - adjust only if needed # Vector similarity search settings AI_EMBEDDING_CANDIDATES=50 AI_SIMILARITY_THRESHOLD=0.3 AI_EMBEDDING_SELECTION_LIMIT=30 AI_EMBEDDING_CONCEPTS_LIMIT=15 # === METHOD/TOOL BALANCE CONFIGURATION === # Controls the ratio of methods vs software tools sent to AI # Methods = procedural guidance, best practices, workflows # Software = actual tools and applications # Values should sum to less than 1.0 (remainder is buffer) AI_METHOD_SELECTION_RATIO=0.4 # 40% methods (increase for more procedural guidance) AI_SOFTWARE_SELECTION_RATIO=0.5 # 50% software tools (increase for more tool recommendations) # AI selection limits AI_MAX_SELECTED_ITEMS=25 AI_MAX_TOOLS_TO_ANALYZE=20 AI_MAX_CONCEPTS_TO_ANALYZE=10 # Efficiency thresholds AI_EMBEDDINGS_MIN_TOOLS=8 AI_EMBEDDINGS_MAX_REDUCTION_RATIO=0.75 # Fallback limits when embeddings are disabled AI_NO_EMBEDDINGS_TOOL_LIMIT=25 AI_NO_EMBEDDINGS_CONCEPT_LIMIT=10 # === Rate Limiting & Timing === AI_MICRO_TASK_TOTAL_LIMIT=30 AI_MICRO_TASK_DELAY_MS=500 AI_RATE_LIMIT_DELAY_MS=2000 # === Embeddings Batch Processing === AI_EMBEDDINGS_BATCH_SIZE=10 AI_EMBEDDINGS_BATCH_DELAY_MS=1000 # === Context Management === AI_MAX_CONTEXT_TOKENS=4000 AI_MAX_PROMPT_TOKENS=2500 # === Confidence Scoring === CONFIDENCE_SEMANTIC_WEIGHT=0.5 CONFIDENCE_SUITABILITY_WEIGHT=0.5 CONFIDENCE_MINIMUM_THRESHOLD=50 CONFIDENCE_MEDIUM_THRESHOLD=70 CONFIDENCE_HIGH_THRESHOLD=80 # ============================================================================ # 📋 QUICK SETUP CHECKLIST # ============================================================================ # # MINIMUM FOR DEVELOPMENT/TESTING: # 1. ✅ Set PUBLIC_BASE_URL to your domain/localhost # 2. ✅ Generate secure AUTH_SECRET (use: openssl rand -base64 32) # 3. ✅ Configure AI_ANALYZER_ENDPOINT and API_KEY for your AI service # 4. ✅ Test basic functionality # # PRODUCTION-READY DEPLOYMENT: # 5. ✅ Enable authentication (configure AUTHENTICATION_* and OIDC_*) # 6. ✅ Configure file handling (set NEXTCLOUD_* for uploads) # 7. ✅ Enable collaboration (set GIT_* for contributions) # 8. ✅ Enable audit trail (verify FORENSIC_AUDIT_ENABLED=true) # 9. ✅ Configure embeddings for better search (AI_EMBEDDINGS_*) # 10. ✅ Adjust rate limits based on expected usage # ============================================================================ # 🏃‍♂️ PERFORMANCE PRESETS - UNCOMMENT ONE IF NEEDED # ============================================================================ # 🚀 SPEED OPTIMIZED (faster responses, less comprehensive): # AI_EMBEDDING_CANDIDATES=25 # AI_MAX_SELECTED_ITEMS=15 # AI_MAX_TOOLS_TO_ANALYZE=10 # AI_MICRO_TASK_DELAY_MS=250 # 🎯 ACCURACY OPTIMIZED (slower responses, more comprehensive): # AI_EMBEDDING_CANDIDATES=100 # AI_MAX_SELECTED_ITEMS=50 # AI_MAX_TOOLS_TO_ANALYZE=40 # AI_MICRO_TASK_DELAY_MS=1000 # 🔋 RESOURCE CONSTRAINED (for limited AI quotas): # AI_RATE_LIMIT_MAX_REQUESTS=2 # AI_MICRO_TASK_TOTAL_LIMIT=15 # AI_MAX_TOOLS_TO_ANALYZE=10 # AI_EMBEDDINGS_ENABLED=false # 🔬 METHOD-FOCUSED (more procedural guidance, less tools): # AI_METHOD_SELECTION_RATIO=0.6 # AI_SOFTWARE_SELECTION_RATIO=0.3 # 🛠️ TOOL-FOCUSED (more software recommendations, less methods): # AI_METHOD_SELECTION_RATIO=0.2 # AI_SOFTWARE_SELECTION_RATIO=0.7 # ============================================================================ # 🌐 AI SERVICE EXAMPLES # ============================================================================ # === OLLAMA (Local) === # AI_ANALYZER_ENDPOINT=http://localhost:11434/v1/chat/completions # AI_ANALYZER_API_KEY= # AI_ANALYZER_MODEL=llama3.1:8b # AI_EMBEDDINGS_ENDPOINT=http://localhost:11434/v1/embeddings # AI_EMBEDDINGS_API_KEY= # AI_EMBEDDINGS_MODEL=nomic-embed-text # === OPENAI === # AI_ANALYZER_ENDPOINT=https://api.openai.com/v1/chat/completions # AI_ANALYZER_API_KEY=sk-your-openai-key # AI_ANALYZER_MODEL=gpt-4o-mini # AI_EMBEDDINGS_ENDPOINT=https://api.openai.com/v1/embeddings # AI_EMBEDDINGS_API_KEY=sk-your-openai-key # AI_EMBEDDINGS_MODEL=text-embedding-3-small # === MISTRAL (Default) === # AI_ANALYZER_ENDPOINT=https://api.mistral.ai/v1/chat/completions # AI_ANALYZER_API_KEY=your-mistral-key # AI_ANALYZER_MODEL=mistral-small-latest # AI_EMBEDDINGS_ENDPOINT=https://api.mistral.ai/v1/embeddings # AI_EMBEDDINGS_API_KEY=your-mistral-key # AI_EMBEDDINGS_MODEL=mistral-embed