feat/sso 작업을 라우트 개편된 현재 main 에 이식.
- handleCallback 이 id_token 반환, 콜백에서 분리해 session.idToken 에만 보관(뷰/DB 비노출)
- logoutUrl(): end_session_endpoint + id_token_hint 로 확인화면 없이 즉시 로그아웃
- /logout: 로컬 세션 destroy 후 Keycloak end-session 으로 리다이렉트해 SSO 세션까지 종료
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
public/js/{util,ui,reactions,modals,comments,feed,main}.js 로 분리하고
dashboard/project 에서 <script type="module" src="/public/js/main.js"> 로 로드.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
public/css/{tokens,base,layout,components,modal}.css 로 분리하고 _header 에서 다중 link 로드.
tokens.css 에 Pretendard @font-face(public/fonts/PretendardVariable.woff2, 없으면 시스템 폰트 폴백).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
프레임워크/번들러/빌드는 계속 금지하되, 다중 <link> CSS·네이티브 ESM 모듈 분할은 허용.
임시 미리보기 파일(_preview.mjs)을 .gitignore 에 추가.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- PRD: 반응 2종(heart/star)·공개여부·lang·대댓글·라우트·다크모드/검색/토스트·role 확정 반영
- CLAUDE: 구조 맵(app.js·helpers.js·_project_detail·hearts)·role 인증 모델 갱신
- 부팅 스모크 테스트(/healthz) 통과, 실 DB 기능 점검만 잔여
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
app.js DOM 계약(data-* 속성)에 맞춘 카드/배지/반응 버튼 렌더.
검색·정렬·필터·모달 오픈을 위한 data-search/created/pop/starred/vis 부여.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- requireAuth: /login 거치지 않고 loginRedirect로 직접 Keycloak으로
- /login 라우트도 oidcReady면 즉시 리다이렉트
- OIDC discovery 실패 시에만 안내 페이지 폴백, /api/*는 401 유지
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Express+EJS+Postgres 사내 개발 포털.
- Keycloak OIDC(사번 로그인), GitHub 감성 UI
- 사이트 모음 + 프로젝트 공유/코멘트/스타
- DB: OpenEverest appdb portal schema (portal_app role)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>