feat(ui): 파비콘을 xavis-logo.png로 통일

- partials/favicon.ejs로 icon·apple-touch-icon 링크
- 전 페이지 head에 include, /favicon.ico는 동일 PNG 제공
- 인라인 403 HTML에도 favicon 링크

Made-with: Cursor
This commit is contained in:
2026-04-05 22:33:36 +09:00
parent e0e8d8d662
commit 9f647cd783
23 changed files with 29 additions and 2 deletions

View File

@@ -1106,6 +1106,10 @@ async function syncAutoChecklistFromMeetingMinutes(openai, { pgPool, email, meet
}
app.use("/public", express.static(path.join(ROOT_DIR, "public")));
app.get("/favicon.ico", (req, res) => {
res.type("image/png");
res.sendFile(path.join(ROOT_DIR, "public", "images", "xavis-logo.png"));
});
/** 채팅 마크다운 뷰어(marked + DOMPurify) — node_modules에서만 제공 */
app.use("/vendor/marked", express.static(path.join(ROOT_DIR, "node_modules/marked/lib")));
app.use("/vendor/dompurify", express.static(path.join(ROOT_DIR, "node_modules/dompurify/dist")));
@@ -1166,7 +1170,7 @@ pageRouter.get("/ai-explore/task-checklist", (req, res) =>
pageRouter.get("/ai-cases/write", (req, res) => {
if (!res.locals.adminMode) {
return res.status(403).send(
"<!doctype html><html lang=\"ko\"><head><meta charset=\"utf-8\"/><title>권한 없음</title></head><body><p>관리자 모드가 필요합니다. 좌측 하단 <strong>관리자</strong>에서 토큰을 입력한 뒤 다시 시도하세요.</p><p><a href=\"/ai-cases\">AI 성공 사례 목록으로</a></p></body></html>"
"<!doctype html><html lang=\"ko\"><head><meta charset=\"utf-8\"/><link rel=\"icon\" href=\"/public/images/xavis-logo.png\" type=\"image/png\"/><title>권한 없음</title></head><body><p>관리자 모드가 필요합니다. 좌측 하단 <strong>관리자</strong>에서 토큰을 입력한 뒤 다시 시도하세요.</p><p><a href=\"/ai-cases\">AI 성공 사례 목록으로</a></p></body></html>"
);
}
const editSlug = (req.query.edit || "").trim();
@@ -1206,7 +1210,7 @@ pageRouter.get("/ai-cases/:slug", async (req, res, next) => {
try {
if (!isAiSuccessStoryDetailAllowed(req, res)) {
return res.status(403).send(
"<!doctype html><html lang=\"ko\"><head><meta charset=\"utf-8\"/><title>상세 열람 불가</title><link rel=\"stylesheet\" href=\"/public/styles.css\" /></head><body><div class=\"app-shell\"><div class=\"content-area\" style=\"padding:24px;max-width:560px;\"><h1>상세 열람 불가</h1><p>로그인 후 이용 가능합니다.</p><p><a href=\"/ai-cases\">AI 성공 사례 목록으로</a></p></div></div></body></html>"
"<!doctype html><html lang=\"ko\"><head><meta charset=\"utf-8\"/><link rel=\"icon\" href=\"/public/images/xavis-logo.png\" type=\"image/png\"/><title>상세 열람 불가</title><link rel=\"stylesheet\" href=\"/public/styles.css\" /></head><body><div class=\"app-shell\"><div class=\"content-area\" style=\"padding:24px;max-width:560px;\"><h1>상세 열람 불가</h1><p>로그인 후 이용 가능합니다.</p><p><a href=\"/ai-cases\">AI 성공 사례 목록으로</a></p></div></div></body></html>"
);
}
const slug = (req.params.slug || "").trim();