- 프로필 페이지 /u/:sabun 신설 (본인=비공개 포함, 타인=공개만).
헤더 "내 프로필", 카드·모달·댓글 작성자 클릭 시 프로필로 이동.
- 프로필 사진 업로드: users.avatar(bytea) 저장, GET /avatar/:sabun
(업로드본 없으면 identicon SVG 폴백), POST /profile/avatar(express.raw).
브라우저 canvas 크롭(256px webp) — 서버 이미지 라이브러리/멀터 불필요.
identicon 6개 렌더 지점을 avatar() 헬퍼로 통일.
- 상세 모달 폭 640→760px, 소유자 액션(비공개 전환·삭제)을 우측 그룹으로
묶어 한 줄 정렬.
- 표시 이름을 한국식 성+이름(family_name+given_name)으로 교정.
- .project-env.example ADMIN_ROLE→ADMIN_GROUP 정리.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
헤더 브랜드와 동일한 codeslash </> 글리프를 브랜드 그라디언트 타일 위에 얹어
탭에서 16px 로도 읽히게 함. 모든 화면(_header include)에 적용.
Co-Authored-By: Claude Opus 4.8 <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>
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>