doxa-maps-cdn/.env.example
doxa-maps fa3591ca9b Subdomain branch: the gallery and maps addresses are read per request, as on the Plugin Studio branch
dx-base's three commits from research-gallery-plugin-studio (the runtime loader, check:origins and
its lint pass) apply here unchanged: the code is byte-identical to that branch. What differs is what
the two settings point at on this route. The Research Gallery is the research site the team's
dx-maps container serves, and the maps load from the container's published tree, which the research
subdomain serves at /dx-maps (the Studio's host serves the same tree at /cdn/dx-maps; both send
CORS). The comments, .env.example and DX-MAPS-GALLERY.md now say so, with this route's laptop
values (research.localhost:4615, as compose.laptop.yaml already sets).

DX-MAPS-GALLERY.md's "Run it" said no .env is needed for /research. That stopped being true when the
default maps host was removed, so it now names the one setting the maps need.

check:origins: 15 problems on research-gallery-subdomain before, PASS (306 files) after.
2026-09-29 05:19:41 +00:00

106 lines
4.9 KiB
Text

APP_TITLE=My App
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
NODE_ENV=development
NUXT_PUBLIC_SITE_URL=http://localhost:3000
JWT_SECRET=your-super-secret-jwt-key-change-this
# SendGrid (transactional email: invites, password resets, verification).
# Sends through the v3 JSON API. The From address in SMTP_FROM must be on a
# domain authenticated in the SendGrid account.
SENDGRID_API_KEY=your-sendgrid-api-key
# Optional API host override; defaults to api.sendgrid.com (use api.eu.sendgrid.com for EU)
SENDGRID_HOST=
SMTP_FROM=noreply@yourdomain.com
SMTP_FROM_NAME=My App
S3_ENDPOINT=https://s3.us-west-004.backblazeb2.com
S3_REGION=us-west-004
S3_ACCESS_KEY_ID=your-access-key-id
S3_SECRET_ACCESS_KEY=your-secret-access-key
S3_BUCKET_NAME=your-bucket-name
# Optional: only required if you call uploadToS3(..., 'public') or getPublicUrl()
# Set to the custom domain attached to your bucket (e.g. Cloudflare R2 custom domain)
S3_PUBLIC_BASE_URL=https://cdn.example.com
# Prayer Tools integration
NUXT_PRAY_BASE_URL=https://pray.doxa.life
NUXT_PUBLIC_PRAY_BASE_URL=https://pray.doxa.life
FORM_API_KEY=your-form-api-key
# DOXA Prayer App store listings (app promo section on /pray and the research
# people group pages). Leave MOBILE_APP_APPLE_ID empty to hide the App Store
# badge until the iOS app is live.
MOBILE_APP_APPLE_ID=
MOBILE_APP_ANDROID_PACKAGE=life.doxa.pray
# Mapbox (used by the prayer map on /pray)
NUXT_PUBLIC_MAPBOX_TOKEN=your-mapbox-public-token
# The subdomain branch's two addresses, per deployment. Both are REQUIRED, and both are read by the
# server at REQUEST time (server/utils/dx-runtime.ts). They are never baked into a build, so one build
# serves any deployment. Changing them needs a restart, not a rebuild. There is no default host: when
# one is unset, the pages that need it say which setting is missing.
#
# The Research Gallery: the research site on its own subdomain, served by the team's dx-maps container.
# The menu's Research item, every in-page gallery link and the /regions index go here (through this
# site's /research-gallery).
# VPS: NUXT_PUBLIC_RESEARCH_GALLERY_URL=https://research.<host>/
# laptop: NUXT_PUBLIC_RESEARCH_GALLERY_URL=http://research.localhost:4615/
NUXT_PUBLIC_RESEARCH_GALLERY_URL=
#
# The dx-maps tree this site's maps load from: the container's published tree, which the research
# subdomain serves at /dx-maps. It must send Access-Control-Allow-Origin for the tree (the container
# does). The Studio's own host serves the same tree at /cdn/dx-maps.
# VPS: NUXT_PUBLIC_DX_MAPS_BASE=https://research.<host>/dx-maps
# laptop: NUXT_PUBLIC_DX_MAPS_BASE=http://research.localhost:4615/dx-maps
NUXT_PUBLIC_DX_MAPS_BASE=
# Cloudflare Turnstile
NUXT_TURNSTILE_SITE_KEY=your-turnstile-site-key
NUXT_TURNSTILE_SECRET_KEY=your-turnstile-secret-key
# Statinator analytics (self-hosted tracking-server)
# Project must exist on the tracking-server with this site's hostname in allowed_domains.
# Set NUXT_PUBLIC_STATINATOR_ENABLED=false (or unset) to disable tracking entirely.
NUXT_PUBLIC_STATINATOR_URL=https://statinator.doxa.life
NUXT_PUBLIC_STATINATOR_PROJECT_ID=doxa
NUXT_PUBLIC_STATINATOR_ENABLED=true
# Cookie domain for the shared visitor ID (links activity across doxa.life and pray.doxa.life).
# Set to empty in dev to make the cookie host-only.
NUXT_PUBLIC_STATINATOR_COOKIE_DOMAIN=.doxa.life
# OpenRouter (used by the CMS "Auto-translate" workflow on /admin/pages/:id
# and the translate_text / translate_page MCP tools)
OPENROUTER_API_KEY=your-openrouter-api-key
# Optional model override. Admins can also set it at /admin/settings, which wins
# over this. Defaults to anthropic/claude-opus-5 when both are unset.
TRANSLATION_MODEL=
# Cloudflare cache purge on deploy (server/plugins/cloudflare-purge.ts).
# On container boot the edge cache is purged so stale prerendered HTML can't
# reference content-hashed assets the new deploy replaced. Leave both blank to
# disable (e.g. in dev). Token: My Profile → API Tokens → Custom Token with
# Zone → Cache Purge for the doxa.life zone. Zone ID: zone Overview page.
CF_API_TOKEN=
CF_ZONE_ID=
# OAuth 2.1 server
# Issuer is derived from NUXT_PUBLIC_SITE_URL; resource is `${siteUrl}/mcp`.
# Generate with: openssl rand -hex 32
OAUTH_CONSENT_COOKIE_SECRET=replace-me-at-least-32-bytes-of-random-hex-or-base64
OAUTH_ALLOW_DCR=false
# Path to the OAuth Nuxt layer (extends). Optional — leave blank to skip.
# Local dev typically points at a sibling checkout (e.g. ../../base-code/layers/oauth);
# prod can use a github: shorthand or a pinned path.
OAUTH_LAYER_PATH=
# MCP server layer (extends; depends on the OAuth layer).
# Path to the MCP Nuxt layer. Leave blank to skip the MCP transport.
MCP_LAYER_PATH=
# MCP server identity advertised in the `initialize` response.
MCP_SERVER_NAME=marketing-rebuild
MCP_SERVER_VERSION=1.0.0
# The map engine for every map: maplibre (keyless, the default) or mapbox (needs NUXT_PUBLIC_MAPBOX_TOKEN).
# NUXT_PUBLIC_MAP_PROVIDER=maplibre