[object Object]

← back to Rentv

server: dependency-free .env loader (durable prod config across deploys)

2e7caa4b3d8a0cb89de6bc9f4264935632f21bc4 · 2026-08-04 16:59:36 -0700 · steve

Files touched

Diff

commit 2e7caa4b3d8a0cb89de6bc9f4264935632f21bc4
Author: steve <steve@designerwallcoverings.com>
Date:   Tue Aug 4 16:59:36 2026 -0700

    server: dependency-free .env loader (durable prod config across deploys)
---
 server.js | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/server.js b/server.js
index 3f8fbc32..8f7a2ecb 100644
--- a/server.js
+++ b/server.js
@@ -5,6 +5,15 @@
 // Folds in the consulting deliverable (/consulting) + promos (/press), admin-only.
 const fs = require('fs');
 const path = require('path');
+// Lightweight .env loader (no dotenv dependency): populate process.env from ./.env if present,
+// without overriding anything already set. Durable across deploys — .env is rsync-excluded, so
+// prod-only config (e.g. OLLAMA_URL → Mac2's GPU over the tailnet) survives every reload.
+try {
+  for (const line of fs.readFileSync(path.join(__dirname, '.env'), 'utf8').split('\n')) {
+    const m = line.match(/^\s*([A-Za-z0-9_]+)\s*=\s*(.*?)\s*$/);
+    if (m && !(m[1] in process.env)) process.env[m[1]] = m[2].replace(/^["']|["']$/g, '');
+  }
+} catch { /* no .env — fine */ }
 const { localizeImage } = require('./scripts/lib/localize.cjs'); // never hotlink rentv.com photos
 const { spawn } = require('child_process'); // article-to-video generator jobs (/social studio)
 const express = require('express');

← 8c9901f9 CRM Content Studio: deep multi-source dated news feed → orig  ·  back to Rentv  ·  auto-save: 2026-08-04T17:05:12 (4 files) — .deploy.conf data 4ce9fdce →