# ───────────────────────────────────────────────────────────────────────────── # MapleBrief — environment configuration # Copy to `.env` and fill in the values you need. Only the entries marked # REQUIRED need to be set for the app to boot; everything else has a sane # fallback or is managed from the /admin/settings UI (stored in the database). # ───────────────────────────────────────────────────────────────────────────── # --------------------------------------------------------------------------- # Database (REQUIRED) # SQLite by default — zero-config for local dev. For PostgreSQL, change # provider in prisma/schema.prisma and point DATABASE_URL at a postgres URL. # --------------------------------------------------------------------------- DATABASE_URL="file:./dev.db" # --------------------------------------------------------------------------- # Site (public — inlined into the browser) # --------------------------------------------------------------------------- NEXT_PUBLIC_SITE_NAME="MapleBrief" NEXT_PUBLIC_SITE_URL="http://localhost:3000" NEXT_PUBLIC_SITE_DESCRIPTION="Independently synthesized briefings on the news that matters across Canada. A neutral, source-attributed daily digest of Canadian headlines from CBC, CTV, Global, the Globe and more." # --------------------------------------------------------------------------- # Content reliability — used as fallback identity for feed fetches # --------------------------------------------------------------------------- FEED_USER_AGENT="MapleBrief/1.0 (+https://localhost:3000; rss reader)" # --------------------------------------------------------------------------- # Background ingestion scheduler # TURN these off to run by hand (see README "Running the worker"). # --------------------------------------------------------------------------- RUN_SCHEDULER="true" # set to "false" to disable the node-cron worker CRON_SCHEDULE="*/35 * * * *" # every 35 minutes (spec: 30-60 minute cadence) MAX_SYNTH_PER_RUN="24" # cap LLM syntheses per run to limit API spend FETCH_CONTENT="true" # set to "false" to skip original HTML fetch HTTP_TIMEOUT_MS="12000" # per-request timeout for HTML fetches # --------------------------------------------------------------------------- # LLM providers (fallback defaults; the /admin/settings UI overrides all of # these at runtime and stores the active choices in the database). # API keys referenced here are used only when the admin UI has NOT stored a # value for that provider. Never commit real keys to .env in a shared repo. # --------------------------------------------------------------------------- OPENAI_API_KEY="" ANTHROPIC_API_KEY="" OLLAMA_BASE_URL="http://localhost:11434" OLLAMA_MODEL="llama3.2:3b" # --------------------------------------------------------------------------- # Administration (protects the /admin/settings UI and /api/settings, # /api/refresh endpoints). Must be a strong random string in production. # --------------------------------------------------------------------------- ADMIN_API_KEY="change-me-to-a-32-char-random-string" # --------------------------------------------------------------------------- # Google AdSense (public — publisher id + per-unit ad slots). # NEXT_PUBLIC_ADSENSE_CLIENT_ID looks like: ca-pub-1234567890123456 # Slot ids are the numeric "slot" values from your AdSense Ad units UI. # Leave a slot blank and the renders a labelled placeholder — # perfect for local preview before your AdSense account is approved. # --------------------------------------------------------------------------- NEXT_PUBLIC_ADSENSE_CLIENT_ID="" NEXT_PUBLIC_ADSENSE_SLOT_HEADER="" NEXT_PUBLIC_ADSENSE_SLOT_INFEED="" NEXT_PUBLIC_ADSENSE_SLOT_INARTICLE="" NEXT_PUBLIC_ADSENSE_SLOT_SIDEBAR=""