From ddefe851f4ed83896ed19a9b86207e17e2d91654 Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #57)" Date: Fri, 3 Apr 2026 17:27:30 +0000 Subject: [PATCH] fix: implement express-ejs-layouts for proper template inheritance ISSUE: EJS v3+ removed ability to pass raw template strings to include() Dashboard template used old pattern causing 'include is not a function' error SOLUTION (per Gemini consultation): 1. Installed express-ejs-layouts package 2. Added expressLayouts middleware to index.js 3. Set default layout to 'layout' 4. layout.ejs already had <%- body %> injection point 5. Removed include() wrapper from dashboard.ejs (first/last lines) FILES MODIFIED: - services/arbiter-3.0/src/index.js (+4 lines - import and config) - services/arbiter-3.0/src/views/admin/dashboard.ejs (-2 lines - wrapper removal) TESTING: Visit /admin after Discord OAuth - should render HTML dashboard Credit: Gemini consultation - EJS v3+ layout pattern fix Signed-off-by: Claude (Chronicler #57) --- services/arbiter-3.0/src/index.js | 5 +++++ services/arbiter-3.0/src/views/admin/dashboard.ejs | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/services/arbiter-3.0/src/index.js b/services/arbiter-3.0/src/index.js index 6feacd8..b6993f2 100644 --- a/services/arbiter-3.0/src/index.js +++ b/services/arbiter-3.0/src/index.js @@ -1,5 +1,6 @@ require('dotenv').config(); const express = require('express'); +const expressLayouts = require('express-ejs-layouts'); const session = require('express-session'); const passport = require('passport'); const DiscordStrategy = require('passport-discord').Strategy; @@ -38,6 +39,10 @@ app.set('trust proxy', 1); app.set('view engine', 'ejs'); app.set('views', __dirname + '/views'); +// Enable proper layout rendering with express-ejs-layouts +app.use(expressLayouts); +app.set('layout', 'layout'); // Default layout is views/layout.ejs + // CRITICAL: Stripe webhook needs raw body BEFORE express.json() middleware // Mounted at /webhooks/stripe to avoid conflict with /stripe checkout mount app.use('/webhooks/stripe', stripeRoutes); diff --git a/services/arbiter-3.0/src/views/admin/dashboard.ejs b/services/arbiter-3.0/src/views/admin/dashboard.ejs index 266da27..e219ca2 100644 --- a/services/arbiter-3.0/src/views/admin/dashboard.ejs +++ b/services/arbiter-3.0/src/views/admin/dashboard.ejs @@ -1,4 +1,3 @@ -<%- include('../layout', { body: `
Active Subscribers
@@ -27,4 +26,3 @@ Fire + Frost + Foundation = Where Love Builds Legacy

-`}) %>