# ── Required ────────────────────────────────────────────────────────────────── # SQLite database path DATABASE_URL=sqlite:data.db?mode=rwc # JWT signing secret — change this before deploying # Generate a strong one: openssl rand -hex 32 JWT_SECRET=change-me-before-deploying-use-openssl-rand-hex-32 # ── Server ──────────────────────────────────────────────────────────────────── HOST=0.0.0.0 PORT=3000 # Comma-separated allowed CORS origins (empty = block all cross-origin requests) CORS_ORIGINS=http://localhost:5173 # Set to false to disable public registration ALLOW_REGISTRATION=true # ── Events ──────────────────────────────────────────────────────────────────── # If unset, an in-memory bus is used (fine for single-process dev). # For the worker to process note events, set this. # NATS_URL=nats://localhost:4222 # ── Smart features (optional) ───────────────────────────────────────────────── # Set both to enable semantic search and related notes. # QDRANT_URL=http://localhost:6334 # QDRANT_COLLECTION=notes # Set to true ONLY in the worker process — loads the fastembed model (~150 MB). # Leave unset (or false) in the API server. # ENABLE_EMBEDDINGS=true # ── Frontend ────────────────────────────────────────────────────────────────── # Path to the built SPA dist directory. # Defaults to k-notes-frontend/dist (run `make build-frontend` first). # Set to empty string to run API-only (no SPA served). # SPA_DIR=k-notes-frontend/dist # ── JWT options (optional) ──────────────────────────────────────────────────── # JWT_EXPIRY_HOURS=24 # JWT_ISSUER= # JWT_AUDIENCE=