# OpenVibe.Work — environment (production: /etc/openvibe/work.env). Names only; never commit values. NODE_ENV=production PORT=4960 HOST=127.0.0.1 BASE_URL=https://openvibe.work TRUST_PROXY=2 # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh work: the runtime role through PgBouncer, # the owner on a direct connection (migrations), and Valkey (shared limit counters). # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= VALKEY_URL= VALKEY_PREFIX=ov:work: # Per-caller limits (server/http/caller-limits.js): requests one caller may make to the API per minute and per hour. #WORK_LIMITS_MINUTE=120 #WORK_LIMITS_HOUR=3000 # OpenVibe.Network: SSO (OAuth client `work`, PKCE S256) and its JWKS; app tokens for audience openvibe.work. OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 OV_OAUTH_CLIENT_ID=work OV_OAUTH_CLIENT_SECRET= # OV_OAUTH_REDIRECT_URI=https://openvibe.work/auth/callback # OV_NETWORK_ISSUER=https://openvibe.network # The audience a person's own session token carries. # OV_SESSION_AUDIENCE=openvibe.network # The audience app, agent and service tokens for this service's API carry. # WORK_AUDIENCE=openvibe.work # The agent pillar: job applications (server/applications.js) and the OpenVibe.Actor client (server/actor.js). # WORK_APPLICATIONS_MAX caps how many applications one person may track (default 500). WORK_ACTOR_URL unset means # "no agent": POST …/assist answers 503 work.actor_unavailable rather than call anywhere. WORK_ACTOR_PUBLIC_URL is # the human-facing origin a task_url points at. #WORK_APPLICATIONS_MAX=500 #WORK_APPLICATIONS_ASSISTS_PER_DAY=10 #WORK_ACTOR_URL=http://127.0.0.1:4950 #WORK_ACTOR_PUBLIC_URL=https://openvibe.actor #WORK_ACTOR_TIMEOUT_MS=15000 # OpenVibe.Events → Work (ADR-033 account export and deletion): the secret signs a delivery (comma-separated for # rotation, 32+ characters each; unset makes POST /internal/events answer 503); the url is where the two subscriptions # are created at boot (off when unset); WORK_EVENTS_SUBSCRIBE=0 turns that off. WORK_EVENTS_SECRET= WORK_EVENTS_URL= #WORK_EVENTS_ENDPOINT=http://127.0.0.1:4960/internal/events # optional: defaults to true in production # COOKIE_SECURE=true # IndexNow: with a key (8–128 letters and digits), each ingest run's new listing pages and the sitemap are sent to # search engines in one batch, and the key is served at /.txt. Unset: off. #INDEXNOW_KEY= # The job-board ingest (server/ingest/). Off unless WORK_INGEST=on: a development run and the test suite read no board. # Set it on the host, or no listing ever arrives. Each source is read at most every WORK_INGEST_INTERVAL_HOURS (6), # which is exactly the four calls a day Remotive's terms allow. #WORK_INGEST=on #WORK_INGEST_INTERVAL_HOURS=6 #WORK_INGEST_TIMEOUT_MS=15000 #WORK_INGEST_LIMIT=100 #WORK_RETENTION_DAYS=30 # Remotive is the one board Work still fetches itself (its API terms grant a named, linked use; its robots.txt # disallows /api/* so OpenVibe.Sources may not fetch it). Point this at a stand-in server to test the ingest; # nothing else in the service fetches a URL, and never one a caller typed. #WORK_REMOTIVE_URL=https://remotive.com/api/remote-jobs # Arbeitnow, We Work Remotely, Hacker News "Who is hiring" and RemoteOK come through OpenVibe.Sources # (server/ingest/from-sources.js). Needs OV_OAUTH_CLIENT_SECRET (Network grants Work sources.item.read); # Sources is on 127.0.0.1:4720. #OV_SOURCES_INTERNAL_URL=http://127.0.0.1:4720 # USAJOBS (D11 owner settings): the admin panel's work.data_sources namespace wins; these are the # fallback when no value was entered there. The email must match the key's account. #USAJOBS_API_KEY= #USAJOBS_ACCOUNT_EMAIL= # The User-Agent the boards see. Defaults to OpenVibeWork/0.1 (+). #WORK_USER_AGENT= # An embedded PGlite directory in development, when DATABASE_URL is unset. #WORK_PGLITE_DIR=