ace46d2fb85ee8dc9853094842407e27d77d4481
- GET / : 내 프로젝트/피드 분리, role 도구 필터, 댓글 일괄 조회(commentsByProject) - 반응(heart/star) AJAX JSON, visibility/delete(본인), 댓글/대댓글(parent_id) - 댓글 LGTM/🚀 egg 신호 + return_to 복귀, isAjax/safeBack 헬퍼 - res.locals 로 icon/identicon/langColor 노출 - db: listCommentsByProjects 추가, _header: body 시작 신호(toast/egg/open) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
AI DEV — 사내 개발 포털
직원이 한 곳에서 사내 개발 사이트로 이동하고, 만든 프로젝트를 공유·코멘트하는 포털. GitHub 감성 UI. Keycloak SSO(사번 로그인). Node(Express+EJS) + Postgres.
브랜드명
AI DEV는PORTAL_BRAND환경변수로 바꿀 수 있습니다.
기능
- Keycloak OIDC 로그인 (realm
bokdev, clientportal, 사번 = preferred_username) - 개발 사이트 모음 — 개발 핵심(Coder/Gitea/Kubero/Harbor) + AI·데이터(LiteLLM/Chat/OpenEverest/MinIO). 목록은
src/sites.js. - 프로젝트 공유 — repo/앱 URL·설명·태그
- 코멘트 / 스타
로컬 실행
cp .project-env.example .project-env # 값 채우기 (OIDC_CLIENT_SECRET 등)
set -a; . ./.project-env; set +a
npm install
npm run db:init # schema.sql 적용 (최초 1회)
npm run dev # http://localhost:3000
- 로컬에서 OIDC 콜백을 받으려면 Keycloak
portalclient redirect 에http://localhost:3000/auth/callback이 등록돼 있어야 합니다(이미 등록됨).
배포 (Kubero)
- NodeJS buildpack (
npm install→node index.js). Dockerfile 불필요. - Kubero Env:
BASE_URL=https://portal.bokdev.in,DATABASE_URL,OIDC_*,SESSION_SECRET,PORTAL_BRAND. - 도메인:
portal.bokdev.in(게이트웨이/라우트 별도 구성 필요) 또는<app>.apps.bokdev.in. - 배포 도메인이 정해지면 Keycloak
portalclient redirect 에https://<도메인>/auth/callback추가.
연결 정보
- DB: OpenEverest
postgresql-6ox의appdb, schemaportal, roleportal_app. - Issuer:
https://keycloak.bokdev.in/realms/bokdev
자세한 작업 규약은 CLAUDE.md.
Description
Languages
JavaScript
43.7%
HTML
27.9%
CSS
15.4%
EJS
12.8%
Dockerfile
0.2%