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();

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>썸네일 이벤트 로그</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>사용자 현황관리 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= story.title %> - AI 성공 사례 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>AI 성공 사례 관리 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
<style>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>AI 성공 사례 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>AI - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>프롬프트 라이브러리 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>AX 과제 신청 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>채팅 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>학습센터</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<% var admTitle = typeof adminPageTitle !== 'undefined' ? adminPageTitle : '학습센터 관리'; %>
<title><%= admTitle %> - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>콘텐츠 수정 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= typeof pageTitle !== 'undefined' ? pageTitle : '학습센터' %> - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= lecture.title %> - 학습센터 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= lecture.title %> - 학습센터 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= lecture.title %> - PPT 뷰어</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= lecture.title %> - 동영상 강의</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title><%= lecture.title %> - YouTube 강의</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>서비스 접속 - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
<style>

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>회의록 AI - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>

View File

@@ -0,0 +1,2 @@
<link rel="icon" href="/public/images/xavis-logo.png" type="image/png" />
<link rel="apple-touch-icon" href="/public/images/xavis-logo.png" />

View File

@@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%- include('partials/favicon') %>
<title>업무 체크리스트 AI - XAVIS</title>
<link rel="stylesheet" href="/public/styles.css" />
</head>