From 0f32fffe797b401870828f595d93e97275c87156 Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Sat, 7 Mar 2026 16:20:19 -0800 Subject: [PATCH] fix(server): serve cached index.html in SPA catch-all to prevent 500 res.sendFile can emit NotFoundError from the send module in certain path resolution scenarios, causing 500s on company-scoped SPA routes. Cache index.html at startup and serve it directly, which is both more reliable and faster. Fixes #233 Co-Authored-By: Claude Opus 4.6 --- server/src/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/app.ts b/server/src/app.ts index d663654f..b21ec39f 100644 --- a/server/src/app.ts +++ b/server/src/app.ts @@ -134,9 +134,10 @@ export async function createApp( ]; const uiDist = candidates.find((p) => fs.existsSync(path.join(p, "index.html"))); if (uiDist) { + const indexHtml = fs.readFileSync(path.join(uiDist, "index.html"), "utf-8"); app.use(express.static(uiDist)); app.get(/.*/, (_req, res) => { - res.sendFile("index.html", { root: uiDist }); + res.status(200).set("Content-Type", "text/html").end(indexHtml); }); } else { console.warn("[paperclip] UI dist not found; running in API-only mode");