# ---- Backend (apps/api reads this via pydantic-settings; copy to .env) ---- # Copy this file to `.env` and fill in real values. `.env` is gitignored; this file is not. # Never put real secrets in this example file. # Contact email sent in User-Agent to SEC/Wikipedia (SEC requires it) CONTACT_EMAIL=you@example.com # LLM provider chain, tried in order. Leave keys empty to run in no-LLM degraded mode. LLM_CHAIN=groq,cerebras,openrouter,ollama GROQ_API_KEY= GROQ_MODEL=llama-3.3-70b-versatile CEREBRAS_API_KEY= CEREBRAS_MODEL=llama-3.3-70b OPENROUTER_API_KEY= OPENROUTER_MODEL=meta-llama/llama-3.3-70b-instruct:free # Local Ollama (no key needed); leave OLLAMA_MODEL empty to skip OLLAMA_BASE_URL=http://localhost:11434/v1 OLLAMA_MODEL= # Optional: Firecrawl is the LAST rung of both the page-read and web-search ladders # (Jina Reader -> Firecrawl -> httpx, and DuckDuckGo -> DuckDuckGo Lite -> Firecrawl). # Everything works without it; a key only raises the ceiling on hard, JS-heavy pages. FIRECRAWL_API_KEY= # ---- Deployment ---- # Comma-separated browser origins the API accepts (CORS). Defaults to local dev; # set this to your deployed web origin(s), e.g. https://lynx.example.com CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000 # Where the SQLite database and HTTP cache live (relative to the repo root). # DATABASE_PATH=data/research.db # Global cap on simultaneous outbound HTTP requests. Per-source rate limiters are the # real politeness guardrail, so this can sit above the agent count. # MAX_CONCURRENT_FETCHES=16 # ---- Frontend (apps/web) ---- # The API origin the BROWSER will call. Baked into the bundle at BUILD time, so it must be # set when you build the web image — not just at runtime. Defaults to http://localhost:8000 # NEXT_PUBLIC_API_URL=https://api.example.com # Public origin of the web app itself; used for canonical URLs, sitemap.xml and robots.txt. # NEXT_PUBLIC_SITE_URL=https://lynx.example.com