JOIDY
DOCUMENTATION MENU

Configuration

Complete configuration reference for Joidy via environment variables.

Configuration

All configuration is done via environment variables.

Core

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | DATABASE_URL | Yes | sqlite:///data/joidy.db | SQLite database path | | SECRET_KEY | Yes | — | JWT secret (32+ chars) | | API_HOST | No | 0.0.0.0 | API bind address | | API_PORT | No | 8000 | API port | | LOG_LEVEL | No | info | Log level |

AI Providers

| Variable | Required | Description | |----------|----------|-------------| | OLLAMA_HOST | No | Ollama endpoint (default: http://ollama:11434) | | GEMINI_API_KEY | No | Google Gemini API key | | OPENAI_API_KEY | No | OpenAI API key | | ANTHROPIC_API_KEY | No | Anthropic API key | | DEFAULT_AI_PROVIDER | No | ollama, gemini, openai, anthropic | | EMBEDDING_MODEL | No | Embedding model name | | CLASSIFICATION_MODEL | No | Classification model name |

Obsidian Integration

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | OBSIDIAN_VAULT_PATH | No | /app/vault | Path to Obsidian vault | | WATCH_INTERVAL | No | 5000 | File watch interval (ms) | | SYNC_ON_START | No | true | Full sync on startup | | IGNORE_PATTERNS | No | .obsidian,*.canvas | Glob patterns to ignore |

Vector Search

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | VECTOR_DIM | No | 768 | Embedding dimensions | | SIMILARITY_THRESHOLD | No | 0.7 | Minimum cosine similarity | | MAX_SEARCH_RESULTS | No | 10 | Max results per query |

Gamification

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | XP_PER_NOTE | No | 10 | Base XP per note | | XP_PER_TAG | No | 2 | XP per tag | | STREAK_GRACE_HOURS | No | 24 | Hours before streak breaks |

Rate Limiting

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | RATE_LIMIT_REQUESTS | No | 100 | Requests per window | | RATE_LIMIT_WINDOW | No | 60 | Window in seconds |

CORS

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | CORS_ORIGINS | No | http://localhost:3000 | Comma-separated origins |

Example .env

# Core
DATABASE_URL=sqlite:///data/joidy.db
SECRET_KEY=your-super-secret-key-change-in-production

# AI (at least one)
OLLAMA_HOST=http://ollama:11434
# GEMINI_API_KEY=your-key
# OPENAI_API_KEY=your-key

# Obsidian
OBSIDIAN_VAULT_PATH=/home/user/obsidian-vault
WATCH_INTERVAL=5000

# Optional tuning
VECTOR_DIM=768
SIMILARITY_THRESHOLD=0.7
LOG_LEVEL=info
CORS_ORIGINS=http://localhost:3000,https://joidy.local

Generating SECRET_KEY

# OpenSSL
openssl rand -hex 32

# Python
python -c "import secrets; print(secrets.token_hex(32))"

Docker Compose Override

For local development, create docker-compose.override.yml:

services:
  api:
    environment:
      - LOG_LEVEL=debug
      - DATABASE_URL=sqlite:///data/joidy.db
    volumes:
      - ./api:/app
      - ./data:/app/data
  
  worker:
    volumes:
      - ./worker:/app
      - /home/user/obsidian-vault:/app/vault:ro