Python 64.6%
TypeScript 33.7%
CSS 0.8%
1# --- LLM (OpenRouter) — slugs vérifiés sur https://openrouter.ai/models le 2026-09-052OPENROUTER_API_KEY=3OPENROUTER_BASE_URL=https://openrouter.ai/api/v14MODEL_TUTOR_PRIMARY=anthropic/claude-fable-5.15MODEL_TUTOR_FALLBACK=openai/gpt-5.56MODEL_REASONING=anthropic/claude-opus-4.67MODEL_FAST=openai/gpt-5.4-nano8MODEL_VISION=anthropic/claude-sonnet-4.69# OpenRouter n'expose pas de modèle d'embeddings : endpoint OpenAI-compatible optionnel (sinon BM25 seul)10EMBEDDINGS_BASE_URL=11EMBEDDINGS_API_KEY=12MODEL_EMBEDDINGS=13LLM_MONTHLY_BUDGET_USD=20001415# --- Recherche web16FIRECRAWL_API_KEY=1718# --- Données (défaut : SQLite dans DATA_DIR ; PostgreSQL via DATABASE_URL)19DATA_DIR=./data20DATABASE_URL=21REDIS_URL=2223# --- Sandbox (service séparé sandbox-runner)24SANDBOX_URL=http://127.0.0.1:819125SANDBOX_TIMEOUT_S=3026SANDBOX_TOKEN=2728# --- Auth29JWT_SECRET=change-me30ALLOWED_EMAIL_DOMAINS=uqo.ca31INVITED_EMAILS=32PROFESSOR_EMAILS=prof@uqo.ca33ADMIN_EMAILS=34# Courriels (invitation « choisis ton mot de passe », mot de passe oublié) : Resend d'abord, SMTP en repli35RESEND_API_KEY=36MAIL_FROM=UQO-Chat <no-reply@uqo-chat.app>37MAIL_REPLY_TO=38INVITE_TTL_DAYS=1439RESET_TTL_MINUTES=6040SMTP_HOST=41SMTP_PORT=58742SMTP_USER=43SMTP_PASSWORD=44SMTP_FROM=no-reply@uqo-chat.app4546# --- App47APP_ENV=development48APP_URL=http://localhost:819049PORT=819050CORS_ORIGINS=http://localhost:5173,http://localhost:819051LOG_LEVEL=INFO52TERM_LABEL=Automne 202653COURSES=IMM1003,IMM10335455# --- Frontend (build-time)56VITE_API_URL=/api/v157VITE_USE_OFFICIAL_LOGO=false58VITE_COURSES=IMM1003,IMM10335960# --- ngrok (operator k8s ou agent sur le nœud)61NGROK_API_KEY=62NGROK_AUTHTOKEN=63