Files
sori.studio/docs/update.md

2979 lines
197 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 업데이트 이력
## v1.10.68
- 현재 접속자가 여러 페이지를 열었을 때 대표 페이지와 열린 페이지 목록이 중복 표시되던 문제 수정.
## v1.10.67
- 현재 접속자 목록에서 같은 접속자가 열어둔 페이지 제목 목록을 함께 표시하도록 수정.
- 실시간 접속자 API가 IP/회원 기준 묶음 안의 활성 페이지 목록을 함께 반환하도록 수정.
## v1.10.66
- 현재 접속자 목록에서 SID 표시 제거.
- 현재 접속자 집계를 로그인 사용자는 회원 기준, 익명 방문자는 IP 기준으로 묶어 같은 사람이 여러 페이지를 열어도 1명으로 보이도록 수정.
- 같은 접속자 묶음 안에 여러 페이지가 있으면 `열린 페이지 N개`로 표시하도록 수정.
## v1.10.65
- 관리자 통계 인기 콘텐츠·개별 통계 응답에서 읽음 수가 조회수를 넘지 않도록 정규화.
- 관리자 통계 스크롤 50/75/100 도달 수가 조회수 범위와 단계 순서를 넘지 않도록 정규화.
- 관리자 통계 추이·선택 기간 상세의 50% 스크롤 도달 요약도 게시물 조회수 범위 안으로 정규화.
## v1.10.64
- 관리자 대시보드 인기 콘텐츠 메타에서 `V/R/M` 알파벳만 색상 강조하고 숫자는 보조 텍스트 색상으로 표시하도록 수정.
- `S` 스크롤 메타의 라벨과 50/75/100 값 사이 간격을 명확하게 조정.
## v1.10.63
- 관리자 대시보드 인기 콘텐츠 메타의 `V/R/M` 값을 서로 다른 색상으로 강조.
- 인기 콘텐츠 메타 구분자 `|`를 연한 회색으로 낮춰 보조 구분선처럼 보이도록 수정.
- `S` 스크롤 50/75/100 값을 단계별로 점점 진한 색상으로 표시.
## v1.10.62
- 관리자 대시보드 자동 갱신 시 선택한 통계 날짜·기간이 오늘로 되돌아가던 문제 수정.
- 선택 기간 상세 갱신 중 기존 내용을 유지해 패널 높이 변화로 화면 위치가 흔들리지 않도록 수정.
- 대시보드 선택 기간 상세 레이아웃을 인기 콘텐츠 75%·유입/디바이스 25% 구조로 정리.
- 유입 프로그래스 바 폭을 절반으로 줄여 보조 지표처럼 보이도록 조정.
## v1.10.61
- 관리자 대시보드 선택 기간 상세의 인기 게시물·인기 페이지를 세로 목록으로 정리.
- 선택 기간 인기 콘텐츠 메타를 `V/R/M/C/S` 한 줄 압축 표기로 수정.
- 현재 접속자 목록에 IP와 짧은 세션 ID(SID)를 함께 표시하도록 수정.
- 실시간 접속 세션 IP 저장용 마이그레이션 `066_analytics_active_session_ip.sql` 추가.
## v1.10.60
- 관리자 대시보드 통계 차트 클릭 상세 모달을 제거하고 선택한 기간 상세를 하단 패널에 직접 표시하도록 수정.
- 대시보드 유입 키워드 영역을 제거하고 유입원·디바이스·인기 게시물·인기 페이지를 선택 기간 기준으로 통합 표시.
## v1.10.59
- 글쓰기 이미지/갤러리 미디어 모달 헤더의 선택 개수 문구를 제거해 탭 전환 시 레이아웃 흔들림을 줄임.
- 갤러리 미디어 선택 항목 오른쪽 상단에 선택 순서 배지를 표시하도록 수정.
## v1.10.58
- 글쓰기 중복 슬러그 오류가 표시된 동안 Publish/Update/최종 저장 버튼을 비활성화하도록 수정.
## v1.10.57
- 글쓰기 중복 슬러그 오류를 헤더/토스트 대신 Post URL 입력창 아래 빨간 텍스트로 표시하도록 수정.
## v1.10.56
- 초안 자동 저장이 중복 슬러그 오류로 실패한 뒤 같은 입력값을 반복 재시도해 화면이 깜빡이던 문제 수정.
- 게시글 대표 이미지 선택 모달을 글쓰기 미디어 라이브러리와 같은 서버 페이지네이션·검색 방식으로 수정.
- 대표 이미지 선택 모달 미리보기를 원본 대신 작은 본문/카드 파생 이미지 우선 표시로 정리.
- 글쓰기 미디어 라이브러리와 대표 이미지 선택 모달 높이를 고정해 검색 결과 개수 변화에 따른 모달 크기 흔들림 완화.
## v1.10.55
- 사이트 용량 `기타` 행을 `오디오`·`첨부 파일`로 분리하고 영상·보내기와 동일한 실선 카드로 표시.
## v1.10.54
- 사이트 용량 파일·용량 UI를 이미지 그룹(세로 묶음)·영상/보내기(2열)·기타·합계 순으로 재배치.
- 자동생성·프로필 들여쓰기 제거, 점선 테두리만 유지. 기타는 합계 위 별도 행으로 분리.
## v1.10.53
- 사이트 용량 합계를 이미지·영상·기타·보내기 합산으로 수정(오디오·기타 파일 누락으로 113≠112 불일치 해소).
- 사이트 용량 콘텐츠·파일·용량 UI를 표시개수 설정과 동일한 행 카드 스타일로 통일.
- 이미지 행을 원본·자동생성·프로필 3행으로 분리해 개수·용량을 각각 표시.
## v1.10.52
- 관리자 설정 `백업 현황` 카드를 `사이트 용량`으로 이름 변경.
- 파일·용량 섹션을 이미지·영상·보내기·합계 4행으로 간략화(업로드 미디어·원본·큰 파일 목록 제거).
- 이미지 행에 원본·자동생성·프로필 각각 용량과 개수를 표시.
## v1.10.51
- 관리자 사이트 설정에 백업 현황 카드 추가.
- `/admin/api/settings/backup-summary` 추가: 게시글·페이지·태그·댓글·회원 수와 업로드 미디어·자동 생성 이미지·내보내기 파일 용량 집계.
- 백업 현황에서 큰 업로드 파일 상위 5개를 텍스트 목록으로 표시.
## v1.10.50
- 게시물 상세를 `layouts/post` 대신 `layouts/default`로 통합해 홈↔게시물 이동 시 레이아웃 전체 교체(깜빡임 원인) 제거.
- 전환 베일을 `html::before` CSS로 즉시 표시(Vue 렌더 대기 없음), 내부 링크 클릭 캡처 단계에서 선제 적용.
- 베일 유지 중 `.site-shell` CSS transition 비활성화, 해제 전 48ms 추가 대기로 페인트 완료 후 공개.
- `NuxtLoadingIndicator` 제거(전환 베일과 중복), 스피너만 최상위 z-index로 표시.
## v1.10.49
- 페이지 전환 깜빡임·스크롤 튐을 줄이기 위해 전환 베일 방식을 재정리.
- 오버레이 페이드 제거(`v-show` 즉시 표시/해제), 베일 뒤에서 스크롤 정리 후 화면 공개.
- `history.scrollRestoration = 'manual'`과 `app/router.options.js`로 브라우저 자동 스크롤 복원과 충돌 방지.
- 앞으로 이동은 최상단, 뒤로가기는 저장 위치 복원. `site-page-transition.client.js` 추가.
## v1.10.48
- 페이지 이동 로딩 오버레이 배경을 불투명하게 변경해 이전 홈 헤더 이미지가 비쳐 보이지 않도록 수정.
- 이동 오버레이 해제 시점을 `page:loading:end`에서 `page:finish` 이후 다음 렌더 프레임으로 늦춰 새 화면이 실제로 그려진 뒤 사라지도록 수정.
- 라우터 이동 시작 시에도 오버레이를 즉시 표시하고, 라우트 오류·앱 오류 시에는 즉시 해제하도록 보강.
- 홈에서 게시물로 이동할 때 로딩 뒤 이전 화면 상단이 다시 보이는 문제를 추가 완화.
## v1.10.47
- 게시물 상세 클라이언트 이동을 즉시 전환 방식에서 로딩 후 진입 방식으로 복귀.
- 홈에서 게시물로 이동할 때 이전 홈 헤더 이미지가 순간 노출되는 문제를 피하기 위해 게시물 본문을 블로킹 조회하도록 수정.
- `app/router.options.js`와 `plugins/site-route-scroll.client.js`, 전환 베일 스타일 제거.
- 전역 페이지 이동 로딩 오버레이를 다시 사용해 이전 화면 중간 상태를 가리고 준비된 상세 화면만 표시하도록 정리.
## v1.10.46
- 페이지 이동 시작부터 새 화면 스크롤 정리 완료까지 짧은 전환 베일을 표시하도록 추가.
- 메인에서 게시물로 이동할 때 이전 홈 헤더 이미지가 순간적으로 보이는 현상을 한 번 더 완화.
- 전환 베일은 데이터 로딩 완료를 기다리는 방식이 아니라 화면 교체·스크롤 정리 구간만 가리도록 정리.
## v1.10.45
- 페이지 이동 스크롤 적용 시점을 `router.afterEach` 직후에서 Nuxt `page:finish` 이후로 변경.
- 이전 화면이 먼저 최상단으로 이동하며 헤더 이미지가 잠깐 보이던 현상을 추가 완화.
- 라우트 변경 시점에는 스크롤 요청만 저장하고 새 페이지 렌더링 완료 뒤 한 번만 적용하도록 정리.
## v1.10.44
- Vue Router 기본 스크롤 이동을 비활성화해 페이지 이동 전 이전 화면이 먼저 최상단으로 튀는 현상 완화.
- 클라이언트 라우트 전환 완료 후 새 화면 기준으로 최상단 또는 해시 위치 스크롤을 적용하는 플러그인 추가.
- 게시물 상세 즉시 전환·스켈레톤 방식은 유지하면서 화면 깜빡임 원인인 스크롤 적용 타이밍을 분리.
## v1.10.43
- 사용자 화면 게시물 상세 클라이언트 이동을 즉시 전환 방식으로 변경.
- 게시물 데이터가 준비되기 전에는 이전 화면이 아니라 새 게시물 화면 안의 스켈레톤을 표시하도록 수정.
- 전역 전체 화면 이동 오버레이를 제거하고 `NuxtLoadingIndicator` 상단 진행바만 유지.
- 직접 접속·SSR은 기존처럼 게시물 본문을 먼저 받아 SEO 메타를 유지하도록 정리.
## v1.10.42
- 사용자 화면 페이지 이동 중 전체 로딩 오버레이를 표시해 이전 화면 스크롤 튐이 보이지 않도록 수정.
- 게시물 상세 인접 글 방향을 `PREVIOUS=과거 글`, `NEXT=최신 글` 기준으로 수정.
- 글쓰기 이미지 선택 모달이 전체 미디어 배열 대신 `/admin/api/media?paged=1` 서버 페이지 응답을 사용하도록 수정.
- 이미지 선택 모달에 파일명·사용처 제목 검색과 번호형 페이지 이동을 추가.
## v1.10.41
- 즉시 전환·스켈레톤·커스텀 스크롤 제어를 제거하고 블로킹 로딩 방식으로 복귀.
- 게시물·홈 클라이언트 이동 시 데이터 준비 후 전환(`NuxtLoadingIndicator`·중복 클릭 잠금 유지).
- `app/router.options.js`, `navigation-scroll.client.js`, `usePageReadyGate`, `site-navigation-scroll.js` 삭제.
- 상세 API 인접 글(`previous`/`next`) 최적화는 유지.
## v1.10.40
- 앞으로 이동 후에도 이전 스크롤 위치가 유지되던 문제 수정.
- `scrollBehavior` 비동기 최상단 이동을 제거하고, 앞으로 이동은 `afterEach`에서 `window.scrollTo(0, 0)`로 확실히 초기화.
- 뒤로가기(lazy 홈·게시물)만 복원 좌표를 저장해 본문 준비 후 복원.
## v1.10.39
- 페이지 전환 시 스크롤이 최상단으로 튀며 깜빡이던 현상 완화.
- `app/router.options.js` 추가: 앞으로 이동은 다음 페인트 후 최상단 이동, 뒤로가기는 lazy 홈·게시물 본문 준비 후 스크롤 복원.
- `usePageReadyGate`·`navigation-scroll.client.js`로 lazy 로딩과 스크롤 복원 타이밍 동기화.
- `NuxtPage` 짧은 opacity 전환(0.12s) 추가, 로딩 스켈레톤 `min-h-[70vh]`로 높이 점프 완화.
## v1.10.38
- 게시물·홈 클라이언트 이동을 즉시 전환하도록 변경(`lazy: import.meta.client`). SSR 직접 접속은 기존처럼 블로킹 유지.
- 게시물 상세 로딩 중 스켈레톤 표시, 홈 복귀 시 본문 영역 스켈레톤 표시(히어로는 캐시 설정 즉시 노출).
- 게시물 없음 404는 클라이언트에서 fetch 완료 후 `showError`로 처리.
## v1.10.37
- 게시물 상세 이동 지연 개선: 본문만 블로킹 조회, 태그·광고는 lazy로 전환해 이동 후 채움.
- 이전·다음 글 계산을 위해 받던 전체 게시물(본문 포함) 조회 제거.
- 상세 API가 window 함수(LAG/LEAD)로 인접 글 `previous`·`next`를 계산해 응답에 포함(`getAdjacentPosts` 추가).
- 광고용 `site-settings`를 `app.vue`와 같은 키로 재사용해 중복 요청 제거.
## v1.10.36
- 게시물 카드 보조 피드백 추가: 제목 강조와 함께 썸네일 은은한 확대(데스크톱 hover 기기·모바일 `:active` 눌림).
- 카드 썸네일의 sticky opacity hover 제거, 세 목록(메인·전체·태그) 공통 적용.
- 게시글 댓글 기본 정렬을 인기순에서 최신순으로 변경, 정렬 옵션 순서도 최신순 우선으로 조정.
## v1.10.35
- 게시물 카드 클릭 피드백을 메인·전체 목록·태그 목록에서 제목 포인트 컬러 강조로 통일.
- 전체·태그 목록 카드의 회색 배경 hover 제거(모바일 탭 후 남는 sticky 배경 해소).
- 공통 `.post-title-link` 추가: 데스크톱은 hover 가능 기기에서만 색 변경, 모바일은 `:active` 눌림에만 반영, 회색 탭 하이라이트 제거.
## v1.10.34
- 페이지 이동 중 링크·버튼 중복 클릭(연타) 차단 추가.
- 이동 중 `html.site-navigating` 클래스로 상호작용 요소 pointer-events를 끄는 클라이언트 플러그인 `navigation-lock.client.js` 추가(예외 방지 안전 타임아웃 포함).
- 게시물 클릭 후 재클릭 시 상단으로 점프하던 문제 해결.
## v1.10.33
- HTML 문서 모드 페이지 뒤로가기 시 홈으로 돌아가지 못하던 문제를 근본 수정.
- `/pages/:slug` HTML 문서 페이지로의 클라이언트 소프트 이동을 막고 전체 페이지 이동으로 전환하는 글로벌 미들웨어 `pages-html-document.global.js` 추가.
- 페이지 이동 로딩 피드백을 위해 `app.vue`에 브랜드 컬러 기반 `NuxtLoadingIndicator` 상단 진행바 추가(모바일에서 클릭·뒤로가기 반응 확인 가능).
## v1.10.32
- HTML 문서 모드 페이지 진입 후 뒤로가기 시 주소는 홈이지만 페이지 화면이 남던 문제 수정.
- bfcache 복원 시 라우터 경로와 실제 URL이 어긋나면 새로고침하는 클라이언트 플러그인 `bfcache-page-restore.client.js` 추가.
## v1.10.31
- 헤더 사용자 메뉴의 `Sign up`·`Sign in`을 `회원가입`·`로그인`으로 한글화.
- 헤더 비로그인 표시명 `Guest`를 `방문자`로 한글화.
- 회원가입 안내 문구를 서비스 이용 안내 대신 댓글 작성 목적 중심 문구로 수정.
- 회원가입 제목 표기를 `회원 가입`에서 `회원가입`으로 통일.
## v1.10.30
- 모바일에서 새로고침 시 좌측 사이드바가 열렸다 닫히는 애니메이션 문제 수정.
- `useMenuState`에 `menuMounted` 상태 추가, 모바일은 항상 닫힌 상태로 시작(데스크톱 저장 설정은 보존)하도록 수정.
- 좌측 사이드바 모바일 슬라이드 오버레이·백드롭이 마운트 이후에만 열리도록 게이팅해 첫 페인트 플래시·슬라이드 재생 제거.
## v1.10.29
- 한글 IME 조합 중(`compositionupdate`)에도 검색이 즉시 반영되는 공통 컴포저블 `useImeSearchInput` 추가(NFC 정규화·선택적 디바운스).
- 관리자 글 목록·멤버 목록·미디어 목록·설정 검색·태그 필터·글 목록 태그 필터 콤보박스·글쓰기 미디어 모달 검색을 모두 IME 조합 중 검색되도록 수정.
- 관리자 글 목록 검색 200ms, 미디어 검색 250ms 디바운스 적용.
- 글쓰기 태그 입력·페이지 섹션 콤보박스가 조합 중에도 추천 목록을 갱신하도록 `compositionupdate` 보강(Enter 확정 로직 유지).
- 홈 추천글·페이지 섹션 가로 트랙의 `touch-action: pan-x` 제거로 모바일 세로 스크롤이 막히던 문제 수정.
- 홈 가로 캐러셀 커스텀 드래그를 마우스 전용으로 제한하고, 터치는 네이티브 가로 스크롤·스냅에 맡기도록 수정.
## v1.10.28
- 공개 통합 검색용 `posts.search_text`, `pages.search_text` 컬럼과 `pg_trgm` GIN 인덱스 추가.
- 게시물·페이지 검색 텍스트를 저장/수정 시 DB 트리거로 자동 갱신하도록 추가.
- `/api/search`가 본문 전체 `lower(content)` 스캔 대신 정규화된 검색 컬럼을 기준으로 조회하도록 수정.
- 공개 통합 검색 인덱스 개선 과제를 완료 처리.
## v1.10.27
- 관리자 미디어 사용처 계산이 본문 없는 글 목록 요약 대신 미디어 참조 전용 게시물·페이지 조회를 사용하도록 수정.
- 본문 이미지 탭의 자동 생성 파생 이미지가 실제 본문 사용 중이어도 미사용으로 집계되던 문제 수정.
- 관리자 미디어 상세에서 자동 생성 이미지 파일명 변경 제한과 고아 파생 파일 삭제 용도를 안내하도록 정리.
## v1.10.26
- 관리자 글 목록 전용 상단 고정 플래그(`adminPinned`) 추가.
- 관리자 글 목록 행 메뉴에서 `상단 고정`·`고정 해제`를 토글하도록 추가.
- 관리자 글 목록 정렬에서 고정 글을 항상 먼저 표시하고 제목 옆에 고정 배지를 표시하도록 수정.
## v1.10.25
- 관리자 미디어 원본 이미지 사용처 계산에 카드·페이지 커버·본문 파생 이미지 사용처를 함께 반영하도록 수정.
- 파생 이미지가 본문에서 사용 중인 원본 파일이 미사용으로 분류되어 일괄 삭제 대상에 들어가던 문제 수정.
- 미사용 원본 이미지를 삭제할 때 연결된 카드·페이지 커버·본문 자동 생성 이미지도 함께 삭제되도록 수정.
- 글쓰기 이미지 선택 모달의 라이브러리 그리드가 원본 대신 720px 본문 파생 이미지나 카드 썸네일을 우선 표시하도록 수정.
## v1.10.24
- 관리자 글쓰기 미저장 변경 비교에서 태그 표시명 보조값을 제외해 태그 API 로딩만으로 비공개 글 이탈 경고가 뜨던 문제 수정.
- 신규 글 첫 초안 생성 중 추가 입력된 제목·본문·태그·옵션을 생성된 글에 한 번 더 반영한 뒤 편집 URL로 이동하도록 수정.
- 신규 글 첫 자동 저장 중 초안 저장 준비 안내 오버레이를 표시하도록 추가.
## v1.10.23
- 관리자 글 목록이 `/admin/api/posts?paged=true` 페이지 응답을 사용하도록 수정.
- 관리자 글 목록 검색·상태·태그·추천·정렬 필터를 서버 쿼리 기준으로 전환.
- 관리자 글 목록에 번호형 페이지네이션과 이전·다음 빠른 이동을 추가.
- 관리자 글 목록 태그 필터 후보를 현재 페이지가 아닌 전체 사용 태그 기준으로 표시하도록 수정.
## v1.10.22
- 관리자 글 목록 API가 게시물 전체 본문을 내려주지 않고 목록 요약 필드만 반환하도록 수정.
- 관리자 글 목록 검색 범위를 제목·슬러그·요약·태그 기준으로 정리.
- 관리자 글 목록 추천 토글을 전체 게시물 저장 API가 아닌 전용 `/admin/api/posts/:id/featured` API로 분리.
## v1.10.21
- 관리자 글 목록 태그 필터를 전체 태그 select에서 검색형 combobox로 변경.
- 관리자 글 목록 태그 필터에서 태그 검색·키보드 선택·전체 태그 초기화를 지원하도록 추가.
- 관리자 글 목록 썸네일이 원본 이미지 대신 `featuredImageThumbnail`을 우선 사용하도록 수정.
## v1.10.20
- 관리자 글쓰기 태그 추천 목록에서 최근 사용 태그 5개를 메인 태그보다 먼저 표시하도록 수정.
- 태그 추천 목록의 최근 사용 태그 보조 라벨을 `최근`으로 표시하도록 추가.
- 관리자 미디어 페이지 표시 개수 셀렉트의 화살표를 다른 관리자 셀렉트와 같은 SVG chevron으로 통일.
## v1.10.19
- 라이브 작성 인용·콜아웃·토글 본문에서 멀티라인 블록 마크다운 표시를 보강.
- 콜아웃·토글 공개 렌더링에서 내부 본문을 블록 렌더러로 처리해 목록 문법이 적용되도록 수정.
- 공개 토글 블록에서 화살표뿐 아니라 제목을 눌러도 펼침·접힘이 전환되도록 수정.
- 라이브 작성 콜아웃·토글 내부 목록의 마커 색상과 위/아래 방향키 줄 이동 계산을 공개 렌더링 기준에 맞게 보강.
- 게시물 상태를 공개로 직접 변경할 때 발행 시각이 비어 있으면 현재 시각을 기본값으로 채우도록 수정.
- 관리자 게시물 저장 API에서도 공개 상태의 빈 발행 시각을 현재 시각으로 보정하도록 보강.
## v1.10.18
- 관리자 미디어 관리 화면이 `/admin/api/media?paged=1` 페이지 응답을 사용하도록 수정.
- 관리자 미디어 API에 탭·폴더·종류·미사용·검색 필터와 50·100·200개 페이지네이션 메타 응답 추가.
- 글쓰기·대표 이미지 선택 등 기존 미디어 배열 응답 사용처는 기존 `/admin/api/media` 배열 응답을 유지하도록 호환 처리.
## v1.10.17
- 콜아웃 라이브 편집 본문에서도 굵게·링크 등 인라인 마크다운이 표시되도록 수정.
- 콜아웃 공개 렌더링에서 여러 줄 본문과 인라인 마크다운을 함께 처리하도록 수정.
- `**[링크](url)**`, `::red[**[링크](url)**]`처럼 굵게·색상 안에 링크가 들어간 중첩 인라인 문법을 렌더링하도록 보강.
## v1.10.16
- 관리자 라이브 인용 편집에서 `::red[**텍스트**]` 같은 인라인 색상·굵게 문법을 렌더링하도록 수정.
- 관리자 라이브 토글 블록이 저장된 기본 펼침·닫힘 상태로 처음 표시되도록 수정.
- 관리자 미디어 화면에 50·100·200개 단위 페이지네이션과 번호형 빠른 이동을 추가.
- 관리자 미디어 그리드 이미지가 원본 대신 가능한 작은 파생 이미지를 우선 사용하고, 실패 시 원본으로 fallback하도록 수정.
## v1.10.15
- 새 게시물 본문 파생 이미지 파일명을 `*-body-1600.webp`, `*-body-720.webp`, `*-body-2560.webp` 해상도형 규칙으로 정리.
- 기존 `*-body.webp`, `*-lightbox.webp` 파일은 레거시 본문 이미지로 계속 인식해 관리자 미디어 사용처와 삭제 잠금을 유지하도록 보강.
- 본문 이미지 백필은 해상도형 새 파일이 없으면 다시 생성하도록 유지해 기존 운영 이미지의 새 규칙 전환을 지원.
- 본문 파생 이미지 파일명 정리 검토 과제를 완료 처리.
## v1.10.14
- 게시물 자동 생성 이미지(`card`, `page-cover`, `body`, `body-720`, `lightbox`) 표시 URL에 캐시 버전을 붙여 기존 깨진 브라우저 캐시를 우회하도록 수정.
- `/uploads/posts/**/thumbs/*.webp` 파생 이미지 응답 캐시를 `no-cache`로 낮춰 같은 URL 재생성 후에도 브라우저가 서버에 재검증하도록 수정.
- 관리자 미디어 화면의 파생 이미지 미리보기는 파일 수정 시각·용량 기준 캐시 버전을 사용하도록 수정.
- 관리자 미디어 본문 이미지 탭 안내 문구를 720px·1600px·2560px 파생 이미지 구조에 맞게 정리.
## v1.10.13
- 글쓰기 이미지·갤러리 선택 모달에서 게시물 카드·본문 1600px·본문 720px·라이트박스·Pages 커버 자동 생성 이미지를 숨기고 원본만 선택하도록 수정.
- 대표 이미지 선택 모달과 게시물·페이지 저장 API에서도 자동 생성 이미지 URL 저장을 차단하도록 보강.
- 이미지 파생 파일 생성 시 임시 파일에 먼저 쓰고 Sharp로 읽기 검증 후 최종 파일로 교체하도록 수정.
- 파생 이미지 생성 실패 시 깨진 산출물이 남지 않도록 임시 파일과 대상 파일을 정리하도록 수정.
## v1.10.12
- 홈 Pages 진열장 커버 이미지용 3:4 WebP 썸네일(`thumbs/*-page-cover.webp`, 450×600) 생성 추가.
- 페이지 생성·수정 저장 시 목록 썸네일 원본에서 페이지 커버 썸네일을 자동 생성하도록 수정.
- 공개 홈 Pages 진열장과 관리자 페이지 순서 모달이 `listingImageThumbnail`을 우선 사용하도록 수정.
- 관리자 미디어에서 페이지 커버 썸네일을 카드 썸네일 탭에 분류하고 원본 페이지 이미지 사용처와 연결해 미사용 삭제 대상에서 빠지도록 수정.
- 기존 페이지 커버 이미지 백필 명령(`npm run images:backfill-page-cover-thumbnails`, `sh scripts/backfill-page-cover-thumbnails-production.sh`) 추가.
## v1.10.11
- `/uploads/**` 런타임 파일 제공 API에 `ETag` 조건부 요청 304 응답 추가.
- 고유 URL 업로드 파일은 1년 immutable 캐시를 사용하도록 수정.
- 같은 URL로 재생성 가능한 게시물 `thumbs` 파생 이미지는 1시간 캐시와 `stale-while-revalidate`를 사용하도록 분리.
- 업로드 파일 캐시 정책 개선 과제를 `docs/todo.md`에서 제거.
## v1.10.10
- 관리자 미디어 라이브러리에서 `*-body-720.webp`, `*-lightbox.webp` 파생 이미지가 원본 라이브러리에 섞이던 문제 수정.
- 본문 파생 이미지 1600px·720px·2560px를 모두 원본 본문 이미지의 사용처와 연결해 미사용 일괄 삭제 대상에서 빠지도록 수정.
- 미디어 상세의 본문 이미지 설명에 파생 이미지 해상도 라벨 추가.
- 본문 파생 이미지 파일명 해상도형 전환 검토 과제를 `docs/todo.md`에 기록.
## v1.10.9
- 사이트 설정 POST 설정에 업로드 제한(1회 최대 파일 수·전체 용량) 관리 추가.
- `site_settings`에 `upload_max_file_count`, `upload_max_total_size` 컬럼 추가.
- 관리자 미디어·글쓰기 업로드에서 설정된 파일 수·총량 제한을 클라이언트와 서버 양쪽에서 검사하도록 수정.
- 업로드 메모리 개선 후속 과제를 스트리밍 업로드 파서 검토로 재정리.
## v1.10.8
- 게시물 본문 이미지 저장 시 라이트박스용 WebP(`thumbs/*-lightbox.webp`, 2560px) 생성 추가.
- 공개 본문 라이트박스가 원본 대신 라이트박스용 파생 이미지를 우선 표시하도록 수정.
- 라이트박스 원본 보기 UI는 추가하지 않고 파생 이미지 로드 실패 시에만 원본 fallback 유지.
- 기존 본문 이미지 백필이 1600px·720px·라이트박스용 파생 이미지를 모두 확인하고 누락분을 생성하도록 수정.
- 본문 이미지 최적화 후속 과제 완료로 `docs/todo.md`에서 제거.
## v1.10.7
- 게시물 본문 이미지 저장 시 720px 작은 본문 표시용 WebP(`thumbs/*-body-720.webp`) 생성 추가.
- 공개 본문 단일 이미지와 갤러리 이미지에 720w/1600w `srcset` 적용.
- 기존 본문 이미지 백필이 1600px·720px 파생 이미지를 모두 확인하고 누락분을 생성하도록 수정.
- 본문 이미지 최적화 후속 과제에서 `srcset`·720px 미구현 항목 제거.
## v1.10.6
- NAS 호스트에 npm이 없는 환경에서도 이미지 백필을 실행할 수 있도록 production shell 래퍼 추가.
- 운영 Docker 이미지의 `.output/server` 아래에 이미지 백필 스크립트와 필요한 원본 유틸 파일 포함.
- 카드·본문 이미지 백필 스크립트가 Nuxt repository source import에 의존하지 않고 DB를 직접 조회하도록 수정.
- 로컬 이미지 백필 명령이 `.env.production`을 자동 탐색하지 않도록 조정해 운영 DB 오연결 위험 축소.
- 배포 문서의 운영 보조 명령을 npm 없는 NAS 기준으로 보정.
## v1.10.5
- 기존 게시물 본문 이미지의 표시용 WebP(`thumbs/*-body.webp`)를 일괄 생성하는 백필 스크립트 추가.
- `npm run images:backfill-post-body-thumbnails` 운영 보조 명령 추가.
- 본문 이미지 최적화 후속 과제에서 백필 스크립트 미구현 항목 제거.
## v1.10.4
- 공개 Markdown 본문 블록 사이 Vue fragment 주석(`<!---->`)을 줄이도록 블록 그룹 렌더러와 인아티클 광고 블록 삽입 방식 정리.
- 인라인 렌더러 첫 줄 `br` 조건 분기를 제거해 단일 줄 문단 내부 주석을 줄임.
## v1.10.3
- 공개 게시물 목록과 태그 게시물 목록 페이지네이션을 번호형 빠른 이동 UI로 교체.
- 페이지 수가 많을 때 처음·끝 페이지와 현재 페이지 주변 번호를 유지하고 중간 구간을 `...`으로 접도록 정리.
- 좁은 화면에서 페이지 번호가 넘칠 때 가로 스크롤로 탐색할 수 있도록 보정.
## v1.10.2
- 게시물 저장 시 본문 이미지의 WebP 표시용 파생 파일(`thumbs/*-body.webp`) 생성 추가.
- 공개 본문 단일 이미지·갤러리 표시에서 본문 표시용 이미지를 우선 사용하고 실패 시 원본으로 대체하도록 수정.
- 관리자 미디어에 `본문 이미지` 탭 추가 및 원본 상세의 본문 이미지 생성·재생성 액션 추가.
- 관리자 미디어 라이브러리의 중복 `전체` 필터 배지 제거 및 `미사용` 토글 동작 정리.
## v1.10.1
- 공개 본문 단일 이미지를 클릭하면 라이트박스로 크게 볼 수 있도록 수정.
- 게시물 안의 단일 이미지와 갤러리 이미지를 하나의 라이트박스 그룹으로 묶어 이전·다음 탐색이 이어지도록 정리.
- 본문 단일 이미지와 갤러리 이미지에 lazy 로딩·비동기 디코딩 속성 추가.
- 이미지 최적화·업로드 총량 제한·업로드 캐시·검색 인덱스 개선 과제를 `docs/todo.md`에 기록.
## v1.10.0
- 관리자 글쓰기 자동 저장 중 추가 입력한 본문·태그가 저장 완료 처리와 화면 이동으로 사라지지 않도록 수정.
- 게시물 저장·발행 요청 중 추가 변경을 실제 저장된 payload와 구분하고, 남은 변경은 저장 완료 후 다시 자동 저장되도록 보정.
- 게시물 발행 저장 진행 중 다른 화면으로 이동하려 할 때 미저장 이탈 확인이 동작하도록 수정.
## v1.9.34
- Markdown 인라인 링크 텍스트 내부의 굵게·기울임·색상 등 중첩 인라인 렌더링 추가.
- Markdown 인라인 색상·링크 내부 `<br>` 줄바꿈 렌더링 보강.
## v1.9.33
- 공개 Markdown 인라인 렌더러의 fragment 주석 반복을 줄이도록 단일 루트 구조로 정리.
## v1.9.32
- Markdown 리스트 항목이 여러 줄일 때 마커가 첫 줄 기준으로 정렬되도록 수정.
## v1.9.31
- Markdown 표 셀 내부 `<br>` 줄바꿈 렌더링 추가.
- Markdown 표 헤더·셀 내부 인라인 링크 렌더링 동작 정리.
## v1.9.30
- 홈 Pages 진열장 추천 페이지 표시를 텍스트 배지에서 SVG 아이콘 배지로 변경.
## v1.9.29
- 사이트 단축키·슬래시 명령·Markdown 약식 문법 정리 문서 추가.
## v1.9.28
- 페이지 HTML 문서 모드에서 태그 내부 스마트 따옴표가 HTML 속성 해석을 깨뜨리지 않도록 정규화 추가.
- 게시글 작성 인라인 링크 사용 방식 문서화.
## v1.9.27
- 홈 Featured·Pages 캐러셀에서 포인터 캡처가 일반 클릭까지 가로채 링크가 열리지 않던 문제 수정.
## v1.9.26
- 홈 Featured·Pages 캐러셀 클릭이 드래그 시작 처리에 막혀 링크가 열리지 않던 문제 수정.
- 공개 게시물 전체 목록 카드에 태그 색상 배지와 hover 화살표 링크 표시 추가.
- 오른쪽 사이드바 구분선을 레이아웃 컬럼에서 그려 긴 게시물에서도 끝까지 이어지도록 수정.
## v1.9.25
- 공개 통합 검색이 한글 IME 조합 중에도 입력창의 현재 표시값을 디바운스 검색어로 반영하도록 수정.
- 공개 통합 검색에서 마지막 조합 글자 확정 전 결과가 직전 검색어에 머물던 문제 수정.
## v1.9.24
- 공개 통합 검색 입력의 한글 IME 조합 중 미완성 검색 요청 방지.
- 공개 통합 검색어 앞뒤 공백·연속 공백·Unicode 정규화 처리 추가.
## v1.9.23
- 페이지 섹션 관리 API·관리자 화면·홈 Pages 진열장 연동 변경분 일괄 반영.
- 공개 목록 표시개수 설정 및 관련 서버 조회 로직 변경분 일괄 반영.
## v1.9.22
- 홈 Pages 섹션 슬라이드 화살표를 Featured와 동일한 텍스트형 버튼 스타일로 통일.
## v1.9.21
- 홈 Pages 진열장 선반 폭이 카드 전체 너비로 늘어나 드래그·좌우 버튼이 비활성처럼 보이던 문제 수정.
- 홈 Pages 진열장 레일을 섹션 최대 폭 안에서 가로 스크롤되도록 정리.
## v1.9.20
- 홈 `Posts 더보기` 링크가 Pages 진열장 아래가 아니라 Latest 목록 하단에 표시되도록 위치 수정.
## v1.9.19
- 홈 Pages 진열장 스크롤 상태를 `ResizeObserver`와 스크롤 이벤트로 계속 갱신해 좌우 버튼 표시 상태가 실제 overflow와 맞도록 수정.
- 홈 Featured·Pages 드래그를 문서 레벨 포인터 추적으로 변경해 카드 밖으로 포인터가 이동해도 드래그가 유지되도록 수정.
- 관리자 페이지 순서 변경 모달에서 추천 페이지가 비추천 페이지 뒤로 드롭되어도 즉시 추천 우선 순서로 보정되도록 수정.
## v1.9.18
- 홈 Featured·Pages 가로 트랙에서 이미지 기본 드래그가 발생하지 않도록 수정.
- 홈 Featured·Pages 가로 트랙의 작은 드래그에도 스크롤이 반응하고 드래그 종료 시 가까운 카드로 스냅되도록 수정.
- 홈 Pages 진열장 카드 폭을 키워 여러 페이지가 있을 때 좌우 버튼과 드래그 탐색이 동작하도록 조정.
## v1.9.17
- 관리자 설정 표시개수 셀렉트 화살표를 기존 chevron SVG 패턴으로 통일.
- 공개 게시물 목록 썸네일 placeholder 높이가 대표 이미지 유무와 관계없이 고정되도록 수정.
- `/posts`와 `/tag/:slug` 페이지네이션 이동 시 화면이 목록 상단으로 이동하도록 수정.
- 홈 Latest 하단에 `/posts` 더보기 링크 추가.
- 관리자 네비게이션 페이지 섹션 순서 모달에 추천 페이지 우선 정렬과 추천 배지 반영.
## v1.9.16
- 사이트 설정 POST 설정에 공개 목록 표시개수 설정 추가.
- 홈 Latest·Featured·Pages 진열장 표시 개수를 사이트 설정 기준으로 제한.
- 공개 게시물 목록 `/posts`에 서버 페이지네이션 적용.
- 태그 상세 `/tag/:slug` 게시물 목록에 서버 태그 필터와 페이지네이션 적용.
- 태그 전체 `/tags`에서 게시물 전체 조회 제거 및 태그 API의 공개 게시물 수 사용.
- DB 마이그레이션 `062_site_settings_display_counts.sql` 추가.
## v1.9.15
- 홈 Featured와 Pages 진열장에 드래그 슬라이드와 스냅 이동 적용.
- 홈 Pages 진열장 섹션별 이전·다음 버튼 추가 및 카드 hover 상단 잘림 수정.
- 네비게이션 관리 각 탭의 추가·저장 버튼을 패널 작업줄의 좌우 배치로 통일.
- 페이지 섹션의 페이지 순서 변경 모달을 썸네일 카드형 가로 목록으로 정리.
- 페이지 순서 변경 모달에서 페이지를 해당 섹션에서 바로 제거하는 기능 추가.
## v1.9.14
- 네비게이션 관리의 메인·하단 메뉴 추가 흐름을 모달 입력 후 목록 반영 방식으로 통일.
- 추천 사이트 추가 모달 취소 시 빈 임시 항목이 목록에 남지 않도록 수정.
- 페이지 섹션 추가를 인라인 입력에서 모달 입력 방식으로 변경.
- 페이지 섹션 행별 저장 제거 및 `페이지 섹션 저장` 단일 액션으로 이름·섹션 순서 저장 흐름 정리.
- 페이지 섹션 자체 순서를 버튼 대신 드래그앤드롭으로 변경.
- 네비게이션 저장 버튼을 페이지 섹션 탭에서 숨기고 저장 대상별 버튼 라벨 정리.
## v1.9.13
- 페이지 섹션 관리를 관리자 페이지 목록에서 네비게이션 관리의 `페이지 섹션` 탭으로 이동.
- 네비게이션 탭 이름과 순서를 `메인 네비게이션`·`페이지 섹션`·`하단 네비게이션`·`추천 사이트`로 정리.
- 페이지 섹션 탭에 섹션별 페이지 순서 변경 모달 추가.
- 페이지 작성·수정 화면의 섹션 선택을 등록 섹션 검색형 입력으로 변경.
- 페이지 작성·수정 화면의 목록 노출 설명 제거, 목록 이미지 라벨을 `썸네일 등록`으로 변경.
- 페이지 작성·수정 화면의 정렬 순서 직접 입력 제거 및 HTML 자산 영역 위치 정리.
- `PUT /admin/api/page-sections/:id/pages/reorder` API 추가.
## v1.9.12
- 페이지 섹션을 `page_listing_sections` 관리 테이블로 분리.
- 관리자 페이지 목록에 페이지 섹션 추가·수정·삭제·순서 변경 관리 카드 추가.
- 페이지 작성·수정 화면의 섹션 입력을 등록된 섹션 선택 방식으로 변경.
- 홈 Pages 진열장 섹션 정렬을 페이지 섹션 관리 순서 기준으로 변경.
- HTML 문서 모드 페이지에서 브라우저 뒤로가기 후 화면이 갱신되지 않을 수 있는 클라이언트 재진입 방식을 수정.
- Pages 진열장 썸네일 권장 비율과 제작 크기 문서화.
- DB 마이그레이션 `061_page_listing_sections.sql` 추가.
## v1.9.11
- 페이지 노출 메타 추가: 홈 표시, 추천 표시, 섹션명, 목록 제목, 목록 설명, 목록 이미지, 정렬 순서 저장.
- 공개 홈에 노출 설정된 페이지를 섹션별 도서 진열장형 Pages 선반으로 표시하도록 추가.
- 공개 검색 결과에 홈 표시 페이지 섹션 추가.
- 관리자 페이지 목록에 홈 표시·섹션·추천 배지 추가.
- DB 마이그레이션 `060_page_listing_metadata.sql` 추가.
## v1.9.10
- 관리자 세션으로 공개 게시물·페이지를 조회할 때 페이지뷰·읽음·체류·스크롤·실시간 접속 통계에 포함되지 않도록 수정.
## v1.9.9
- 관리자 글 목록의 공개 게시물 상태 표시와 상태 필터 문구를 `발행`에서 `공개`로 통일.
- 관리자 글·페이지 목록 주소 줄에 hover/focus 시 보이는 공개 보기 바로가기 아이콘 추가.
## v1.9.8
- 게시물·페이지 관리자 슬러그 입력 규칙을 한글·영문 소문자·숫자·하이픈·언더바 허용으로 통일.
- 게시물 본문 제목 `1~3` 같은 텍스트가 오른쪽 목차에서 `13`으로 보이던 문제 수정.
- 메인·태그 게시물 목록의 오른쪽 아래 화살표를 게시물 링크로 연결.
- 메인·게시물 전체·태그 게시물 목록의 태그 배지를 태그 페이지 링크로 통일.
## v1.9.7
- 관리자 통계 차트: 현재 구간 축 라벨(이번 주 등) 줄바꿈·hover 시 글자 안 보임 문제 수정.
- 관리자 대시보드 통계 추이 기본 선택을 주간에서 일간으로 변경, `일일` 버튼명을 `일간`으로 통일.
- 관리자 대시보드 기간 필터: 선택된 버튼 hover 시 `hover:bg-paper`와 `text-white`가 겹치던 스타일 충돌 수정.
## v1.9.6
- 관리자 대시보드 방문자 추이: 검색(빨강)·SNS(청록)·기타(회색) 유입 스택 막대 적용.
- 관리자 통계 차트: 기본은 옅은 색, hover 시 해당 막대만 색상 강조·나머지는 흐리게 표시.
## v1.9.5
- 관리자 대시보드 `/admin/api/analytics/traffic` 오류 수정: 정의되지 않은 `trendPeriod` 참조로 인한 500 응답 제거.
- 관리자 대시보드: 클라이언트에서 서버 전용 `lib/analytics.js` import 제거(`analytics-shared.js` 사용).
## v1.9.4
- 관리자 대시보드 통계 추이: 집계 시작일을 `2026-06-01` 기준으로 고정(`ANALYTICS_COLLECTED_SINCE` 환경 변수로 변경 가능).
- 관리자 대시보드 통계 추이: 집계 시작일 이전 구간은 0으로 표시.
- 관리자 대시보드 통계 추이 안내 문구를 `통계는 2026년 6월 1일부터 집계한 데이터를 표시합니다.` 형식으로 변경.
- `GET /admin/api/analytics/summary` 응답에 `collectedSince` 필드 추가.
- `docs/deploy.md`에서 버전별 QA 참고 섹션을 제거하고 배포·빌드·운영 절차만 남기도록 정리.
## v1.9.3
- 관리자 대시보드 통계 추이: 차트별 네비게이션을 기간 버튼 옆 공통 ‹ › 로 통합.
- 관리자 통계 추이: 서버 버킷 수 확장(일 28·주 24·월 24·년 16)으로 이전 기간 이동 지원.
- 관리자 페이지 목록: 조회수·통계 모달 추가(`GET /admin/api/analytics/pages/:id`).
## v1.9.2
- 관리자 통계 차트 툴팁: 제목 제거, 값·증감 가로 배치·`whitespace-nowrap`으로 세로 늘어짐 완화.
## v1.9.1
- 관리자 통계 차트: 차트 중앙의 중복 기간 라벨(주간·월간 등) 제거, 막대별 일·월·년 축 라벨 및 현재 구간(오늘·이번주·이번달) 표시.
- 관리자 통계 차트: 툴팁에 이전 구간 대비 증감(▲/▼) 표시, 기간별 페이지 이동(‹ ›) 지원.
- `AdminAnalyticsTrendChart` 공통 컴포넌트로 대시보드·게시물 통계 모달·게시물 통계 페이지 차트 통일.
## v1.9.0
- 관리자 대시보드 통계 추이 선택지를 일일·주간·월간·년간으로 변경.
- 관리자 대시보드 통계 추이 집계를 서버 기준 일간 7일·주간 최대 8주·월간 12개월·년간 최대 8년 단위로 정리.
- 관리자 대시보드 통계 추이 막대 클릭 상세 모달이 선택 집계 구간의 시작일·종료일을 사용하도록 정리.
## v1.8.9
- 관리자 글 목록에 게시물별 누적 조회수와 통계 모달 버튼 추가.
- 관리자 글 목록 조회수와 통계 버튼을 제목 영역에서 별도 조회수 열로 분리.
- 관리자 글 목록 조회수는 숫자만 표시하고 통계 버튼은 기본 회색·hover 파란색으로 정리.
- 관리자 글 목록 통계 버튼 클릭 시 게시물 수정 화면 대신 게시물별 통계 모달이 열리도록 수정.
- 관리자 게시물별 통계 모달을 대시보드 통계 상세 모달 스타일과 같은 카드형 구성으로 정리.
- 관리자 게시물별 통계 추이를 7/30/90일 대신 일간·주간·월간 집계로 전환.
- 관리자 게시물별 통계 화면 추가.
- 게시물별 통계 API와 앞으로 수집될 게시물별 유입 집계 테이블 추가.
- DB 마이그레이션 `059_post_analytics_traffic_daily.sql` 추가.
## v1.8.8
- 관리자 대시보드 통계 추이 막대 클릭 시 날짜·구간 상세 모달을 표시하도록 추가.
- 통계 상세 모달에 유입·디바이스·유입 키워드·인기 게시물·인기 페이지 정보를 표시하도록 추가.
- 통계 상세 모달의 유입 키워드 안내 문구를 간결하게 정리.
- 통계 상세 모달 패널에 0.5rem 둥근 모서리 적용.
## v1.8.7
- 태그별 헤더 이미지·오버레이 제목·오버레이 본문 필드 추가.
- 관리자 태그 생성·수정 폼에 태그 헤더 이미지 업로드·삭제와 오버레이 입력 추가.
- 공개 태그 상세에서 헤더 이미지가 있으면 기본 태그명·설명 대신 헤더 이미지를 표시하도록 수정.
- 태그 헤더 이미지가 미디어 사용처로 보호되도록 정리.
## v1.8.6
- 공개 태그 API에 전체 태그 메타 조회 옵션을 추가.
- 태그 상세·게시물 목록·게시물 상세에서 일반 태그도 이름·설명·색상을 표시하도록 수정.
- sitemap 태그 URL 생성 기준을 게시물이 연결된 전체 태그로 정리.
## v1.8.5
- 게시물 요약 자동 생성 시 인라인 색상 토큰과 HTML 태그가 목록 설명에 노출되지 않도록 수정.
## v1.8.4
- 게시물 글쓰기에서 새 태그 배지에 슬러그 대신 입력한 태그명을 표시하도록 수정.
- 새 태그 저장 시 입력한 태그명을 유지하고 `/`는 슬러그에서 `-`로 변환하도록 수정.
- 라이브 코드 블록의 줄번호 숨김 라벨을 `줄번호 표시 안함`으로 변경.
## v1.8.3
- 코드 블록 줄번호 표시 자동 저장 옵션을 `line-numbers`로 변경.
- 기존 `linenos`, `nolinenos`, `no-line-numbers` 옵션은 읽기 호환으로 유지.
## v1.8.2
- 게시물 글쓰기 코드 블록의 줄번호 표시 기본값을 숨김으로 변경.
- 코드 블록 줄번호를 켠 경우에만 펜스 선언 줄에 `linenos` 옵션을 저장하도록 수정.
## v1.8.1
- 게시물 글쓰기 슬래시 명령을 `/html`, `/link`, `/iframe`으로 분리.
- 게시물 본문에 `:::html`, `:::link`, `:::iframe` 블록 저장·렌더링 추가.
- 본문 HTML 블록에서 실행성 태그·속성을 제거하고 표 등 일반 HTML을 표시하도록 정리.
- 기존 HTML/임베드 작성값은 수동으로 새 블록 형식으로 정리하도록 배포 가이드 추가.
## v1.8.0
- 게시물 라이브 편집에서 위·아래 방향키로 인접 블록 이동 시 커서가 화면 밖으로 벗어나면 편집 스크롤 영역이 함께 따라오도록 수정.
## v1.7.9
- 대표 이미지 미디어 라이브러리에서 게시물 카드 썸네일 파생 파일을 숨기고 원본 이미지만 선택하도록 수정.
- 본문 이미지·갤러리·대표 이미지의 카드 썸네일 URL 판별을 공통 유틸로 통일.
- 게시물 저장 API에서 카드 썸네일 URL을 대표 이미지로 지정하지 못하도록 검증 추가.
## v1.7.8
- 게시물 글쓰기 이미지·갤러리 미디어 모달의 기본 탭을 업로드로 변경하고 업로드 탭을 첫 순서로 정리.
- 미디어 모달에서 업로드한 이미지가 라이브러리 전환 후 자동 선택되도록 수정.
- 공개 게시글 수정 아이콘을 로그인 회원 본인의 게시글에서만 표시하도록 관리자 세션 판정 제거.
- 주소·HTML 임베드 블록의 상단 여백을 제거하고 하단 여백만 유지하도록 수정.
## v1.7.7
- Homepage 통계 API에 최근 30일·180일(6개월)·365일(1년) 방문자 합계 추가.
- 기간별 방문자 합계를 단일 집계 쿼리로 처리하고 Homepage 권장 갱신 주기를 5분으로 정리.
## v1.7.6
- gethomepage Custom API에 누적 방문자·페이지뷰와 전체 게시글·댓글·페이지·태그·회원 통계 추가.
- Homepage에서 필요한 통계 필드를 선택해 사용할 수 있도록 `docs/homepage-widget.md` 가이드 추가.
## v1.7.5
- 전체 포트 재정검 결과에 맞춰 앱 포트를 `43080`, PostgreSQL 외부 포트를 `43081`로 변경.
- 개발·운영 환경 파일, Compose 기본값, 개발 서버·미리보기 명령과 관련 문서의 포트 기준을 통일.
## v1.7.4
- 다른 서비스와의 포트 충돌을 피하도록 앱 포트를 `43084`, PostgreSQL 외부 포트를 `43085`로 변경.
- 개발·운영 환경 파일, Compose 기본값, 개발 서버·미리보기 명령과 관련 문서의 포트 기준을 통일.
## v1.7.3
- 로컬 개발 앱 포트를 `43081`, PostgreSQL 포트를 `43082`로 변경.
- 개발 환경 URL·DB 연결 문자열·개발 서버·미리보기 명령의 포트 기준을 통일.
## v1.7.2
- NAS Docker 외부 앱 포트를 `43081`, PostgreSQL 외부 포트를 `43082`로 변경.
- Docker 내부 앱·DB 연결 포트는 기존 `3000`·`5432`로 유지.
## v1.7.1
- 관리자 네비게이션 추천 사이트 편집: 미저장 닫기·삭제 확인을 `AdminConfirmModal` 공통 모달로 교체.
## v1.7.0
- 관리자 멤버 권한: 관리자는 VIP·멤버 정보만 수정·삭제·비밀번호 변경 가능, 소유자·관리자·본인 계정은 조회만.
- 소유자 멤버 관리: 다른 회원을 소유자로 지정 시 확인 모달 후 권한 이전, 기존 소유자는 관리자로 자동 변경.
## v1.6.9
- 버그 수정: 멤버 편집 저장 시 `isSaving` 때문에 등급 변경 API가 건너뛰어져 관리자로 바꿔도 멤버로 되돌아가던 문제 수정.
## v1.6.8
- 버그 수정: 메뉴 관리 페이지에서 네비게이션 API 오류 시 `null.map`으로 SSR이 깨지던 문제 수정.
- `useAdminToast`: SSR 환경에서 `window` 접근으로 터지지 않도록 보호.
## v1.6.7
- 관리자 멤버 편집: 썸네일 업로드는 미리보기만 반영하고 **저장** 시 `PUT /admin/api/members/:id`로 적용.
- 관리자 미디어 프로필 이미지: 연결 회원 배지를 등급(소유자·관리자·VIP·멤버)별로 표시.
## v1.6.6
- 관리자 네비게이션: 메뉴·추천 사이트 삭제 시 `confirm` 확인 추가(하위 메뉴 포함 안내).
- 관리자 추천 사이트 편집 모달: 저장하지 않은 변경이 있을 때 취소·배경 클릭 시 닫기 확인.
## v1.6.5
- 관리자 추천 사이트 목록: 공개 Recommended와 동일한 카드 형태(아이콘·제목·설명/URL), 캐시 갱신 시각은 오른쪽 끝 유지.
- 관리자 추천 사이트: 드래그 시 카드 위·아래 구역에 파란 삽입선·「앞에/뒤에 삽입」 안내 표시.
- 관리자 추천 사이트 편집: URL 접두사 select에 AdminPageForm과 동일한 chevron SVG 적용.
## v1.6.4
- 네비게이션 URL: `uniare.sori.studio`처럼 프로토콜 없이 입력해도 `https://`를 자동 보정, 내부 경로 `/post` 지원 유지.
- 관리자 추천 사이트 편집: URL 입력에 `https://`·`http://`·내부 경로 접두사 선택 추가.
## v1.6.3
- 관리자 추천 사이트: 테이블 대신 공개 Recommended와 같은 카드 목록·편집 모달 UI로 변경.
- 관리자 추천 사이트: 목록은 썸네일·사이트·설명·캐시 갱신 시각·편집 버튼 전체 너비 레이아웃, 모달은 취소만으로 닫기.
## v1.6.2
- 추천 사이트 파비콘: 서버 캐시 컬럼(`cached_favicon_url`, `favicon_cached_at`) 추가 및 `/uploads/system/recommended-favicon-*.png` 저장.
- 추천 사이트 파비콘: 매월 1일 03:00(KST) 자동 갱신 플러그인·`npm run navigation:refresh-recommended-favicons` 스크립트 추가.
- 관리자 추천 사이트: 적용 아이콘 미리보기 열·썸네일 URL 옆 수동 파비콘 새로고침 버튼 추가.
- 공개 Recommended: 수동 썸네일 > 서버 캐시 파비콘 > 외부 프록시 순으로 아이콘 표시.
- 버그 수정: `favicon-refresh` API import 경로 오류로 Nitro 빌드 실패·개발 서버 무응답되던 문제 수정.
- 개발 서버 스크립트: Nitro 빌드 완료 후 링크를 출력하고 Rollup/Nitro ERROR 로그를 터미널에 표시하도록 수정.
## v1.6.1
- 외부 파비콘 URL 생성: Google `s2/favicons?domain=` 대신 `faviconV2`+origin URL을 사용해 서브도메인·신규 사이트에서 기본 지구본만 나오던 문제 수정.
- 공개 왼쪽 사이드바 Recommended: 썸네일 로드 실패 시 파비콘·첫 글자 순으로 fallback.
- 본문 북마크 카드: 파비콘 URL 생성을 `lib/external-favicon-url.js` 공통 유틸로 통일.
## v1.6.0
- 미디어 관리: 카드 썸네일·프로필 이미지 탭의 목록 카드 오른쪽 위에도 실제 사용 개수 배지를 표시하도록 수정.
- 미디어 관리: 상태 배지(회원·원본·카드)와 사용 개수 배지를 분리해 동일 이미지 후보를 목록에서 바로 구분할 수 있도록 정리.
## v1.5.109
- 공개 사이드바: 추천 사이트 Recommended 영역을 오른쪽 사이드바에서 왼쪽 사이드바 태그 아래로 이동.
- 공개 오른쪽 사이드바: 일반 화면에서 추천 사이트 목록 조회와 렌더링을 제거해 광고 슬롯 공간을 더 안정적으로 확보하도록 정리.
## v1.5.108
- 미디어 관리: 전체/미사용 필터를 미디어 라이브러리·카드 썸네일·프로필 이미지 탭 공통 배지형 필터로 표시하도록 수정.
- 미디어 관리: 전체 선택이 현재 필터에서 삭제 가능한 항목만 대상으로 동작하도록 유지하면서 미사용 정리 흐름을 명확히 정리.
- 게시물 글쓰기: 라이브 모드 이미지·갤러리 hover 액션에서 중복되는 편집 버튼을 제거하고 삭제 버튼만 남기도록 수정.
## v1.5.107
- 게시물 글쓰기: `Cmd/Ctrl+Z` 되돌리기·다시 실행 시 본문 값과 함께 선택 위치를 복원하도록 수정.
- 미디어 관리: 카드 썸네일 탭에서 카드 배지를 숨기고 현재 필터의 삭제 가능한 미사용 항목을 전체 선택할 수 있도록 수정.
- 미디어 업로드: 원본 파일명 정리 규칙을 Unicode 문자·숫자 기준으로 확장해 일본어 파일명을 보존하도록 수정.
## v1.5.106
- 게시물 글쓰기: 소스 모드 텍스트 색상 적용 후 textarea와 에디터 스크롤 위치를 함께 복원하도록 수정.
- 게시물 글쓰기: 기존 임베드 UI 라벨을 HTML로 변경하고 `/html`, `/iframe` 검색어로 찾을 수 있도록 수정.
- 게시물 본문: 단독 iframe HTML 또는 `:::embed` 블록 안 iframe HTML을 안전 속성 기반 iframe으로 렌더링하도록 추가.
## v1.5.105
- 게시물 글쓰기: 일반 텍스트 선택 시 오른쪽 블록 설정 패널에 텍스트 색상 선택 패널이 열리도록 추가.
- 게시물 글쓰기: 선택 텍스트 색상 적용 후 라이브 작성 위치가 크게 이동하지 않도록 커서 복원 기준 수정.
- 게시물 글쓰기: 라이브 모드 텍스트 부분 선택 색상 적용 시 선택 시작점이 0으로 잡혀 앞쪽 내용까지 함께 색상이 적용되던 문제 수정.
- 게시물 글쓰기: 소스 모드 텍스트 색상 적용 후 textarea 스크롤 위치를 보존하도록 수정.
- 인라인 마크다운: `::red[텍스트]` 형식의 색상 토큰 렌더링과 색상 내부 굵게·기울임 등 인라인 조합 처리 추가.
- 공개 본문: 회색·파랑·초록·노랑·빨강·보라 인라인 텍스트 색상 표시 추가.
## v1.5.104
- 게시물 상세 목차: 2줄 이상 제목에서 활성 표시선과 텍스트 정렬이 틀어지지 않도록 항목 높이를 최소 24px 기준으로 수정.
## v1.5.103
- 게시물 상세 목차: 활성 표시선을 Tailwind 가상 요소 유틸 대신 scoped CSS `::before`로 직접 그리도록 수정.
## v1.5.102
- 게시물 상세 목차: 활성 표시선을 `border` 대신 가상 요소 배경 막대로 변경해 브랜드 컬러 반응을 복구.
- 게시물 상세 목차: 각 항목 높이를 24px로 고정하고 텍스트를 세로 중앙 정렬하도록 수정.
## v1.5.101
- 게시물 상세 목차: 활성 항목 표시선을 가상 요소로 분리해 브랜드 컬러 라인이 생겨도 텍스트 시작점이 밀리지 않도록 수정.
## v1.5.100
- 게시물 상세 목차: 전체 `nav` 보더 대신 항목별 `li` 보더로 변경해 활성 항목 왼쪽 라인이 브랜드 컬러로 직접 강조되도록 수정.
## v1.5.99
- 게시물 상세 TOC: 섹션 라벨을 `목차`로 변경.
- 게시물 상세 TOC: 활성 항목의 왼쪽 표시선과 텍스트에 브랜드 컬러를 적용하고 표시선을 더 눈에 띄게 조정.
## v1.5.98
- 게시물 상세 TOC: 목차 자체 최대 높이와 내부 스크롤을 제거해 목차 전체가 먼저 펼쳐지고 광고가 그 아래에 이어지도록 수정.
- 게시물 상세 TOC: 활성 항목 자동 보정을 오른쪽 사이드바 전체 스크롤 기준으로 변경.
## v1.5.97
- 게시물 상세 오른쪽 사이드바: 블로그 소개·Follow 섹션을 숨기고 TOC를 최상단에 배치하도록 수정.
- 게시물 상세 광고: 왼쪽 사이드바에서 제거하고 오른쪽 TOC 아래에 표시하도록 이동.
- 게시물 상세 TOC: 광고 영역을 확보하도록 최대 높이를 제한하고, 목차 왼쪽 세로 기준선과 활성 항목 표시선을 추가.
- 관리자 Ads 설정: 게시물 사이드 광고 라벨과 설명을 오른쪽 사이드 기준으로 수정.
## v1.5.96
- 공개 화면 회원 세션 확인: 비로그인 방문 시 콘솔에 401 오류가 반복 표시되지 않도록 선택적 조회로 수정.
- 게시물 상세 관리자 세션 확인: 편집 버튼 표시용 확인은 선택적 조회를 사용하되 관리자 라우트 보호용 401 동작은 유지.
## v1.5.95
- 게시물 상세 왼쪽 사이드 광고 슬롯: 광고 미노출 시 하단 구분선만 남지 않도록 정리.
- 게시물 상세 오른쪽 TOC: 하단 구분선 클래스가 없는 상태임을 재확인.
## v1.5.94
- 게시물 상세 오른쪽 사이드바: TOC 영역이 고정 최대 높이 대신 프로필·Follow 아래 남는 높이를 사용하도록 수정.
## v1.5.93
- 게시물 글쓰기: 게시물별 태그 최대 개수를 기본 5개로 제한하도록 추가.
- 사이트 설정: POST 설정에서 태그 최대 개수를 1~10개 범위로 조절하는 항목 추가.
- 서버 API: 게시물 생성·수정 시 설정된 태그 최대 개수를 초과하면 저장을 차단하도록 보강.
- 공개 본문: 표준 마크다운 표 렌더링 추가.
- 게시물 글쓰기: `/표`·`/table` 슬래시 명령으로 기본 표 템플릿을 삽입하도록 추가.
- DB: `site_settings.post_tag_limit` 마이그레이션 추가.
## v1.5.92
- 관리자 태그: 새 태그 저장 후 수정 화면이 아니라 태그 목록으로 이동하도록 수정.
- 관리자 태그: 태그 수정 화면의 변경 저장 버튼을 실제 변경사항이 있을 때만 활성화하도록 수정.
- 관리자 태그: 저장·삭제 액션의 우측 상단 토스트 피드백 추가.
- 게시물 글쓰기: 미디어 모달 업로드 완료 후 본문에 자동 삽입하지 않고 목록에서 직접 선택해 삽입하도록 수정.
- 게시물 글쓰기: 미디어 모달 업로드 중 닫기·중복 업로드를 막도록 수정.
## v1.5.91
- 게시물 글쓰기: 본문 미디어 선택 모달에서 게시물 카드 썸네일 파생 파일을 숨기도록 수정.
- 게시물 글쓰기: 미디어 모달 업로드 중 드롭·파일 선택 재진입을 막고 업로드 중 오버레이·스피너·스켈레톤 로딩 표시 추가.
- 게시물 태그: 게시물별 태그 연결 순서 저장용 `post_tags.sort_order` 마이그레이션 추가.
- 공개 게시물 목록: 저장된 첫 번째 태그를 기준으로 태그를 고정 표시하도록 태그 조회 정렬 보강.
- 관리자 게시물 목록: 게시물에 적용된 태그 전체를 배지로 표시하도록 수정.
## v1.5.90
- 게시물 글쓰기: 라이브 모드에서 닫는 코드 펜스를 다음 코드 블록 시작으로 오인해 일반 문단에서도 코드 블록 설정 패널이 남던 문제 수정.
- 게시물 글쓰기: 라이브 모드 코드 블록 아래 새 문단 삽입 시 블록 설정 패널 상태를 즉시 일반 줄 기준으로 초기화하도록 보강.
## v1.5.89
- 게시물 글쓰기: 소스 모드 코드 블록 본문에서 `/`로 시작하는 경로가 슬래시 명령 메뉴로 오인되지 않도록 수정.
- 게시물 글쓰기: 에디터 본문 변경 히스토리를 추가해 `Cmd/Ctrl+Z` 되돌리기와 `Cmd/Ctrl+Shift+Z`/`Ctrl+Y` 다시 실행을 지원.
## v1.5.88
- 게시물 글쓰기: 라이브 모드 인용 마지막 줄에서 아래 방향키로 외부 일반 문단을 만들고 커서를 이동하도록 수정.
- 라이브 편집기: 블록 아래 줄 삽입 이벤트의 포커스 대상 줄을 부모 에디터가 반영하도록 보강.
## v1.5.87
- 게시물 글쓰기: 라이브 모드 코드 블록 밖으로 커서가 이동하면 오른쪽 코드 블록 설정 패널이 닫히도록 수정.
- 라이브 편집기: 멀티라인 편집 영역의 실제 커서 원본 줄을 블록 패널 상태에 반영하도록 보강.
## v1.5.86
- 공개 본문: 기본 인용문 텍스트가 다크 모드에서 사이트 텍스트 색상을 따르도록 수정.
## v1.5.85
- 공개 SEO: 페이지 제목 뒤에 사이트 이름을 자동으로 붙이던 전역 title template 제거.
## v1.5.84
- 회원가입 모바일: 이메일 인증번호 입력창이 세로 flex 레이아웃에서 낮게 눌리지 않도록 수정.
## v1.5.83
- 공개 오른쪽 사이드바: 사이트 로고 컨테이너가 설명 텍스트에 밀려 가로로 줄어들지 않도록 수정.
## v1.5.82
- 공개 SEO: `/sitemap.xml` 동적 sitemap 라우트 추가.
- 공개 SEO: `/robots.txt` 라우트 추가 및 sitemap 위치 안내.
- sitemap: 공개 발행글·고정 페이지·글이 있는 태그 URL을 DB 기준으로 자동 생성하고, `noindex` 글은 제외하도록 정리.
## v1.5.81
- 게시물 글쓰기: 오른쪽 사이드의 `대표 이미지 표시` 토글을 대표 이미지 유무와 상관없이 항상 보이고 동작하도록 수정.
- 게시물 글쓰기: 대표 이미지가 나중에 추가되어도 미리 저장한 표시 설정이 유지되도록 수정.
## v1.5.80
- 게시물 이미지 업로드: 본문 첨부 이미지까지 카드 썸네일을 생성하지 않도록 업로드 시점 자동 생성을 제거.
- 게시물 저장: 대표 이미지가 설정된 경우에만 목록 카드용 WebP 썸네일을 생성하도록 수정.
- 관리자 미디어: 원본 이미지 상세에서 카드 썸네일을 생성·다시 생성할 수 있는 버튼과 API 추가.
- 게시물 글쓰기: 대표 이미지를 게시물 상세 본문 상단에 표시할지 선택하는 `본문 상단 대표 이미지` 옵션 추가. 기본값은 표시 안 함.
- 공개 게시물 상세: `본문 상단 대표 이미지` 옵션이 켜진 게시물에서만 제목 아래 대표 이미지를 표시하도록 수정.
## v1.5.79
- 관리자 미디어: 게시물 카드 썸네일을 일반 미디어 목록에서 분리해 `카드 썸네일` 탭으로 표시하도록 수정.
- 관리자 미디어: 카드 썸네일도 원본 대표 이미지 사용처에 연결해 사용 중으로 판정하도록 수정.
- 관리자 미디어: 원본 대표 이미지에 카드 썸네일이 없으면 목록에서 원본을 불러오는 상태를 `원본` 배지와 상세 상태로 구분하도록 추가.
- 관리자 미디어: 카드 썸네일 폴더 이동·파일명 변경을 차단하고, 사용 중인 카드 썸네일 삭제를 차단하도록 보강.
## v1.5.78
- 게시물 이미지 업로드: JPG·PNG·WebP 업로드 시 목록 카드용 WebP 썸네일 자동 생성 추가.
- 공개 목록 API: 생성된 카드 썸네일이 있으면 `featuredImageThumbnail`로 함께 내려주도록 추가.
- 메인 Featured·Latest, 게시물 목록, 태그 목록: 카드 이미지는 썸네일을 우선 사용하고 없으면 원본 대표 이미지로 대체하도록 수정.
- 기존 업로드 이미지용 `npm run images:backfill-post-thumbnails` 백필 명령 추가.
## v1.5.77
- 메인 화면 Latest 목록: 기존 썸네일 레이아웃은 유지하고, 요약 영역이 메타 정보를 밀어내지 않도록 수정.
- 메인 화면 Latest compact 모바일: 썸네일을 본문 정보 높이에 맞춘 80px 정사각형으로 표시하도록 수정.
- 메인 화면 Latest placeholder 썸네일: 모바일에서 제목을 3줄로 제한하고 긴 단어가 썸네일 밖으로 넘치지 않도록 수정.
- 메인 화면 Latest list 보기: 긴 설명이 과하게 늘어나지 않도록 최대 2줄로 조정.
## v1.5.76
- 관리자 사이트 설정: 좌측 내비 아이콘을 브랜드·사이트 정보·POST 설정·사이트 코드·Ads·SNS 정보·게시물보내기·가져오기 항목에 추가.
## v1.5.75
- 게시물 글쓰기: 오른쪽 설정 패널 하단에 단어 수·공백 제외 문자 수·공백 수·예상 읽기 시간·블록 수·이미지 수 통계 추가.
- 게시물 글쓰기: 본문 통계를 삭제 버튼 위의 작은 정보 영역으로 표시하도록 추가.
## v1.5.74
- 사이트 설정 Ads: 게시물 왼쪽 사이드 광고 슬롯 추가.
- 공개 게시물 화면: 오른쪽 TOC 사이드바에서는 공통 사이드 광고를 숨기고, 데스크톱 왼쪽 사이드바 하단에 게시물 전용 광고를 표시하도록 수정.
- 게시물 본문: 인아티클 광고를 글 길이에 따라 짧은 글 0회, 중간 글 1회, 긴 글 최대 2회까지 삽입하도록 조정.
## v1.5.73
- 사이트 설정 Ads: 게시물 인아티클 광고 슬롯 추가.
- 게시물 본문: 충분히 긴 글에서 전체 블록 40% 근처 일반 문단 뒤에 인아티클 광고를 한 번 삽입하도록 추가.
- 사이트 설정 저장소: 게시물 인아티클 광고 코드 컬럼과 관리자 입력 검증 추가.
## v1.5.72
- 사이트 설정 Ads: 메인 인피드 광고 슬롯 추가.
- 메인 화면: Latest 게시물 목록 사이 한 곳에 인피드 광고를 무작위 삽입하도록 추가.
- 사이트 설정 저장소: 메인 인피드 광고 코드 컬럼과 관리자 입력 검증 추가.
## v1.5.71
- 사이트 설정: 위치별 광고 코드를 관리하는 Ads 카드 추가.
- 공개 화면: 메인 Featured·Latest 사이, 오른쪽 사이드 하단, 게시물 본문 상단·하단 광고 슬롯 추가.
- 사이트 설정 저장소: 광고 슬롯 코드 컬럼과 관리자 입력 검증 추가.
## v1.5.70
- 게시물 글쓰기: 라이브 모드 마지막 줄 `!!!` Enter 콜아웃 단축 생성 시 본문 빈 줄을 두 줄로 만들도록 수정.
- 게시물 글쓰기: 라이브 콜아웃·인용 내부 `Cmd/Ctrl+A` 후 Delete가 선택 범위를 실제 본문 삭제로 반영하도록 Selection Bridge Range 교차 판정 수정.
- 게시물 글쓰기: 라이브 인용·콜아웃 줄바꿈 직후 한글 첫 글자 자모 분리 방지를 위해 plain text 멀티라인 Enter 삽입 경로 정리.
## v1.5.69
- 게시물 글쓰기: 라이브 인용·콜아웃 멀티라인 본문 Enter 줄바꿈이 끝 줄에서 잘리지 않도록 contenteditable 읽기 옵션 보강.
- 게시물 글쓰기: 라이브 인용·콜아웃에서 `Cmd+Shift+K` 줄 삭제·Backspace 병합 직후 오래된 DOM이 다시 커밋되지 않도록 구조 변경 stale blur 차단 추가.
## v1.5.68
- 게시물 글쓰기: 라이브 모드 Shift+위/아래 선택 확장을 커서 위치 기준으로 보강. 단일 줄 블록에서는 커서가 중간에 있어도 인접 블록 같은 열까지 선택 확장.
- 게시물 본문: Obsidian식 `$H_2O$`, `$2^8$`, `$_B^AR$` 위첨자·아래첨자 인라인 렌더링 추가.
## v1.5.67
- 게시물 글쓰기: 라이브 모드 Shift+방향키 블록 경계 선택 확장 보강. 줄 범위 기반 블록 탐색·선택 포커스 경계 판별·Shift+방향키 블록 이동 충돌 제거.
- 게시물 글쓰기: 라이브 모드 교차 블록·전체 선택 후 Backspace/Delete/Cmd+X 삭제를 마크다운 본문에 반영하도록 Selection Bridge 삭제 경로 추가.
## v1.5.66
- 게시물 글쓰기: 라이브 모드 Selection Bridge 추가. Shift+방향키로 서로 다른 문단·블록 범위 선택 확장 지원.
- 게시물 글쓰기: 라이브 모드 `Cmd/Ctrl+A` 1회는 현재 블록 전체, 2회는 본문 전체 선택으로 단계화.
- 게시물 글쓰기: 라이브 미리보기 루트 포커스에서 `Cmd/Ctrl+A`로 본문 전체 선택 지원.
## v1.5.65
- 게시물 글쓰기: 라이브 인용·콜아웃·코드·토글 본문에서 한글 조합 확정 Enter의 `keydown`이 전달되지 않고 `keyup`만 남는 경우에도 줄바꿈이 즉시 실행되도록 수정.
## v1.5.64
- 게시물 글쓰기: 라이브 모드에서 Shift+방향키 범위 선택과 `Cmd/Ctrl+A` 전체 선택이 블록 이동 단축키에 가로막히던 문제 수정.
## v1.5.63
- 게시물 글쓰기: 라이브 모드 공통 편집기의 한글 IME 조합 중 Enter 처리를 문단·빈 줄·제목·목록·토글 제목·인용·콜아웃·코드·토글 본문 전체에 동일하게 적용.
- 게시물 글쓰기: 한글 글자 조합 확정 Enter 직후에도 해당 블록의 줄바꿈·블록 분리·다음 필드 이동 동작이 한 번에 이어지도록 수정.
## v1.5.62
- 게시물 글쓰기: 라이브 모드에서 줄 병합(Backspace) 후 Enter로 다시 나눌 때 이전 블록 DOM이 남아 본문이 중복·통째 줄로 커밋되던 문제 수정.
## v1.5.61
- 게시물 글쓰기: 콜아웃 본문 첫 줄이 빈 줄일 때 소스·라이브 전환 후 `focusEditableAtLine`이 멀티라인 편집 영역 전체를 비워 본문이 사라지던 문제 수정.
## v1.5.60
- 게시물 글쓰기: 라이브 콜아웃·코드·인용 등 멀티라인 편집 영역 Enter를 브라우저 기본 DOM 줄 생성 대신 텍스트 줄바꿈 삽입으로 처리하도록 수정.
- 게시물 글쓰기: 라이브 fenced 블록 편집 반영 시 현재 문서의 닫는 fence 줄을 다시 찾아 오래된 줄 범위로 본문이 유실될 수 있던 문제 수정.
- 게시물 글쓰기: 콜아웃 첫 줄 앞에 빈 줄을 만든 뒤 소스·라이브 모드를 오갈 때 본문 보존을 보강.
## v1.5.59
- 게시물 글쓰기: 라이브 멀티라인 블록 편집 텍스트를 `<br>` HTML 대신 원문 텍스트와 `pre-wrap`으로 복원하도록 수정.
- 게시물 글쓰기: 콜아웃 첫 줄이 빈 줄인 상태에서 소스·라이브 모드를 오가면 본문이 사라질 수 있던 문제 수정.
## v1.5.58
- 게시물 글쓰기: 라이브 인용 첫 글자 앞 Backspace 시 인용 블록을 일반 문단으로 되돌리도록 수정.
- 게시물 글쓰기: 라이브 코드·인용·콜아웃·토글 블록 맨 위에서 위 방향키로 외부 기본 문단을 만들며 빠져나오도록 추가.
- 게시물 글쓰기: 라이브 멀티라인 블록 편집 중 부모 모델 갱신이 포커스 중인 편집 DOM을 덮어써 내용이 사라질 수 있던 문제 수정.
## v1.5.57
- 게시물 글쓰기: 라이브 모드 인용을 줄 단위 편집 대신 단일 멀티라인 편집 영역으로 변경.
- 게시물 글쓰기: 라이브 문단에서 `>` 입력 시 인용 블록으로 즉시 전환되도록 추가.
- 게시물 글쓰기: 라이브 코드 블록 본문 입력 중 줄 번호와 원본 마크다운이 즉시 동기화되도록 수정.
- 게시물 글쓰기: 라이브 콜아웃 본문 입력 중 원본 마크다운이 즉시 동기화되도록 수정.
- 게시물 글쓰기: 콜아웃 등 멀티라인 블록 내부 두 번째 줄 이후 맨 앞 Backspace가 본문을 중복 병합하던 문제 수정.
## v1.5.56
- 게시물 글쓰기: 소스 모드 코드·콜아웃·토글 선언 줄에서 라이브 모드로 전환해도 실제 본문 줄로 포커스가 복원되도록 수정.
- 게시물 글쓰기: 라이브 모드 마지막 코드·콜아웃·토글 본문에서 아래 방향키로 외부 기본 문단을 만들며 빠져나오도록 수정.
- 게시물 글쓰기: 닫히지 않은 코드 펜스가 아래 콘텐츠를 코드 블록으로 삼키지 않도록 수정.
- 게시물 글쓰기: 라이브 모드 문단에서 ``` 또는 `!!!` 입력 후 Enter로 코드 블록·콜아웃을 빠르게 만들 수 있도록 추가.
- 게시물 글쓰기: 소스·라이브 모드 `Cmd/Ctrl+K` 링크 삽입 단축키 추가.
- 게시물 본문: 인용문을 배경 카드형 대신 왼쪽 세로 막대형 기본 스타일로 변경.
- 게시물 본문: 콜아웃 색상별 보더 표시 추가.
## v1.5.55
- 게시물 글쓰기: 소스 모드 `Cmd+Shift+K` 현재 줄 삭제 단축키 복구.
- 게시물 글쓰기: 라이브 모드 미리보기 루트 포커스 상태에서도 `Cmd+Shift+K`가 현재 원본 줄을 삭제하도록 보강.
- 게시물 글쓰기: 선택 범위가 걸친 소스 모드 여러 줄 삭제 처리 추가.
## v1.5.54
- 게시물 글쓰기: 콜아웃 레이아웃을 아이콘·제목 헤더와 본문 줄바꿈 구조로 변경.
- 게시물 글쓰기: 콜아웃 제목 옵션을 오른쪽 블록 설정 패널에 추가.
- 게시물 글쓰기: 콜아웃 선언부 `title` 옵션 저장·파싱 추가.
- 게시물 글쓰기: 새 콜아웃 기본 아이콘 표시를 사용하지 않도록 변경.
## v1.5.53
- 게시물 글쓰기: 라이브 모드 콜아웃 본문을 단일 멀티라인 편집 영역으로 정리해 `Shift+방향키` 범위 선택이 내부 여러 줄을 가로지르도록 수정.
- 게시물 글쓰기: 콜아웃 아이콘 미사용 시 라이브 편집 화면의 `+` 자리 표시자를 숨기도록 수정.
- 게시물 글쓰기: 라이브·사용자 화면 콜아웃 아이콘을 모두 왼쪽 상단 정렬로 통일.
- 게시물 글쓰기: 라이브 모드 멀티라인 콜아웃에서 아래 방향키가 새 본문 줄을 만들지 않도록 보정.
## v1.5.52
- 게시물 글쓰기: 라이브 모드 fenced 블록의 원본 범위가 닫는 `:::` 다음 줄까지 포함되던 문제 수정.
- 게시물 글쓰기: 연속 콜아웃에서 위 콜아웃 편집 시 아래 콜아웃 선언 줄이 삭제되던 문제 수정.
- 게시물 글쓰기: 한글 조합 종료 직후 Enter 중복 이벤트를 전역 capture 단계에서 1회 차단하도록 보강.
## v1.5.51
- 게시물 글쓰기: 라이브 모드 인용·콜아웃에서 한글 조합 Enter가 줄 추가를 중복 실행하지 않도록 보정.
- 게시물 글쓰기: 라이브 모드 콜아웃 마지막 줄 아래 방향키가 새 본문 줄을 만들지 않도록 수정.
- 게시물 글쓰기: 라이브 모드 인용 마지막 줄 아래 방향키만 외부 문단을 만들도록 분리.
## v1.5.50
- 게시물 글쓰기: 라이브 모드 인용 Enter가 한글 조합 입력 뒤에도 내부 다음 인용 줄을 만들도록 수정.
- 게시물 글쓰기: 라이브 모드 인용 마지막 줄에서 아래 방향키로 외부 문단을 만들며 빠져나오도록 보강.
- 게시물 글쓰기: 라이브 모드 콜아웃 본문을 줄 단위 편집으로 전환하고 한글 조합 Enter 중복 줄 생성 문제를 완화.
## v1.5.49
- 게시물 글쓰기: 라이브 모드 `Cmd+Shift+K`가 코드·콜아웃·토글 블록 내부 현재 줄을 삭제하도록 수정.
- 게시물 글쓰기: 코드·콜아웃·토글 블록 내부 마지막 본문 줄에서 `Cmd+Shift+K`를 누르면 fenced 블록 전체를 삭제하도록 수정.
- 게시물 글쓰기: 콜아웃 라이브 편집에서 내부 줄 삭제와 마지막 줄 아래 방향키 이탈 이벤트가 부모 에디터로 전달되도록 수정.
- 게시물 글쓰기: 라이브 슬래시 명령 Enter 적용 시 키 이벤트 전파를 더 강하게 차단해 한글 IME 입력 잔여 문자가 블록 본문에 남을 가능성을 줄임.
## v1.5.48
- 게시물 글쓰기: 상단 상태 표시에서 외부 이동 아이콘과 게시물 링크 이동 기능 제거.
- 게시물 글쓰기: 상단 상태 영역은 현재 상태 텍스트만 표시하도록 정리.
## v1.5.47
- 공개 RSS 피드: 게시물 대표 이미지 또는 OG 이미지를 `media:thumbnail`·`media:content`로 포함하도록 추가.
- 공개 RSS 피드: 상대 이미지 경로를 사이트 URL 기준 절대 URL로 변환하도록 추가.
- 공개 RSS 피드: Media RSS 네임스페이스 선언 추가.
## v1.5.46
- 게시물 글쓰기: 콜아웃 배경색에서 분홍 옵션 제거.
- 게시물 글쓰기: 콜아웃 배경색을 인용 블록과 같은 색상 팔레트로 통일.
- 게시물 글쓰기: 라이브 모드 방향키 이동 시 콜아웃·인용 블록 선언 줄에 커서가 걸려 사라지던 문제 수정.
- 게시물 글쓰기: 작은 화면에서 게시물 설정 패널이 본문 폭을 압축하지 않도록 고정 오버레이로 표시.
## v1.5.45
- 게시물 글쓰기: 인용 블록 기본 배경색을 회색으로 변경.
- 게시물 글쓰기: 인용 블록 배경색 선택에서 분홍 옵션 제거.
- 게시물 글쓰기: 인용 블록 오른쪽 설정 패널의 색상 배지를 실제 인용 블록 색상과 동일하게 수정.
- 게시물 글쓰기: 라이브 모드에서 콜아웃·인용 블록에 포커스가 들어오면 오른쪽 블록 설정 패널이 열리도록 수정.
- 게시물 글쓰기: 라이브 모드 콜아웃 내부 설정 모달을 제거하고 소스 모드와 같은 오른쪽 패널 방식으로 통일.
## v1.5.44
- 관리자 사이트 설정: 블로그 제목·설명 읽기 화면을 라벨/값 세로 행 레이아웃으로 정리.
- 관리자 사이트 설정: 사이트 정보 읽기 화면에서 로고 등록 상태 텍스트를 제거하고, 미등록 시 점선 박스로 표시하도록 수정.
- 관리자 사이트 설정: 사이트 코드 읽기 화면을 가로 3분할 대신 라벨/값 세로 행 레이아웃으로 정리.
- 관리자 사이트 설정: 읽기 행의 라벨·값을 14px 일반 두께로 통일하고 행 내부 세로 중앙 정렬을 맞춤.
## v1.5.43
- 공개 RSS 피드: `/rss.xml`, `/feed.xml`, `/rss` 경로 추가.
- 공개 RSS 피드: 최근 공개 발행글 최대 50개를 RSS 2.0 XML로 응답하도록 추가.
- 사이트 설정 SNS 프리셋: RSS 기본 주소를 실제 피드 경로 `/rss.xml`로 변경.
## v1.5.42
- 공개 오른쪽 사이드바: 직접 SVG SNS 아이콘도 기존 프리셋 아이콘과 같은 16px 크기와 중앙 정렬로 표시되도록 수정.
## v1.5.41
- 관리자 사이트 설정: SNS 링크가 JSONB 배열이 아닌 JSON 문자열로 저장되어 저장 후 목록이 비어 보이던 문제 수정.
- 관리자 사이트 설정: 기존에 잘못 저장된 SNS 링크 JSON 문자열을 배열로 복구하는 DB 마이그레이션 추가.
- 관리자 사이트 설정: SNS 편집 UI에서 불필요한 이름 입력칸을 제거하고 아이콘·주소 중심 레이아웃으로 정리.
## v1.5.40
- 관리자 사이트 설정: SNS 링크 주소 입력 시 `https://`를 생략해도 자동 보정되도록 수정.
- 관리자 사이트 설정: SNS 아이콘 프리셋에 `직접 SVG` 옵션을 추가해 새 SNS 아이콘을 코드 수정 없이 등록할 수 있도록 수정.
- 관리자 사이트 설정: SNS 링크 편집에서 표시 이름과 사용자 SVG 아이콘 입력을 지원하도록 추가.
- 공개 오른쪽 사이드바: 사용자 지정 SVG SNS 아이콘을 FOLLOW 영역에 표시하도록 수정.
## v1.5.39
- 관리자 사이트 설정: 일반 섹션에 SNS 정보 카드 추가.
- 관리자 사이트 설정: SNS 링크를 아이콘 프리셋과 주소 조합의 목록형으로 입력·저장할 수 있도록 추가.
- 공개 오른쪽 사이드바: 사이트 설정에 등록된 SNS 링크만 FOLLOW 영역에 표시하도록 수정.
- DB: `site_settings.social_links` JSONB 컬럼 추가.
## v1.5.38
- 관리자 사이트 설정: 어나운스 바 배경색을 프리셋뿐 아니라 직접 hex 색상으로 선택·입력할 수 있도록 수정.
- 관리자 사이트 설정: 어나운스 바 텍스트 정렬을 중앙 또는 왼쪽으로 선택할 수 있도록 추가.
- 공개 어나운스 바: 설정된 배경색과 텍스트 정렬을 반영하도록 수정.
- 게시물 글쓰기: 한글 IME 조합 입력 중 코드·콜아웃·토글 블록 설정 패널이 줄바꿈 뒤 닫히지 않도록 보강.
- DB: `site_settings.announcement_alignment` 컬럼 추가.
## v1.5.37
- 게시물 글쓰기: 콜아웃 블록 오른쪽 설정 패널에서 아이콘 표시 여부·아이콘·배경색을 수정할 수 있도록 추가.
- 게시물 글쓰기: 코드 블록 오른쪽 설정 패널에서 언어와 줄번호 표시 여부를 수정할 수 있도록 추가.
- 게시물 글쓰기: 토글 블록 오른쪽 설정 패널에서 기본 펼침·닫힘 상태를 선택할 수 있도록 추가.
- 콘텐츠 파일 카드: 파일명 반복 표시를 줄이고 제목에는 확장자 포함 파일명을, 보조 영역에는 용량 중심 정보를 표시하도록 수정.
## v1.5.36
- 관리자 사이트 설정: 메인 화면 아래 브랜드 컬러 설정 카드 추가.
- 공개 화면: 사이트 설정의 브랜드 컬러를 `--site-accent`에 반영하도록 수정.
- 게시물 글쓰기: 인용문(`>`) 블록에서도 배경색 프리셋을 선택할 수 있도록 추가.
- DB: `site_settings.brand_color` 컬럼 추가.
## v1.5.35
- 관리자 대시보드: 검색·SNS·직접·기타 유입 정보 카드 추가.
- 관리자 대시보드: 디바이스·OS별 방문 집계와 유입 키워드 목록 추가.
- 관리자 대시보드: 인기 게시물에 월간 조회수와 작성일 표시 추가.
- Analytics: 페이지뷰 수집 시 referrer·현재 URL을 받아 유입원과 키워드를 집계하도록 추가.
- DB: `analytics_traffic_daily`와 유입 중복 방문자 집계 컬럼 추가.
## v1.5.34
- 공개 화면: Nuxt 전역 404/오류 페이지 추가.
- 사이트 설정: `ads.txt`, 공통 헤더 코드, 공통 푸터 코드 입력·저장 추가.
- 공개 응답: `/ads.txt` text/plain 응답과 공개 HTML 헤더·푸터 코드 삽입 플러그인 추가.
- 외부 위젯: gethomepage customapi 연동용 `/api/homepage-widget` 요약 API 추가.
- DB: `site_settings.ads_txt`, `custom_head_code`, `custom_footer_code` 컬럼 추가.
## v1.5.33
- 관리자 사이트 설정: 최근 내보내기 작업이 준비 완료 상태일 때 상단 상태 배지를 숨기도록 수정.
## v1.5.32
- 관리자 사이트 설정: 최근 내보내기 작업 카드에서 요청일·목표 용량·분할 설정 표시를 제거하고 만료일만 표시하도록 정리.
- 관리자 사이트 설정: 완료된 내보내기 작업은 진행도 영역을 숨기고 대기·생성 중 작업에서만 진행도를 표시하도록 수정.
- 관리자 사이트 설정: 내보내기 파일 목록을 체크 선택 방식으로 바꾸고 전체 선택·선택 파일 다운로드 기능 추가.
## v1.5.31
- 관리자 사이트 설정: 게시물 내보내기 요청 설정 카드와 최근 내보내기 작업 다운로드 카드를 분리.
- 관리자 사이트 설정: 최근 내보내기 작업은 작업이 있을 때만 별도 카드로 표시하도록 수정.
## v1.5.30
- 관리자 사이트 설정: 메인 화면 커버 읽기 모드 프리뷰가 카드 너비를 벗어나던 레이아웃 수정.
- 관리자 사이트 설정: 게시물 Import/Export 통합 영역을 `게시물 내보내기`와 `게시물 가져오기` 독립 카드로 분리.
- 관리자 사이트 설정: 게시물 가져오기는 ZIP 선택 후 `적용` 버튼을 눌러 실행되도록 수정.
- 관리자 사이트 설정: 내보내기·가져오기 상세 조작은 각 카드 버튼을 눌렀을 때만 펼쳐지도록 정리.
## v1.5.29
- 관리자 사이트 설정: 메인 화면 커버를 라이트모드·다크모드 상하 개별 프리뷰로 표시하도록 수정.
- 관리자 사이트 설정: 커버 이미지가 비어 있는 모드는 점선 드롭존으로 표시하고 파일 선택·드래그 앤 드롭 업로드를 지원하도록 추가.
- 관리자 사이트 설정: 타임존 준비 중 섹션을 제거하고 `기타 설정` 명칭을 `사이트 정보`로 변경.
## v1.5.28
- 게시물 Import: Obsidian에서 흔히 쓰는 YAML 블록 배열(`tags:\n- tag`) 형태를 읽을 수 있도록 frontmatter 파서 보강.
- 게시물 Import: ZIP 내부에서 찾지 못한 자산을 조용히 무시하지 않고 Import 결과 경고로 반환하도록 수정.
- 관리자 사이트 설정: Import 완료 후 누락 자산 등 경고 목록을 표시하도록 수정.
## v1.5.27
- 게시물 Import: Export ZIP을 업로드해 Markdown frontmatter 기반 게시물로 복원하는 관리자 API 추가.
- 게시물 Import: ZIP 내부 `images/`·`files/` 자산을 `/uploads/posts/YYYY/MM/`로 저장하고 본문 경로를 새 URL로 재매핑하도록 추가.
- 게시물 Import: 기존 슬러그와 충돌하면 덮어쓰지 않고 `-2`, `-3` 식 새 슬러그로 가져오도록 정리.
- 관리자 사이트 설정: Import 패널에서 ZIP 선택, Import 진행 상태, 완료 요약을 표시하도록 수정.
## v1.5.26
- 관리자 사이트 설정: 게시물 Import/Export 섹션 기본 화면을 요청 버튼과 최근 작업 중심으로 축소.
- 관리자 사이트 설정: Export 범위·분할 설정은 `Export 요청` 버튼을 눌렀을 때만 펼쳐지도록 수정.
- 관리자 사이트 설정: Import 영역은 `Import 하기` 버튼을 눌렀을 때 접힌 안내 패널로 표시하도록 정리.
- 관리자 사이트 설정: 구역 이동·Export 범위 셀렉트의 화살표 SVG와 오른쪽 간격 통일.
## v1.5.25
- 게시물 Export: 분할 ZIP 계획을 고정 100개 단위가 아니라 목표 ZIP 용량 기준으로 나누도록 수정.
- 게시물 Export: 설정 화면에서 목표 ZIP 용량과 ZIP당 최대 게시물 수를 지정할 수 있도록 추가.
- 게시물 Export: 작업 레코드에 `max_file_size_bytes`, `error_detail` 저장 추가.
- 게시물 Export: 실패 작업 카드에서 상세 오류 원인을 확인할 수 있도록 추가.
## v1.5.24
- 게시물 Export: 준비 완료 분할 파일을 브라우저에서 순차적으로 일괄 다운로드하는 버튼 추가.
- 게시물 Export: 실패한 작업을 준비 완료 파일은 유지한 채 실패 지점부터 재시도할 수 있도록 추가.
- 게시물 Export: 완료 시 Resend 설정이 있으면 요청 관리자 이메일로 준비 완료 알림을 보내도록 추가.
- 게시물 Export: 만료된 완료·실패 작업과 생성 ZIP 파일을 작업 목록 조회·새 요청 시 자동 정리하도록 추가.
## v1.5.23
- 게시물 Export: 전체·특정년·특정월·직접 지정 날짜 범위 백업 요청 추가.
- 게시물 Export: 작업 레코드에 `date_from`, `date_to`, `range_label` 저장 추가.
- 게시물 Export: 날짜 범위 기준 게시물만 분할 ZIP 대상에 포함하도록 수정.
- 관리자 사이트 설정: Export 요청 카드에 범위 선택 UI 추가.
- 관리자 사이트 설정: 완료·실패한 Export 작업과 생성 ZIP 파일을 삭제할 수 있도록 추가.
## v1.5.22
- 게시물 Export: 대기 작업을 백그라운드에서 실제 ZIP 파일로 생성하는 서버 실행부 추가.
- 게시물 Export: 게시물별 폴더와 `제목.md`, 내부 `images/`·`files/` 자산 폴더를 ZIP에 포함하도록 추가.
- 게시물 Export: 내부 `/uploads` 이미지·파일 URL을 ZIP 내부 상대 경로로 재작성하도록 추가.
- 게시물 Export: 준비 완료된 분할 ZIP 파일을 관리자 다운로드 API로 내려받을 수 있도록 추가.
- 관리자 사이트 설정: 대기 중·생성 중 Export 작업이 있으면 Export 요청 버튼을 비활성화하도록 수정.
## v1.5.21
- 게시물 Export: 작업 진행 확인용 `processed_count`, `current_part_index`, `progress_message`, `started_at` 컬럼 추가.
- 관리자 사이트 설정: Export 작업 카드에 진행 숫자, 진행률 바, 진행 설명, 마지막 갱신 시각 표시 추가.
- 관리자 사이트 설정: 대기 중·생성 중 Export 작업이 있으면 작업 목록을 5초 간격으로 자동 새로고침하도록 수정.
- 게시물 Export: 실제 zip 생성 워커가 붙으면 `1201 / 30002` 같은 진행도가 표시되도록 기반 정리.
## v1.5.20
- 게시물 Export: 백그라운드 작업 요청용 `post_export_jobs`와 분할 파일 계획용 `post_export_files` 테이블 추가.
- 게시물 Export: 관리자 API에서 최근 Export 작업 목록 조회와 새 Export 작업 요청을 지원하도록 추가.
- 관리자 사이트 설정: 게시물 Import/Export 섹션에서 Export 요청, 최근 작업, 분할 파일 계획을 확인할 수 있도록 수정.
- 게시물 Export: zip 생성 워커·이메일 알림·다운로드 연결 전 1차 작업 등록 단계로 정리.
## v1.5.19
- 게시물 Export: 대용량 게시물 환경을 고려해 백그라운드 분할 생성, 이메일 완료 알림, 분할/일괄 다운로드, 100일 보존 정책 방향 문서화.
## v1.5.18
- 게시물 Import/Export: 백업 목적에 맞게 게시물별 폴더와 로컬 자산 폴더를 포함하는 Obsidian 호환 번들 구조로 방향 수정.
## v1.5.17
- 관리자 사이트 설정: 읽기 모드의 POST·어나운스 토글을 켜진 상태여도 조작 불가로 보이도록 비활성 톤 강화.
- 게시물 Import/Export: Obsidian 호환 Markdown frontmatter 기반 1차 구현 방향 문서화.
## v1.5.16
- 공개 게시글 TOC: 본문 스크롤 위치에 맞춰 현재 제목 항목을 시각적으로 강조하도록 수정.
- 공개 게시글 TOC: 목차 항목이 많을 때 TOC 영역이 자체 스크롤되며 활성 항목을 자동으로 따라가도록 수정.
- 공개 댓글: 댓글·답글 등록 버튼이 입력값이 있을 때만 활성화되도록 수정.
- 공개 댓글: 정렬 라벨 한글화와 답글 입력 영역 스타일 정리 사용자 편집분 반영.
## v1.5.15
- 공개 헤더: 비로그인 상태의 사용자 메뉴 기본 아바타도 `?` 텍스트 대신 사람 아이콘으로 표시하도록 수정.
## v1.5.14
- 공개 헤더: 로그인 사용자의 아바타 이미지가 없을 때 이니셜 대신 사람 아이콘을 표시하도록 수정.
- 공개 게시글 상세: 모바일처럼 오른쪽 사이드바가 하단으로 내려가는 화면에서는 TOC를 숨기도록 수정.
- 관리자 미디어: 검색창을 글·멤버 검색과 같은 아이콘 포함 입력 스타일로 통일.
- 관리자 미디어: 미디어 라이브러리에서 파일 직접 추가 버튼을 추가하고, 현재 폴더 업로드 시 해당 폴더로 배치되도록 수정.
- 관리자 미디어: 현재 검색·필터 결과 기준 전체 선택과 선택 삭제 기능 추가.
## v1.5.13
- 공개 게시글 TOC: 목차 클릭 시 기본 해시 점프 대신 부드러운 스크롤로 이동하도록 수정.
- 공개 게시글 제목 앵커: 고정 상단 헤더 높이와 여백을 반영한 scroll margin으로 이동 위치를 안정화.
## v1.5.12
- 공개 게시글 상세: 오른쪽 사이드바의 Recommended 영역을 숨기고, 같은 위치에 H1~H3 기반 TOC를 표시하도록 수정.
- 공개 게시글 본문: H1~H3 제목에 TOC 링크용 앵커 ID를 부여하도록 수정.
- DB: 로컬 개발 DB에서 `zenn` 계정을 소유자로 보정하고 기존 비활성 소유자 계정을 일반 멤버로 정리.
## v1.5.11
- 관리자 멤버 상세: 기존 회원 진입 시 읽기 전용 보기 모드로 표시하고 상단 버튼을 `수정하기`로 변경.
- 관리자 멤버 상세: 수정 모드에서만 입력 필드·셀렉트를 편집 컨트롤로 표시하고, 변경 사항이 있을 때만 저장 버튼을 활성화하도록 수정.
- 관리자 멤버 상세: 저장·업로드·비밀번호 변경 오류/성공 피드백을 우측 상단 토스트로 통일.
- 관리자 멤버 목록: 검색창 스타일을 글 목록 검색창과 같은 테두리형 입력으로 통일.
## v1.5.10
- 관리자 멤버 상세: 소유자 본인, 관리자끼리 등 변경 불가한 등급 셀렉트는 UI에서 비활성화하도록 수정.
- 관리자 멤버 상세: 등급 변경 권한이 없는 세션에서는 멤버 등급을 일반 텍스트로 표시하도록 수정.
- 관리자 글 목록: 제목·슬러그·요약·본문·태그 기준 검색 입력 추가.
- 관리자 글 목록: 필터 셀렉트 화살표를 공통 SVG 아이콘과 오른쪽 여백으로 통일.
- 관리자 글 목록: 추천 표시와 제목 사이에 대표 이미지 썸네일 열 추가.
- 관리자 페이지 작성: HTML 문서 모드에서 빈 본문 또는 `!` 입력 후 Tab으로 기본 HTML 골격을 자동 완성하도록 추가.
## v1.5.9
- 관리자 대시보드: 페이지별 조회·방문자·체류·스크롤 통계 수집 및 인기 페이지 목록 추가.
- 공개 HTML 문서 페이지: Nuxt 클라이언트 통계를 거치지 않는 원문 HTML 응답도 서버에서 페이지 조회를 기록하도록 수정.
- 관리자 네비게이션 추천 사이트: 대체 텍스트와 썸네일 URL 입력 추가.
- 공개 오른쪽 사이드바 추천 사이트: 대체 텍스트가 있으면 URL 대신 표시하고, 썸네일이 있으면 파비콘 대신 표시하도록 수정.
- DB: 페이지 통계 테이블과 추천 사이트 메타데이터 컬럼 추가.
## v1.5.8
- 관리자 멤버 권한 변경: 소유자가 본인 권한을 직접 낮출 수 없도록 수정.
- 관리자 멤버 목록: 상태 열에 멤버 등급을 표시하고, 비활성 회원만 보조 상태로 표시하도록 수정.
- DB: 소유자가 없는 상태일 때 기존 관리자 중 가장 오래된 계정을 소유자로 복구하는 마이그레이션 추가.
## v1.5.7
- 관리자 페이지 작성/수정: 일반 텍스트 모드에서도 페이지 형식 선택창이 계속 보이도록 수정.
- 관리자 페이지 작성/수정: HTML 자산 업로드는 HTML 문서 모드에서만 보이도록 수정.
- 회원 활동 IP 기록: 로그인·회원가입·댓글·좋아요·이메일 OTP 요청에서 프록시 헤더(`x-forwarded-for`)를 포함해 요청 IP를 저장하도록 수정.
## v1.5.6
- 관리자 멤버 상세: 멤버 등급 선택이 즉시 저장되지 않고 저장 버튼으로만 반영되도록 수정.
- 회원 권한 변경 API: 소유자·관리자만 권한 변경 가능하도록 규칙 강화.
- 회원 권한 변경 API: 관리자는 다른 관리자·소유자를 조작할 수 없고, 소유자·관리자 등급을 부여할 수 없도록 수정.
- 회원 권한 변경 API: 마지막 소유자 권한이 사라지지 않도록 트랜잭션 잠금 안에서 검증하도록 수정.
## v1.5.5
- 회원 권한에 `VIP` 등급 추가.
- 공개 게시물 API: 멤버십 글은 로그인 여부가 아니라 VIP 이상 등급(`vip`/`admin`/`owner`)일 때만 조회되도록 수정.
- 관리자 멤버 상세: 멤버 등급 선택 UI 추가.
- 관리자 글쓰기: 멤버십 상태 안내 문구를 VIP 이상 공개 기준으로 수정.
- 관리자 미디어: 사용자 편집분을 포함해 썸네일 탭 문구를 프로필 이미지 기준으로 정리.
- DB: `users.user_role` 제약에 `vip`를 허용하는 마이그레이션 추가.
## v1.5.4
- 게시물 상태: `멤버십`, `비공개` 상태 추가.
- 공개 게시물 API: 멤버십 글을 공개 기본 목록에서 분리하도록 수정.
- 공개 게시물 API: 비공개 글은 사용자 화면과 공개 API에서 숨기도록 정리.
- 관리자 글쓰기: 상태 선택·툴바·목록 필터에 멤버십/비공개 상태 반영.
- 고정 페이지 상태: `초안`, `공개`, `비공개` 상태 추가.
- 공개 페이지 API/HTML 문서 응답: 공개 상태 페이지에서만 접근되도록 수정.
- 관리자 페이지 작성/목록: 페이지 상태 선택과 목록 상태 표시 추가.
- DB: 게시물·페이지 공개 상태 제약을 확장하는 마이그레이션 추가.
## v1.5.3
- 관리자 페이지 작성/수정: 새 페이지 기본 형식을 HTML 문서 모드로 변경.
- 관리자 페이지 작성/수정: 페이지 슬러그도 게시글처럼 한글 제목을 영문 슬러그로 자동 변환하도록 수정.
- 관리자 페이지 작성/수정: 페이지 형식의 `기본` 라벨을 `일반 텍스트`로 변경.
- 관리자 페이지 작성/수정: 대표 이미지 UI 제거 및 저장 시 페이지 대표 이미지를 사용하지 않도록 정리.
- 관리자 페이지 작성/수정: HTML 자산 업로드 버튼 추가, 업로드된 파일 URL을 HTML textarea 현재 커서 위치에 삽입하도록 추가.
- DB: `pages.render_mode` 기본값을 `html_document`로 변경하는 마이그레이션 추가.
## v1.5.2
- 관리자 페이지 작성/수정: 게시글 작성 화면과 같은 전체 화면 에디터, 상단 저장 툴바, 접이식 오른쪽 설정 패널 구조로 변경.
- 관리자 페이지 작성/수정: 페이지 형식 선택, Page URL, 대표 이미지, 삭제 액션을 오른쪽 설정 패널로 이동.
- 관리자 페이지 작성/수정: 기본 모드 본문 에디터를 게시글과 같은 Markdown-first 에디터로 통일.
- 관리자 레이아웃: 페이지 작성/수정 경로도 전체 화면 에디터 모드로 처리하도록 수정.
## v1.5.1
- 고정 페이지: 기본 Markdown 모드와 원문 HTML 문서 모드 선택 추가.
- 관리자 페이지 작성: HTML 문서 모드에서 전체 HTML 붙여넣기용 코드형 textarea 추가.
- 공개 페이지: HTML 문서 모드 페이지는 `/pages/:slug`에서 저장된 HTML을 `text/html` 원문으로 응답하도록 추가.
- DB: `pages.render_mode` 컬럼과 `markdown`/`html_document` 제약 추가.
## v1.5.0
- 관리자 글 목록: 태그 컬럼에 첫 번째 태그만 대표 태그로 표시하도록 수정.
- 관리자 글쓰기: 태그 입력 오른쪽 트리거를 기존 태그 제거가 아닌 메인 태그 선택 드롭다운으로 동작하도록 수정.
- 관리자 글쓰기: 기존 태그 부분 검색과 방향키·Enter 선택 추가.
- 관리자 글 목록·글쓰기: 태그 배지에 태그별 고유 색상 반영.
- 관리자 글쓰기: 게시물 설정 사이드바의 상태·태그 드롭다운 화살표와 닫기 버튼 아이콘 정리.
- 관리자 글·페이지 목록: 마지막 행 더보기 메뉴가 테이블 영역에 잘리던 문제 수정.
## v1.4.7
- 관리자 글쓰기 라이브 모드: 문단 이동(방향키) 시 굵게·기울임 등 인라인 마크다운이 사라지던 문제 수정.
- 콘텐츠 렌더러: 인용(`>`) 블록에 `> [!bg=색상]` 옵션 줄을 추가해 콜아웃과 같은 배경 프리셋 지정 지원.
- 관리자 글쓰기: 소스 모드에서 라이브 모드로 전환할 때 현재 커서 줄을 라이브 화면 중앙에 가깝게 스크롤하도록 보정.
## v1.4.6
- 관리자 설정: 로고 업로드가 저장 버튼 없이 즉시 DB에 반영되던 흐름을 파일 업로드 후 저장 버튼으로 반영하도록 수정.
- 관리자 설정: 메인 화면 커버에 다크모드 전용 이미지 필드 추가.
- 공개 홈: `HomeHero`가 라이트·다크 커버 이미지를 테마에 맞춰 교체 표시하도록 수정.
- DB: `site_settings.home_cover_dark_image_url` 컬럼 추가.
## v1.4.5
- 공개 게시글 상세: 게시물 메타 영역의 수정 시각 표시 제거, 글쓴이용 편집 링크는 요청 SVG 아이콘으로 교체.
- 공개 목록: 홈 Latest·게시물 목록·태그 목록에서 요약이 비어 있으면 본문에서 짧은 설명을 생성해 표시.
- 공개 목록: 목록용 설명은 수동 말줄임을 붙이지 않고 전용 `post-summary-clamp` 2줄/3줄 클래스가 실제 표시 줄 끝에서 처리하도록 보정.
- `composables/createPostSummary.js`: 게시물 요약·본문 fallback 공통 유틸 추가, 빈 단락 마커 HTML 주석은 요약에서 제거.
- 게시물 작성자: `posts.author_id` 마이그레이션 추가 및 owner/admin 단일 계정 환경에서만 기존 글 작성자 backfill.
- 관리자 게시물 저장: 새 글 작성 시 현재 관리자 세션 사용자 ID를 작성자로 저장하고, 기존 글 작성자가 비어 있으면 수정자 ID로 보정.
- 공개 게시글 상세: 관리자 여부가 아니라 로그인 회원 ID와 게시물 작성자 ID가 같을 때만 새 탭 편집 링크 표시.
- 공개 게시글 상세: 요약이 비어 있으면 본문에서 짧은 텍스트를 만들어 SEO·공유 설명에 사용.
- 회원 세션 API: 공개 화면 권한 분기를 위해 `isAdmin`, `role` 응답 필드 추가.
## v1.4.3
- `HomeHero`: 오버레이 본문 줄바꿈(`\n`)이 미리보기·홈에서도 보이도록 `whitespace-pre-line` 적용.
- 관리자 설정: 메인 화면 커버 편집 모드에서도 미리보기를 버튼 영역과 분리해 카드 폭 기준으로 크게 표시.
- 관리자 설정: 메인 화면 커버 미리보기를 실제 `HomeHero` 오버레이 구조로 표시해 긴 텍스트 줄바꿈도 공개 화면과 동일하게 확인하도록 수정.
- 관리자 설정: 메인 화면 커버 이미지 미리보기에서 이미지 폭만 360px로 제한되어 오른쪽이 비어 보이던 표시 문제 수정.
- 배포 TODO: 다음달 작업 대상으로 PostgreSQL·업로드 파일 백업/복구 시스템 설계 및 구현 항목 추가.
- 관리자 레이아웃: 공개 다크모드가 글쓰기 에디터 입력에 영향을 주지 않도록 라이트 폼 보정 스코프 축소.
- 관리자 레이아웃: 대시보드 메뉴를 `/admin` 활성 링크로 연결.
- 관리자 로그인: 일반 로그인과 동일한 다크 인증 스타일, 폼을 화면 오른쪽·내부 오른쪽 정렬.
- 관리자 대시보드: 통계 추이 막대 차트 높이·툴팁·기간별 묶음 집계 보정.
- 홈 Latest: 컴팩트 기본 보기, 리스트/컴팩트 표시 조건 수정, Featured·Latest UI 보정.
- 관리자 미디어: 종류 필터(전체·이미지·영상·음악·파일), 미사용 필터, 비디오 프레임 썸네일 추가.
- 배포 문서: NAS 운영 업데이트 절차 추가.
## v1.4.2
- 관리자 글쓰기: 소스 모드 긴 문장 자동 줄바꿈 시 라인 번호 높이를 실제 wrap 높이에 맞춰 보정.
- 관리자 글쓰기: 라이브 모드에서 소스 모드로 전환할 때 현재 포커스·화면 위치에 가까운 원본 줄로 커서와 스크롤 복원.
- 관리자 글쓰기: 소스 모드에서 라이브 모드로 전환할 때 현재 textarea 커서 줄을 라이브 편집 블록에 포커스하도록 보정.
- 콘텐츠 렌더러: 단독 이미지 파일 URL은 임베드가 아니라 이미지 블록으로 렌더링하도록 보정.
- 관리자 글쓰기: 라이브 모드 이미지 블록 hover/focus 시 편집·삭제 버튼 표시, 편집 버튼으로 기존 오른쪽 이미지 설정 패널 연결.
- `ProseImage`: URL 비어 있음·로드 실패 시 최소 높이 placeholder와 오류 안내 표시.
- 관리자 라이브 미리보기: 이미지 블록을 다른 이미지 블록에 드롭하면 `:::gallery`로 병합(`merge-images-to-gallery`).
- 관리자 라이브 미리보기: 갤러리 이미지를 블록 사이 삽입선에 드롭하면 단일 이미지 블록으로 분리(`extract-gallery-image`), 갤러리 1장 남으면 단일 이미지로 정리·0장이면 제거.
- 관리자 라이브 미리보기: 단독 이미지 URL 줄도 이미지 드래그 병합·갤러리 추가 대상으로 인식하도록 보정.
- 관리자 라이브 미리보기: 단일 이미지 블록을 기존 갤러리 셀에 드롭해 갤러리에 추가(`insert-image-to-gallery`).
- 콘텐츠 렌더러: 갤러리를 최대 3개 단위 행으로 나누고 이미지 자연 비율에 따라 셀 너비를 조정.
- 관리자 라이브 미리보기: 갤러리 블록도 포커스·방향키 이동·편집/삭제 버튼 접근이 가능하도록 보정.
- 관리자 라이브 미리보기: 갤러리 전체 편집/삭제 버튼을 개별 이미지 편집/삭제 버튼으로 변경.
- 관리자 글쓰기: 블록 설정 패널 바깥 클릭 시 닫힘, 갤러리 이미지 추가 미디어 모달 중 패널 유지.
- 콘텐츠 렌더러: 다크모드 기본 인용 블록 텍스트를 어두운 색으로 고정해 가독성 보정.
- 콘텐츠 렌더러: 공개 본문 리스트 번호·점 색상을 글쓰기 화면과 같은 파란 계열로 통일.
- 공개 레이아웃: 다크모드에서 좌우 사이드바 배경을 홈페이지 기본 배경(`--site-bg`)과 동일하게 통일.
- 배포 문서: NAS 운영 업데이트 절차(`git pull` → DB 마이그레이션 → `docker compose up -d --build`) 추가.
- 홈 Latest: 기본·Default 보기 방식이 컴팩트 형태로 보이도록 리스트/컴팩트 썸네일 표시 조건 수정.
- 홈 Featured: 대표 이미지 없는 추천 글 썸네일을 게시물 제목 placeholder로 통일.
- 홈 Latest: 게시물이 적을 때 보기 방식 메뉴가 잘리지 않도록 섹션 최소 높이 추가.
- 관리자 로그인: 일반 로그인과 같은 다크 인증 스타일을 적용하고, 관리자 구분용으로 폼을 오른쪽 배치 및 내부 오른쪽 정렬.
- 관리자 대시보드: 통계 추이 막대 차트가 보이지 않던 CSS 높이 비율 문제 수정.
- 관리자 대시보드: 통계 추이 막대 hover/focus 시 날짜와 정확한 값을 표시하는 툴팁 추가.
- 관리자 대시보드: 30일 이상 통계 추이 차트는 기간별 묶음 집계로 표시해 카드 폭 넘침 방지.
- 관리자 레이아웃: 사이드바 대시보드 항목을 비활성 표시에서 `/admin` 활성 링크로 변경.
- 관리자 레이아웃: 공개 사이트 다크모드가 관리자 입력·패널 색상에 영향을 주지 않도록 `admin-layout` 라이트 테마 스코프 추가.
- 관리자 글쓰기: 라이트 폼 컨트롤 보정이 글쓰기 에디터 입력까지 덮지 않도록 스코프 축소.
- 관리자 미디어: 미디어 라이브러리에 전체·이미지·영상·음악·파일 종류 필터 추가.
- 관리자 미디어: 게시물·페이지·사이트 설정·회원 프로필에서 참조되지 않는 미사용 미디어만 보는 필터 추가.
- 관리자 미디어: 비디오 항목은 초반 프레임을 브라우저에서 추출해 목록 썸네일로 표시.
## v1.4.1
- 관리자 미디어 업로드: 이미지·비디오·오디오·문서별 최대 크기 한도 분리(`MAX_VIDEO_FILE_SIZE` 등). 기본 비디오 200MB.
- 관리자 글쓰기: 업로드 크기 초과·API 413 시 토스트 오류 표시, 미디어 모달에 최대 용량 안내 추가.
- `lib/upload-size-limit.js`: 클라이언트 번들에서 `node:path` 제거(500·hydration 경고 수정).
- 임베드 저장 형식: 새 임베드 삽입·라이브 편집·레거시 블록 변환 시 `:::embed` 대신 단독 URL 한 줄로 저장하도록 통일, 단독 URL 줄도 블록 설정 패널 대상으로 인식.
- 관리자 글쓰기: 라이브 모드 임베드를 URL 입력 카드 없이 즉시 프리뷰로 표시, 임베드·비디오·오디오·파일 카드 삭제 버튼과 방향키 이동·삭제·아래 줄 추가 키보드 조작 지원.
- 관리자 글쓰기: 라이브 모드 제목 Enter 시 현재 제목 저장 후 아래 빈 문단 추가, 원문 편집 상태로 전환되던 흐름 수정.
- 관리자 글쓰기: 게시물 상단 제목 Enter 시 소스 모드 강제 전환 제거, 라이브 모드 상단 스크롤·본문 첫 줄 포커스 보정.
## v1.4.0
- 콘텐츠 렌더러: `:::video`, `:::audio`, `:::file` fenced block 파싱과 `ProseVideo`·`ProseAudio`·`ProseFile` 카드 렌더링 연결.
- 관리자 글쓰기: 슬래시 명령에 비디오·오디오·파일 블록 템플릿 추가.
- 임베드: X/Twitter iframe 폭·높이·외곽 여백 보정, Mastodon 공개 게시물 `/embed` 렌더링과 postMessage 기반 자동 높이 조절 추가.
- 관리자 글쓰기: 라이브/스타일 모드의 `:::embed` 블록에 URL 입력 카드와 적용 미리보기 전환 버튼 표시.
- 관리자 글쓰기: `/video`, `/audio`, `/file` 슬래시 명령을 미디어 선택·업로드 모달과 연결해 업로드 후 URL 자동 채우기 지원.
- 콘텐츠 렌더러: 단독 `http(s)` URL 한 줄을 `:::embed` 블록과 동일하게 자동 임베드 렌더링.
- 미디어 라이브러리: 이미지 외 비디오·오디오·문서 파일 업로드와 목록 표시 지원.
## v1.3.9
- NAS 마이그레이션: `psql`이 while 루프 stdin을 소비해 001만 처리되던 `migrate-production-db.sh` 버그 수정.
## v1.3.8
- NAS 마이그레이션: `.env.production`이 없을 때 `.env` 또는 실행 중 DB 컨테이너 환경 변수로 동작하도록 `migrate-production-db.sh` 보정.
## v1.3.7
- NAS 마이그레이션: npm 없는 NAS 호스트에서도 실행 가능한 `scripts/migrate-production-db.sh` 추가.
- 운영 문서: `db:migrate:prod:*` 안내를 `sh scripts/migrate-production-db.sh` 기준으로 수정.
## v1.3.6
- DB 마이그레이션: `schema_migrations` 적용 이력 관리와 `db:migrate:prod`, `db:migrate:prod:status`, `db:migrate:prod:baseline` 명령 추가.
- 운영 보호: 기존 운영 스키마가 있는데 적용 이력이 없으면 001부터 자동 실행하지 않고 baseline 안내 후 중단.
## v1.3.5
- 관리자 로그인: 자동완성 값 동기화·제출 중만 버튼 비활성. 운영 HTTP에서 Secure 쿠키 미저장으로 로그인 루프되던 문제 수정. `server/utils/session-cookie.js`로 path `/`·`x-forwarded-proto` Secure 통일.
- 통계: `lib/analytics-shared.js` 분리로 클라이언트 `node:crypto` 오류 수정. 통계 조회 시작일 JS 계산으로 `date >= integer` 오류 수정.
- 관리자 대시보드: 상단 요약 한 줄·7일~12개월 차트·접속자 목록(게시물 제목·유지시간). `trends` 일자별 0 채움.
- 통계 보관: 일별 집계 누적 보관, 방문자 해시 32일 초과 정리, 실시간 세션 90초 TTL.
## v1.3.4
- 통계 확장: 체류시간·스크롤 구간(25/50/75/100%)·실시간 접속 세션. 마이그레이션 `031_analytics_engagement_and_realtime.sql`.
- `POST /api/analytics/heartbeat`, `GET /admin/api/analytics/realtime`. 로그인 사용자는 닉네임·아바타·현재 경로로 접속자 목록 표시.
- 관리자 대시보드: 현재 접속자·평균 체류·50% 스크롤·실시간 접속자 목록·인기 글 참여 지표 추가.
## v1.3.3
- 자체 최소 통계: 일별 익명 방문자 해시·사이트/게시물 일별 집계. 마이그레이션 `030_analytics_daily_stats.sql`. 원문 IP·User-Agent 미저장.
- `POST /api/analytics/pageview`, `plugins/site-analytics.client.js`(pageview·15초+50% 스크롤 read).
- 관리자 대시보드: 오늘/7일 방문·30일 조회·인기 게시물 Top 5. `GET /admin/api/analytics/summary`, `GET /admin/api/analytics/posts`.
## v1.3.2
- 스플래시: `SITE_BRAND_LOGO_TEXT` localStorage 사용 중단·레거시 키 제거. 스플래시 문구는 사이트 제목, 이미지는 `SITE_BRAND_LOGO_URL`만 캐시.
- 관리자 설정 내비: 타임존·메인 화면·어나운스 바·Import/Export·스팸 필터 아이콘 추가.
- 어나운스 바: 클라이언트에서 숨김 여부 확인 후 아래로 슬라이드 인. 닫기·7일간 보지 않기 시 위로 슬라이드 아웃 후 제거(깜빡임 방지).
- 어나운스 바: X는 이번 방문(세션)만 숨김, `7일간 보지 않기` 텍스트 버튼으로 localStorage 7일 스누즈.
## v1.3.1
- 스팸 필터: 가입 금지 닉네임(`signupBlockedUsernames`) 설정·저장. 기본 admin, master, zenn, sori, sori.studio. 회원가입·프로필 닉네임 변경 시 검사, `zenn은 사용할 수 없는 단어입니다.` 형식 안내. 마이그레이션 `029_site_settings_signup_blocked_usernames.sql`.
## v1.3.0
- 관리자 사이트 설정 좌측 내비: `AdminSettingsNavIcon`·`iconId` 슬롯 추가. 블로그 제목·설명에 type-cursor 아이콘 연결, 나머지는 placeholder 틀.
- 관리자 POST 설정: 읽기 모드에서도 수정일 표시를 비활성화 토글 UI로 표시(켜짐/꺼짐 텍스트 제거).
- 어나운스 바: `site_settings` 필드·마이그레이션 `028_site_settings_announcement.sql`. 공개 상단 배너(`SiteAnnouncementBar`·`SiteTopChrome`), 닫기 시 `localStorage`·설정 변경 시 재노출.
- 관리자 설정「어나운스 바」: 사용 토글·맞춤 설정(문구·선택 링크·배경색 프리셋 검정/흰/브랜드).
## v1.2.9
- 홈 상단: Ghost형 헤딩·구독 폼 제거. 사이트 설정「메인 화면」에서 커버 이미지(720px)·오버레이 제목·본문 설정. `HomeHero.vue`, 마이그레이션 `027_site_settings_home_cover.sql`.
- 메인 화면 설정: 커버 업로드 시 제목·본문이 리셋되지 않도록 업로드는 파일만·저장 버튼에서 이미지·텍스트 일괄 `PUT` 반영.
- 테마 깜빡임: head 인라인 스크립트로 `data-theme` 선적용. 로딩 스플래시(`app.html`·캐시된 사이트 로고).
- 관리자 글 목록: 휴지통 대신 more vert 행 메뉴(추천·추천 제거·삭제).
- 관리자 태그 관리: 메인·일반 태그 모두 more vert 메뉴(수정·전환·제외·삭제).
- 관리자 공통 `AdminRowMoreMenu`·`useAdminRowMenu`: 페이지·미디어 폴더·네비게이션 삭제 UI 통일. 태그 메뉴 항목 좌측 정렬 수정.
- 홈 Latest 피드: List(썸네일+본문)·Compact(텍스트만)·Cards(2열) 보기 구분. 메뉴 List/Compact 선택값과 레이아웃 일치. Default 클릭 시 Compact로 전환. Cards 상단 여백·테두리 클리핑 수정.
- 게시물 카드: 대표 이미지 없을 때 썸네일 영역에 제목 텍스트 플레이스홀더(`PostCardMedia`). 홈 Latest·태그·게시물 목록 공통.
- 슬래시 메뉴: 키보드 ↓ 이동 시 scrollIntoView+mouseenter 충돌로 하단 항목이 반복 선택되던 문제 수정.
- 라이브 토글: 제목 Enter→본문 포커스, ↑↓는 토글 내부만 이동(한글 조합·스크롤 점프 보정).
- 라이브 토글: `ContentMarkdownToggleEditor`로 제목·본문 인라인 편집. `ProseToggle` 펼침·접힘 애니메이션(그리드 전환).
- 라이브 코드 블록: Enter 줄바꿈·줄번호 반영 수정(`<br>` 읽기). 마지막 줄 ↓로 블록 이탈·다음 문단 삽입.
- 콜아웃 설정: 이모지 7종 프리셋 선택, 직접 입력 제거. 아이콘 토글 UI 정리.
- 코드 블록: `ProseCodeBlock.vue`로 라이브·공개 스타일 통일(`#15171a`, 줄번호 gutter). 라이브 호버 시 Language·줄번호 토글. 공개 화면 언어 라벨 옆 복사 버튼.
- 라이브 콜아웃: 아이콘 호버·클릭 시 설정 모달(이모지·배경색).
- 라이브 모드 코드 블록: `pre` 단일 편집 영역으로 공개 화면과 높이 맞춤, ↑↓는 블록 첫·마지막 줄에서만 밖으로 이동.
- 라이브 모드: `- `·`> ` 마커만 있는 줄도 목록·인용 블록으로 인식. 코드·콜아웃 본문 인라인 편집 추가.
- 슬래시 콜아웃 기본 삽입을 `:::callout emoji=💡 bg=blue` 형식으로 변경.
- 소스(작성) 모드 textarea에 `/` 슬래시 명령 추가(미리보기와 동일). 상단 마크다운 툴바 제거.
- 라이브·소스 슬래시: 기본 제목은 h2·h3·h4만 노출. h1은 `/h1` 검색 시에만 선택 가능(게시물 제목이 유일한 h1).
- 라이브 모드 슬래시: h2 등 명령 적용 후 `## ` 뒤로 포커스·커서 복원. Esc는 메뉴만 닫고 줄·`/…` 입력 유지(해당 줄 메뉴 재오픈 억제). Esc 시 줄 비우기로 글이 사라지던 문제 수정.
- 라이브 모드 슬래시 메뉴 Ghost 스타일: 아이콘+라벨만 표시, 호버·포커스 시 오른쪽 `/slug` 표시. `AdminSlashCommandIcon.vue` 추가.
- 라이브 모드 슬래시: 미디어 모달 Esc 닫기, ↑↓ 시 목록 scrollIntoView, 마우스·키보드 하이라이트 단일화.
- 라이브 모드 슬래시 명령: `/` 입력 시 메뉴, `/image`+Enter 이미지 삽입, ↑↓ 선택·Esc 취소. 메뉴 뷰포트 밖 넘침 시 위·좌우 보정.
- 라이브 모드 Cmd+A 후 Backspace: 전체 선택 삭제가 줄 병합으로 가로채지지 않도록 수정.
- Shift+Enter·문단 내 hard break 제거. Enter/Shift+Enter 모두 문단 분리. 마크다운 한 줄=한 문단. 소스 모드 Shift+Enter hard break 삽입 제거.
- 라이브 모드 ↑↓: 이전·다음 문단(블록) 이동, 같은 열 유지.
- 라이브 모드 ←→: 문단 끝 → 다음 블록 맨 앞, 문단 앞 → 이전 블록 맨 끝. ↑↓는 열 유지. Cmd+←→는 블록 내 맨 앞·맨 끝.
- 라이브 모드 병합(맨 앞 Backspace): 커서를 합쳐진 경계(이전 줄 본문 끝)에 둠.
- 라이브 모드 Enter(문단): 분리 후 blur가 이전 DOM 전체를 다시 저장하던 문제 수정(포커스 중 modelValue 동기화).
- contenteditable 줄바꿈(`<br>`·`<div>`) 읽기·커서 오프셋 계산 보강. `좋|아` 분리·복사 버그 수정.
- 라이브 모드 Enter(문단): 문장 중간 분리 시 빈 줄 없이 위·아래 두 줄만 생성.
- 라이브 모드 Enter(목록): 맨 앞·중간·끝 커서 위치별 분기. 중간은 항목 두 줄로 분리, 끝은 목록 블록 밖 빈 줄 삽입.
- 라이브 모드 Enter(인용): 맨 앞·중간 분리 시 `> ` 줄 분리, 끝은 `> ` 이어쓰기 유지.
- 라이브 모드 Backspace: 줄 맨 앞(내용 있음)에서 이전 줄 끝으로 병합. 빈 줄·원문 토글 순서 정리.
- `lib/markdown-live-edit.js`: `appendTextToMarkdownLine`, `getAppendTextForMerge` 추가.
- 패키지 버전 `1.2.9`로 갱신.
## v1.2.8
- 라이브 모드: 인용·목록 줄 단위 편집, `> `·`- ` 접두사 중복 표시 제거. 맨 앞 백스페이스로 마크다운 원문(`- 리스트 1` 등) 표시. Cmd+Shift+K 현재 줄 삭제.
- 라이브 모드 Cmd+E: contenteditable에서도 소스 모드 전환(capture 단계 리스너). `keydown.stop` 제거.
- 라이브 모드 편집 UI: 포커스 시 파란 보더·배경 제거(커서만), 호버는 연한 회색 배경만(포커스 중 호버 없음).
- 라이브 모드 Enter(인용·목록): commit+삽입을 한 번에 반영해 2번째 줄 Enter 시 텍스트 복사 방지. `>` 제거 후 Enter 시 일반 문단으로 이탈.
- 라이브 모드 Enter(목록): 다음 줄 `- `·`2. ` 자동 삽입 제거. 내용 있으면 빈 줄만 추가, 빈 마커 줄 Enter 시 문단 탈출. 인용은 `> ` 이어쓰기 유지.
- 순서 목록: 소스의 숫자(4., 27. 등)를 렌더·commit에 반영(자동 재번호 없음). 목록 마커 `--site-accent` 스타일.
- 라이브 모드 목록: 디스크 마커 세로 중앙 정렬(`items-center`). Enter·줄 삭제 후 포커스 유지(retry). 빈 줄 Backspace/Cmd+Shift+K 삭제.
- 목록 마커 열 너비 21px·오른쪽 정렬(숫자·디스크 공통, 본문 시작선 정렬).
- 빈 줄(spacer) Cmd+Shift+K 삭제. 줄 삭제 후 이전 줄 끝 포커스. 호버 배경 제거.
- 라이브 모드 raw: 원문 모드 Enter 시 브라우저 기본 줄바꿈 대신 아래 줄 삽입. 마커(`>`·`-`) 제거 시 일반 문단으로 저장. 목록 raw 시 불릿 숨김.
- 라이브 모드 Enter: 커서 뒤 텍스트 잘림 버그 수정(문단 끝에서 이전 줄 내용이 복사되지 않음). 끝 Enter 시 빈 줄 1개만 삽입.
- 제목·인용·목록: 블록 안 줄바꿈 대신 아래 새 블록/항목 삽입, 여백 축소.
- 라이브 모드 ↑↓·Cmd+←→: 블록 이동·블록 내 처음/끝(열 유지).
- 패키지 버전 `1.2.8`로 갱신.
## v1.2.7
- 라이브 모드: Enter 시 다음 문단 생성(빈 줄 삽입), Shift+Enter만 같은 문단 내 줄바꿈. 하단 클릭 영역으로 새 문단 추가. 빈 줄도 편집 가능.
- 라이브 모드 한글 IME: 조합 중 Enter는 compositionend 후 1회만 분리, blur 중복 commit·연속 split 방지.
- 소스 모드 전환 시 textarea 높이·줄 번호 거터 동기화 보강.
- 패키지 버전 `1.2.7`로 갱신.
## v1.2.6
- 관리자 미리보기 인라인 편집: 문단·제목·인용·목록 항목을 contenteditable로 편집, blur 시 마크다운 본문 반영(`block-content-change`).
- `lib/markdown-inline.js`, `ContentMarkdownEditableInline.vue` 추가. HTML↔인라인 마크다운 변환 공유.
- 패키지 버전 `1.2.6`으로 갱신.
## v1.2.5
- 관리자 미리보기 갤러리: 드래그 중 드롭 대상 셀에 주황 테두리·「여기로 이동」 오버레이 표시, 드래그 중 원본 셀 반투명 처리.
- 이미지 **파일명을 캡션으로 사용** 토글: 화면에는 이미지 아래 figcaption으로 표시, 저장은 `![](url "파일명")` 형식(레거시 `![파일명](url)` 호환).
- 미리보기 문단 클릭→작성 모드 전환은 제거(요청과 다름). 미리보기 그대로 편집(WYSIWYG)은 후속 작업.
- 패키지 버전 `1.2.5`로 갱신.
## v1.2.4
- 이미지 캡션: `ProseImage` caption prop, 갤러리 figcaption, 파일명 alt와 별도 표시. useAlt 파일명 비교 URI 디코딩 정규화.
- 관리자 미리보기: 갤러리 드래그 순서 변경(`interactive` + `gallery-reorder`).
- 패키지 버전 `1.2.4`로 갱신.
## v1.2.3
- 관리자 마크다운 에디터: textarea 내부 스크롤·`resize-y` 제거, 본문 높이 자동 확장·`admin-post-form__editor-scroll` 외부 스크롤만 사용, 줄 번호 거터 flex 정렬.
- 패키지 버전 `1.2.3`으로 갱신.
## v1.2.2
- 이미지 `useAlt` 판별: 대괄호 내용이 URL 파일명과 일치할 때만 파일명 대체 텍스트 모드로 처리(임의 문자열·레거시 표시문구와 분리).
- 미리보기 figcaption: 따옴표 캡션 우선, 레거시 `![표시문구](url)`만 대괄호 문구를 표시용으로 유지.
- 패키지 버전 `1.2.2`로 갱신.
## v1.2.1
- 관리자 블록 설정 패널: 게시물 설정 사이드바(420px) 오버레이 슬라이드, 이미지·갤러리·임베드 편집.
- 이미지: 캡션·대체 텍스트 분리, **파일명을 대체 텍스트로 사용** 토글(기본 끔), `lib/markdown-image.js`·`lib/markdown-block-context.js` 추가.
- 블록 패널 캡션·URL 입력 중 포커스 이탈로 패널이 닫히던 문제 수정.
- 공개 렌더: 갤러리 라이트박스 Esc·좌우 방향키, 캡션만 figcaption 표시.
- 패키지 버전 `1.2.1`로 갱신.
## v1.2.0
- 관리자 글 목록: 발행일 기준 정렬(`published_at` 우선, 없으면 `updated_at`), 총·추천·필터 표시 개수, 추천만 필터, 추천 글 별(★) 열.
- 관리자 글 슬러그: Post URL 미리보기 즉시 반영·저장 전 안내, 초안은 제목 연동 자동 슬러그(연한 표시), 발행·예약 글은 제목 변경 시 슬러그 고정(중복 409 예방).
- 예약·발행 시각: 달력·KST 클릭 영역 `showPicker` 연동.
- 이미지·갤러리: 캡션은 사용자 입력 시만 표시(`![](url "캡션")`), 대체 텍스트는 기본 비움·**파일명 사용** 토글 시 URL 파일명을 alt로 저장, 블록 설정 패널을 게시물 설정 사이드바 오버레이로 슬라이드, 갤러리 다중 선택 주황 테두리, 라이트박스 Esc·좌우 방향키.
- `lib/markdown-block-context.js`, `AdminEditorBlockPanel.vue` 추가.
- 패키지 버전 `1.2.0`으로 갱신.
## v1.1.19
- 관리자 글쓰기: 작성/미리보기 토글을 툴바에서 헤더(Update 왼쪽)로 이동, 미리보기 시 툴바 숨김, 미디어 모달 파일명 검색.
- 발행 글 Update 시 `publishedAt`이 현재 시각으로 덮이지 않도록 보존 로직 추가.
- 관리자 글 설정: 검색엔진 노출 iOS형 토글(`noindex` 반전).
- 사이트 설정: 기타·POST 카드 편집/저장/취소 분리, 변경 시에만 저장 활성, POST 설정 토글 UI.
- 본문: 인용문 핑크 보더·배경, 인라인 코드 `#252525`, 목록·구분선 여백 정리.
- 패키지 버전 `1.1.19`로 갱신.
## v1.1.18
- 마크다운 에디터: 이미지 너비 선택 제거, 툴바 `이미지`·`갤러리` 단일 버튼 + 미디어 모달(라이브러리 기본·업로드 탭).
- 사이트 설정 `showPostUpdatedAt`(POST 설정 > 수정일 표시), 마이그레이션 `026_site_settings_show_post_updated_at.sql`.
- 관리자 글 목록 발행일 시·분 표시, 설정 ON 시 발행 후 수정 줄 보조 표시. 공개 글 상세 동일.
- `formatPostDateTime`, `wasPostUpdatedAfterPublish` 추가.
- 패키지 버전 `1.1.18`로 갱신.
## v1.1.17
- 관리자 글: 제목 없음은 DB/API만 플레이스홀더, 폼·목록은 빈 제목·임시 슬러그는 제목 입력 시 자동 슬러그.
- 초안 Publish 모달 기본값 발행, Unpublish/Unschedule 확인 화면 추가, 발행·예약 시각 날짜/시간 분리 입력.
- 패키지 버전 `1.1.17`로 갱신.
## v1.1.16
- 게시물 `private` 제거: DB `025_posts_status_no_private.sql`, API·폼·목록을 `published`/`draft`+예약 시각만 사용.
- 신규 글: 마운트 시 `d`+24hex 임시 슬러그, 빈 제목은 저장 시 `(제목 없음)` 보정.
- 발행·예약 글: 사이드바만 바꿔도 자동 저장하지 않음, 툴바는 서버 반영 상태 기준으로 `Update` 유지. 발행 모달 세로 중앙·도구막대 `Preview` 제거.
- 패키지 버전 `1.1.16`으로 갱신.
## v1.1.15
- 관리자 신규 글: 초안·비공개 시 `POST` 디바운스 자동 저장 후 편집 URL로 교체, 라우트 이탈 직전 미전송 초안 플러시.
- 관리자 글 편집: 미저장 이탈 모달은 즉시 발행·예약 미저장에만 적용(초안·비공개는 제외).
- 관리자 글 목록: 헤더 한 줄에 필터를 «새 글» 왼쪽에 배치.
- 패키지 버전 `1.1.15`로 갱신.
## v1.1.14
- 관리자 글쓰기: Ghost형 툴바(영문 상태·Publish/Update/Unpublish/Unschedule·색·호버), 초안만 서버 디바운스 자동 저장, 발행·예약은 Update로만 반영, 로컬 자동 저장 복원 UI 제거.
- 패키지 버전 `1.1.14`로 갱신.
## v1.1.13
- 상단 네비: 하위 1뎁스만 허용(서버 검증·공개 트리 조립·관리자 드래그·이미 하위가 있는 항목의 하위 편입 금지).
- `navigation_items.location`에 `recommended` 추가(마이그레이션 `024_navigation_recommended_location.sql`), 관리자 메뉴에 추천 사이트 탭·공개 API `recommended`·우측 사이드 카드 목록.
- 외부 링크 파비콘 표시용 `lib/external-favicon-url.js`(Google `s2/favicons` 프록시 URL).
- 패키지 버전 `1.1.13`로 갱신.
## v1.1.12
- 관리자 상단 메뉴: 드롭 구역을 파란 끝선(형제 앞·뒤)·앰버 링(하위)과 개요 열 캡션으로 구분, 개요 번호를 `2.1`형 계층 표기로 변경·라벨 들여쓰기 확대.
- 패키지 버전 `1.1.12`로 갱신.
## v1.1.11
- 공개 사이드바 1차 네비: 부모·하위 사이 `mt-2` 간격, 비활성 세로 표시를 `color-mix(in srgb, var(--site-line) 88%, var(--site-panel) 12%)` 톤으로 정리.
- 관리자 상단 메뉴: `하위` 버튼 제거, `flattenNavigationEditorWrappers` 단일 테이블+행 위·중·아래 드롭으로 순서·부모 자유 변경, `AdminNavPrimaryBranch.vue` 제거.
- 패키지 버전 `1.1.11`로 갱신.
## v1.1.10
- 관리자 `/admin/settings`를 Ghost형 전체 화면으로 재구성(좌측 검색·앵커 내비·우측 스크롤 스파이, X·ESC 닫기, 타임존·어나운스·Import/Export·스팸 섹션은 플레이스홀더).
- 설정 경로에서 관리자 기본 사이드바를 숨기고 문서 스크롤 잠금(`admin-settings-document`)을 적용.
- 관리자 `/admin/settings`에서 상단 헤더를 제거하고 우측 상단 고정 닫기만 두며, 사이드·본문 열을 `max-w-[1120px]` 래퍼로 중앙 정렬·본문 카드 폭은 `max-w-[760px]`로 Ghost에 가깝게 맞춤.
## v1.1.9
- 관리자 사이드바 상단에 대시보드(비활성 표시)·사이트 보기(`NUXT_PUBLIC_SITE_URL` 기준 새 창)·콘텐츠 메뉴 구분 여백 추가.
- 관리자 글 목록에 상태·태그·최신순/오래된순 필터 추가.
- 관리자 글 목록 상태 표시를 배지에서 단순 텍스트 색상 기준으로 정리하고 제목 옆 댓글 수 표시 추가.
- 게시물 추천 여부(`is_featured`) 저장 필드와 글쓰기 사이드바 추천 토글 추가.
- 홈 Featured 영역을 추천 글이 있을 때만 표시하고, 최신 글의 번개 표시는 실제 추천 글에만 나오도록 수정.
- 공개 목록·상세의 댓글 수 표시를 API 댓글 집계값 기준으로 정리.
- 공개 헤더의 이미지 로고 주석 코드를 제거하고 사이트 이름 텍스트만 표시하도록 정리.
- 왼쪽 사이드바 Authors 영역과 오른쪽 사이드바 About 영역을 비공개 처리.
- 패키지 버전 `1.1.9`로 갱신.
## v1.1.8
- 사이트 로고·파비콘 고유 파일명 접미사를 년월+랜덤 문자열 형식으로 간소화.
- 관리자 태그 관리 화면의 `태그 추가` 버튼을 일반 태그 섹션 헤더 오른쪽으로 이동.
- 메인 태그 `정렬 저장` 버튼을 제거하고 드래그 드롭 직후 자동 저장되도록 수정.
- 메인 태그 순서 자동 저장 중 추가 드래그를 막고 저장 상태를 표시하도록 정리.
- 패키지 버전 `1.1.8`로 갱신.
## v1.1.7
- 사이트 로고 업로드가 고정 `/uploads/system/logo.webp` 덮어쓰기 대신 고유 파일명 URL을 저장하도록 수정.
- 사이트 파비콘도 로고와 같은 고유 접미사 파일명으로 생성해 브라우저 캐시로 이전 이미지가 남는 문제를 완화.
- 미디어 라이브러리 사용 현황에 사이트 설정 로고·파비콘 참조를 포함하고, 현재 사용 중인 시스템 이미지는 파일명 변경·삭제가 잠기도록 수정.
- 미디어 라이브러리 프로필/사이트 설정 이미지 사용처 추적 todo 정리.
- 패키지 버전 `1.1.7`로 갱신.
## v1.1.6
- 관리자 태그 관리 화면에서 일반 태그를 검색 전에도 전체 목록으로 확인할 수 있도록 수정.
- 일반 태그 목록을 배지형 flex-wrap UI로 표시하고, 최근 사용/수정 태그가 앞에 오도록 정렬.
- 일반 태그 배지 목록에 최근 사용순·많이 사용순·이름순 정렬 전환을 추가.
- 일반 태그 배지에서 이름·슬러그 로컬 필터, 메인 태그 전환, 삭제를 바로 수행하도록 정리.
- 관리자 태그 추가 화면에서 새 태그는 일반 태그로 유지하되, 생성 후 태그 관리 화면에서 누락처럼 보이지 않게 정리.
- 패키지 버전 `1.1.6`으로 갱신.
## v1.1.5
- 운영 빌드에서 런타임 업로드 파일을 `/app/public/uploads` 볼륨에서 직접 제공하는 `/uploads/**` 서버 라우트 추가.
- Docker 운영 이미지의 `.output/public` 빌드 시점 스냅샷에 의존하지 않고 새로 업로드한 로고·게시물 이미지·회원 썸네일이 즉시 표시되도록 수정.
- 패키지 버전 `1.1.5`로 갱신.
## v1.1.4
- 관리자 멤버 썸네일 업로드가 게시물용 `/uploads/posts`가 아니라 회원 전용 `/uploads/members/avatars` 경로를 사용하도록 수정.
- 회원 썸네일 업로드 검증·WebP 변환·1:1 크롭 로직을 공통 유틸로 분리.
- 관리자 멤버 편집 전용 썸네일 업로드 API와 새 멤버 생성 전 썸네일 사전 업로드 API 추가.
- 관리자 회원 기본 정보 저장에서 기존 회원 전용 썸네일 URL이 교체·제거되면 `media_metadata` 연결을 분리하도록 정리.
- 태그 목록 카드 그리드에 사용자 수정 `px-6` 반영.
- 패키지 버전 `1.1.4`로 갱신.
## v1.1.3
- 왼쪽 사이드바 1차 네비·태그 카테고리·테마 점 행 호버를 `site-sidebar-nav-row`로 분리하고, 라이트 테마에서 배경 `#F7F4EF`로 완화. 다크 테마는 기존 `color-mix` 패널 호버 유지.
- 패키지 버전 `1.1.3`으로 갱신.
## v1.1.2
- 태그가 없는 게시물에 기본값으로 보이던 `POST` 표기 제거: 공개 상세·홈 Latest·게시물 목록 카드에서 태그가 있을 때만 배지·메타에 표시.
- 패키지 버전 `1.1.2`로 갱신.
## v1.1.1
- 공개 본문 `ContentMarkdownRenderer` 문단에서 `leading-7`을 제거하고 `text-base`(16px)만 적용.
- 패키지 버전 `1.1.1`로 갱신.
## v1.1.0
- 관리자 글 작성 폼 제목 입력 타이포를 `text-5xl`에서 `text-3xl`로 조정.
- 공개 본문 `ContentMarkdownRenderer` 문단을 `text-base`·`leading-7` 기준으로 조정(기존 `text-[15px] leading-4` 대비 크기·행간 정리).
- `ProseHeading`에서 제목 블록 상단 `mt-12` 제거로 제목·본문 간 세로 리듬 정리.
- 패키지 버전 `1.1.0`으로 갱신.
## v1.0.19
- 관리자 `AdminMarkdownEditor`에서 Shift+Enter가 보이지 않는 `공백 2개 + \\n` 대신 줄끝 백슬래시 hard break(`\\ + 줄바꿈`)를 삽입하도록 수정.
- 공개 본문/관리자 미리보기 공통 `ContentMarkdownRenderer`가 줄끝 백슬래시 hard break와 기존 공백 2개 hard break를 모두 같은 문단 안 줄바꿈으로 렌더링하도록 보강.
- 패키지 버전 `1.0.19`로 갱신.
## v1.0.18
- 공개 본문/관리자 미리보기 공통 `ContentMarkdownRenderer`가 내용 없는 빈 줄을 다시 spacer 블록으로 렌더링해 여러 줄을 비우면 비운 줄 수만큼 공백이 보이도록 수정.
- 관리자 `AdminMarkdownEditor` 미리보기 모드에서 툴바를 숨기도록 수정.
- 관리자 미리보기 패널의 보더·라운드·흰 배경 카드 처리를 제거.
- 작성 모드 줄 번호 거터의 스크롤바를 숨기도록 정리.
- 패키지 버전 `1.0.18`로 갱신.
## v1.0.17
- 관리자 `AdminMarkdownEditor` 작성 영역의 외곽 보더와 배경 카드 처리를 제거.
- 작성 영역 줄 번호 거터를 본문 textarea 바깥의 absolute 영역으로 분리하고 활성 줄 액센트 배경을 제거.
- 일반 Enter는 브라우저 기본 단일 줄 이동으로 되돌리고, Shift+Enter만 마크다운 hard break(`공백 2개 + \\n`)로 저장하도록 수정.
- 공개 본문/관리자 미리보기 공통 `ContentMarkdownRenderer`가 hard break 행만 같은 문단 안 줄바꿈으로 묶고, 일반 줄은 각각 문단으로 렌더링하도록 정리.
- 문단과 제목 하단 기본 간격을 10px 기준으로 조정.
- 패키지 버전 `1.0.17`로 갱신.
## v1.0.16
- 관리자 `AdminMarkdownEditor`에서 일반 Enter는 새 문단(`\\n\\n`), Shift+Enter는 같은 문단 안 줄바꿈(`\\n`)으로 입력되도록 수정.
- `Cmd/Ctrl+E`로 미리보기에서 작성 모드로 돌아올 때 기존 커서 위치와 스크롤을 복원하도록 보강.
- 공개 본문/관리자 미리보기 공통 `ContentMarkdownRenderer`가 연속 텍스트 줄을 한 문단으로 묶고, 단일 줄바꿈은 `<br>`, 빈 줄은 문단 경계로 렌더링하도록 정리.
- 본문 문단 하단 간격을 24px 기준으로 조정.
- 패키지 버전 `1.0.16`으로 갱신.
## v1.0.15
- 공개 본문/관리자 미리보기 공통 `ContentMarkdownRenderer`가 빈 줄을 버리지 않고 spacer 블록으로 렌더링하도록 수정.
- 레거시 빈 문단 마커(`<!--sori:blank-paragraph-->`)도 동일한 spacer 블록으로 표시하도록 정리.
- 패키지 버전 `1.0.15`로 갱신.
## v1.0.14
- 관리자 게시물/페이지 입력 스키마에서 레거시 블록 배열·객체 본문 값을 저장용 마크다운 문자열로 정규화하도록 보강.
- `AdminMarkdownEditor`와 `AdminPostForm`에서 기존 자동 저장본 또는 레거시 블록 본문을 복원할 때 마크다운 문자열로 변환하도록 수정.
- 공통 `normalizeMarkdownContent` 유틸 추가.
- 패키지 버전 `1.0.14`로 갱신.
## v1.0.13
- 관리자 `AdminMarkdownEditor`에 HTML 클립보드 붙여넣기 기본 변환을 추가해 외부 블로그/웹 문서를 붙여넣을 때 제목·문단·목록·링크·굵게·기울임·이미지를 마크다운 조각으로 정리.
- 작성 모드에서 커서가 이미지 줄 또는 `:::gallery` 블록 안에 있을 때 현재 미디어 블록 편집 패널을 표시하고 alt·URL·너비 수정, 갤러리 순서 변경·삭제·이미지 추가를 지원.
- 관리자 `AdminMarkdownEditor`에서 `Cmd/Ctrl+E`로 작성/미리보기 모드를 전환하도록 변경하고, 관리자 미리보기의 본문 색상 변수를 밝은 배경 기준으로 고정.
- 패키지 버전 `1.0.13`으로 갱신.
## v1.0.12
- 관리자 `AdminMarkdownEditor` 작성 모드에 왼쪽 줄 번호 거터(`\\n` 기준 논리 줄)와 현재 줄 배경 강조 추가, textarea와 거터 세로 스크롤 동기화.
- 패키지 버전 `1.0.12`로 갱신.
## v1.0.11
- 관리자 글 본문 에디터를 블록형 `AdminBlockEditor`에서 Markdown-first `AdminMarkdownEditor`로 교체.
- 새 에디터에 textarea 기반 범위 선택·복사/붙여넣기, 작성/미리보기 전환, 마크다운 툴바, 이미지·갤러리 업로드 및 미디어 라이브러리 삽입 추가.
- 공개 본문 렌더러에 굵게, 기울임, 인라인 코드, 링크 인라인 마크다운 표시 추가.
- 패키지 버전 `1.0.11`로 갱신.
## v1.0.10
- 관리자 `AdminBlockEditor.vue`를 저장소 태그 `v1.0.5` 시점과 동일한 내용으로 복원(다중 줄·마크다운 붙여넣기 분할, Cmd/Ctrl+A 전체 MD 복사 안내, 블록 단위 범위 선택 등 v1.0.6 이후 에디터 UX 변경 제거). 동작 불만에 따른 되돌림.
- 패키지 버전 `1.0.10`으로 갱신.
## v1.0.5
- Docker 운영 이미지에서 빌드 시점 `runtimeConfig`가 비어도 컨테이너 런타임 환경 변수(`DATABASE_URL`, `ADMIN_EMAIL`, `ADMIN_PASSWORD`, `MEMBER_SESSION_SECRET`, Resend 설정)를 우선 읽도록 수정.
- 서버 런타임 환경 변수 조회 유틸 추가.
- 패키지 버전 `1.0.5`로 갱신.
## v1.0.4
- 최초 관리자 부트스트랩 기준을 전체 사용자 수가 아니라 owner/admin 존재 여부로 변경.
- owner/admin이 없는 상태에서 `ADMIN_EMAIL`과 같은 일반 회원이 이미 있으면 해당 회원을 owner로 승격하고 `ADMIN_PASSWORD`로 비밀번호를 갱신하도록 수정.
- 패키지 버전 `1.0.4`로 갱신.
## v1.0.3
- NAS 등에서 `db/migrations` 바인드 마운트 권한 부족 시 `docker-entrypoint-initdb.d` Permission denied로 DB 컨테이너가 재시작하는 경우를 배포 문서에 정리.
- `docker-compose.yml`에 동일 이슈용 주석 추가.
- 패키지 버전 `1.0.3`으로 갱신.
## v1.0.2
- 운영 DB가 비어 있을 때 `/admin/login`에서 `ADMIN_EMAIL`/`ADMIN_PASSWORD`로 최초 owner 계정을 생성하도록 수정.
- 배포 문서의 `.env.production` 생성 명령과 최초 관리자 생성 기준 정리.
- 배포 문서에 Docker 컨테이너 `Restarting` 루프 시 로그 확인 절차 추가.
- 패키지 버전 `1.0.2`로 갱신.
## v1.0.1
- Docker Compose 기본 네트워크 주소 풀 충돌을 피하기 위해 전용 브리지 네트워크와 `DOCKER_SUBNET` 설정 추가.
- 배포 문서에 NAS Docker 네트워크 충돌 시 `DOCKER_SUBNET` 변경 기준 추가.
- 패키지 버전 `1.0.1`로 갱신.
## v1.0.0
- 운영 환경에서 `DATABASE_URL` 누락 시 샘플 콘텐츠 fallback 대신 즉시 실패하도록 수정.
- 회원 세션 서명 비밀값을 `ADMIN_PASSWORD` fallback 없이 `MEMBER_SESSION_SECRET` 필수 사용으로 분리.
- JavaScript 문법 점검 스크립트(`scripts/check-js-syntax.js`)와 `lint`·`test`·`verify` npm 스크립트 추가.
- `npm audit fix`로 Nitro 취약점 권고를 반영하고 취약점 0건 확인.
- Docker compose 설정 검증과 Docker 앱 이미지 빌드 검증 진행.
- `.env.production`의 `MEMBER_SESSION_SECRET` 설정 여부 확인 후 배포 todo 정리.
- 운영 시작 기준 버전 `1.0.0`으로 갱신.
## v0.0.121
- 게시글 작성 본문 위 자동 저장 안내 배너를 제거하고, 툴바 상태 문구 옆에 복원·무시 버튼을 두도록 변경.
- 패키지 버전 `0.0.121`로 갱신.
## v0.0.120
- 발행 모달 설정을 행 단위 접기/펼침으로 정리하고, 접힌 상태에서는 현재 선택값만 표시하도록 변경.
- 발행 모달에 Ghost와 동일한 SVG(게시 형태·펼침 화살표·발행 시점 시계)를 적용하고 본문·헤더·CTA 문구를 한글로 통일.
- 발행 설정 영역의 외곽 상하 보더를 제거하고 행 사이 구분선만 유지하도록 조정.
- 발행 모달 본문 영역을 가로 중앙 정렬(`max-w` 컬럼)로 맞춤.
- 패키지 버전 `0.0.120`으로 갱신.
## v0.0.119
- 게시물 저장 버튼 클릭 시 고스트 스타일의 전체 화면 발행 모달을 열도록 변경.
- 발행 모달에서 뉴스레터 옵션을 제거하고, 상태(발행/초안/비공개)를 버튼식으로 선택하도록 추가.
- 발행 모달에서 발행 시점(즉시/예약) 버튼 선택과 예약 시각 입력을 지원하도록 추가.
- 발행 모달의 `Continue, final review →` 확정 시 실제 저장/발행이 수행되도록 연결.
- 관리자 블록 에디터 콜아웃에 Emoji ON/OFF, 이모지 프리셋 선택, 배경 프리셋 선택 기능 추가.
- 콜아웃 마크다운 저장 형식을 `:::callout emoji=... bg=...` 메타 포함 형태로 확장.
- 공개 본문 콜아웃 렌더러에 이모지 표시/숨김과 배경 프리셋 렌더링 연결.
- 공개 콜아웃 카드 외부 여백을 상단 중심(`mt-8`)으로 조정.
- 관리자 콜아웃 편집 UI를 카드 내부에서 분리해 우측 고정 설정 패널로 이동하고, 편집 카드가 공개 렌더와 동일하게 보이도록 정리.
- 콜아웃 카드 보더를 제거해 Ghost 톤으로 정리하고, 콜아웃 설정 패널을 블록 옆 위치로 이동.
- 콜아웃 이모지 설정을 고정 프리셋 버튼만 사용하지 않고 입력 팝업(직접 입력/붙여넣기 + 빠른 선택) 방식으로 확장.
- 콜아웃 본문 왼쪽 이모지 버튼에서 이모지 입력 팝오버를 직접 여는 흐름으로 정리.
- 배경색은 컬러 버튼 클릭 시에만 팔레트 팝오버가 열리도록 단순화하고, 텍스트 색상을 관리자 화면에서 고정 진한 톤으로 보정.
- 콜아웃 이모지 입력을 가변 길이 contenteditable에서 단일 이모지 입력 필드로 정리하고, 첫 그래프림만 반영하도록 보정.
- 공개 콜아웃의 이모지·텍스트 정렬을 `items-center` 기준으로 조정해 관리자 편집 카드와 높이 체감을 맞춤.
- 콜아웃 이모지 입력 필드에 한글 IME 조합 종료 시점 반영을 추가해 `가` 입력 시 자모 분리 대신 완성형 문자로 저장되도록 보정.
- 관리자 블록 에디터에서 Enter 등 키보드 입력 직후 hover 강조를 잠시 비활성화하고, 마우스 이동 시 hover가 다시 동작하도록 조정.
- 키보드 우선 모드에서 블록 왼쪽 핸들(세로 마커) hover 표시도 함께 비활성화해, 포인터가 다른 문단 위에 있어도 현재 입력 문맥을 유지하도록 보정.
- 블록 에디터 슬래시 입력 상태에서 Enter 처리 조건을 보정해, `/` 또는 `//` 입력 상태에서는 엔터가 일반 줄바꿈/다음 문단 생성으로 동작하도록 수정.
- 한글 IME 조합 중 `/제목` 입력 뒤 Enter 시 조합 종료 직후 슬래시 명령이 바로 적용되도록 pending 명령 처리 추가.
- 빈 문단 삭제 동작 이후 콜아웃이 일반 문단으로 변환되는 경로를 차단하기 위해 Enter의 빈 블록 기본 문단 전환 대상에서 콜아웃을 제외.
- 한글 IME 조합 종료 직후 슬래시 메뉴가 늦게 뜨는 문제를 줄이기 위해 조합 종료 동기화를 즉시+지연 2회 수행하도록 보정.
- 게시물 상세에서 본문과 댓글 섹션 사이 간격을 Ghost 기준 `48px`(`mt-12`)으로 조정.
- 이미지/갤러리 블록을 생성만 하고 사용하지 않은 상태로 다른 블록으로 이동하면 해당 미사용 구조형 블록을 자동 정리하도록 보정.
## v0.0.118
- 관리자 게시글 저장 버튼을 변경사항이 있을 때만 활성화하도록 수정.
- 관리자 게시글 수정 삭제 버튼을 기본 중립 톤, hover 시 위험 색상 강조로 조정.
- 관리자 게시글 태그 배지 삭제 버튼을 SVG 아이콘으로 교체하고 정렬 보정.
- 패키지 버전 `0.0.118`로 갱신.
## v0.0.117
- 관리자 글쓰기 갤러리 미디어 선택을 복수 선택 후 확인 적용 방식으로 변경.
- 관리자 갤러리 블록의 이미지 수에 따라 1개는 전체 너비, 2개는 2열, 3개 이상은 3열로 표시하도록 수정.
- 관리자 갤러리 블록 이미지 드래그 순서 변경과 삽입 위치 표시 추가.
- 패키지 버전 `0.0.117`로 갱신.
## v0.0.116
- 관리자 게시글 제목 입력에서 한글 조합 중 Enter가 본문으로 마지막 글자를 넘기지 않도록 IME 조합 상태 가드 추가.
- 관리자 게시글 목록 태그 표시를 쉼표 구분 텍스트에서 읽기 전용 배지 목록으로 변경.
- 패키지 버전 `0.0.116`으로 갱신.
## v0.0.115
- 사용자 설정 화면을 좁은 공개 본문 폭에 맞춰 요약 영역 상단, 프로필·활동 영역 하단 구조로 재배치.
- 사용자 설정 비밀번호 변경·회원 탈퇴 모달 입력 필드 보더가 보이도록 정리.
- 관리자 사이트 설정에서 관리자 프로필·관리자 비밀번호 변경 섹션 제거.
- 관리자 사이트 설정에 1:1 로고 이미지 업로드와 파비콘 생성 기능 추가.
- 사이트 설정 로고 URL·파비콘 URL 저장 컬럼 마이그레이션(`022_add_site_logo_urls.sql`) 추가.
- 공개 헤더와 오른쪽 사이드바에 이미지 로고 표시를 연결하고 파비콘 head 링크를 추가.
- 패키지 버전 `0.0.115`로 갱신.
## v0.0.114
- 관리자 하단 사용자 메뉴의 `내 프로필` 경로를 사용자 설정에서 관리자 멤버 편집 화면으로 변경.
- 관리자 멤버 편집 설정 메뉴에 비밀번호 직접 변경과 멤버 삭제 모달 추가.
- 사용자 설정 화면을 관리자 멤버 편집과 같은 요약/본문 구조로 재정리.
- 사용자 설정의 비밀번호 변경과 회원 탈퇴를 설정 메뉴 모달로 분리.
- 로그인 시 이전 로그인 시각/IP를 보존하는 `021_add_member_previous_login.sql` 마이그레이션 추가.
- 회원 프로필 API에 가입일, 이전 로그인, 댓글 수 정보를 추가.
- 패키지 버전 `0.0.114`로 갱신.
## v0.0.113
- 관리자 미저장 변경사항 모달을 화면 상단 40px 여백 위치로 조정.
- 관리자 멤버 상세 폼에서 썸네일 URL 입력 필드 제거.
- 관리자 멤버 상세 요약 썸네일에 hover 등록·변경·삭제 UI 추가.
- 관리자 멤버 목록 상태 표시를 배지에서 일반 텍스트로 변경.
- 관리자 멤버 목록에 이름·이메일·레이블·상태·최근 접속·가입일 조건 필터 추가.
- 패키지 버전 `0.0.113`으로 갱신.
## v0.0.112
- 관리자 멤버 폼 본문을 3분할 그리드로 변경하고 요약 1fr, 입력 영역 2fr 비율로 조정.
- 관리자 공통 미저장 변경사항 이탈 확인 모달 추가.
- 관리자 게시글 작성/수정 화면에 미저장 변경사항 라우트 이탈 확인과 브라우저 이탈 기본 확인 연결.
- 관리자 멤버 추가/수정 화면에 미저장 변경사항 라우트 이탈 확인과 브라우저 이탈 기본 확인 연결.
- 이탈 승인 시 게시글 로컬 자동 저장본 삭제 처리 추가.
- 패키지 버전 `0.0.112`로 갱신.
## v0.0.111
- 관리자 멤버 상세 화면(`/admin/members/:id`) 추가.
- 관리자 멤버 추가 화면(`/admin/members/new`) 추가.
- 멤버 목록 행 클릭 시 상세 화면으로 이동하도록 수정.
- 멤버 기본 정보 저장 API(`GET/PUT /admin/api/members/:id`, `POST /admin/api/members`) 추가.
- 회원 레이블·관리자 노트 저장 컬럼 마이그레이션(`020_add_member_admin_fields.sql`) 추가.
- 멤버 폼에 썸네일 URL, 이름, 이메일, 레이블, 관리자 노트, 기존 회원 활동 요약 표시.
- 패키지 버전 `0.0.111`로 갱신.
## v0.0.110
- 관리자 멤버 목록을 Ghost형 테이블 구조로 재정리.
- 멤버 이름 아래 이메일, 가입일 아래 최근 활동을 함께 표시하도록 수정.
- 멤버 목록에서 권한 변경 선택·저장 UI 제거.
- 멤버 검색 입력과 멤버 추가 버튼 추가.
- 뉴스레터 Open rate 대체 컬럼으로 댓글 작성 개수 표시 유지.
- 패키지 버전 `0.0.110`으로 갱신.
## v0.0.109
- 관리자 사이드바 `메뉴` 항목을 `네비게이션`으로 변경하고 전용 아이콘 적용.
- 관리자 게시글 아이콘을 Ghost형 편집 아이콘으로 교체.
- 관리자 멤버 메뉴 우측에 총 멤버 수 표시 추가.
- 관리자 로그아웃을 상단 메뉴에서 제거하고 하단 사용자 드롭다운으로 이동.
- 관리자 하단에 사용자 썸네일 트리거와 설정 아이콘 추가.
- 패키지 버전 `0.0.109`로 갱신.
## v0.0.108
- 관리자 사이드바 너비를 Ghost 기준 320px로 조정.
- 관리자 우측 캔버스가 기본 화면 높이와 배경색을 유지하도록 `admin-layout__main` 배경·여백 수정.
- 관리자 사이드바 페이지·미디어·설정 아이콘 추가.
- 패키지 버전 `0.0.108`로 갱신.
## v0.0.107
- 관리자 사이드바를 밝은 Ghost형 톤으로 조정.
- 관리자 `글` 메뉴명을 `게시글`로 변경하고 게시글·태그·멤버 메뉴 아이콘 추가.
- 게시글 메뉴 우측 `+` 버튼으로 `/admin/posts/new` 바로 진입 추가.
- 패키지 버전 `0.0.107`로 갱신.
## v0.0.106
- 태그 상세(`/tag/:slug`) 헤더와 게시물 목록을 공통 `site-section-header`·`site-section-body` 패딩 구조로 맞춤.
- 태그 상세 게시물 목록의 중복 구분선을 정리.
- 패키지 버전 `0.0.106`으로 갱신.
## v0.0.105
- `005_add_navigation_items.sql`: `(location,label,url)` 유니크 제약 제거 후에도 기본 메뉴가 재삽입되지 않도록 `NOT EXISTS` 기반 시드로 수정.
- `019_dedupe_navigation_items.sql`: 반복 마이그레이션 실행으로 생긴 네비게이션 중복 행 정리 및 중복 방지 인덱스 추가.
- 로컬 개발 DB 네비게이션 중복 행 정리.
- 패키지 버전 `0.0.105`로 갱신.
## v0.0.104
- 관리자 API 요청마다 현재 DB 권한 재확인 미들웨어 추가.
- 회원 탈퇴 시 마지막 `owner` 계정 삭제 차단 및 관리자 세션 쿠키 정리.
- 최초 회원 생성 시 `users` 테이블 잠금으로 동시 가입 owner 판정 안정화.
- 이메일 OTP 발송 실패 시 방금 만든 챌린지 삭제, 발송 성공 후 이전 pending 챌린지 정리.
- 본문 북마크·임베드 외부 링크를 `http(s)` URL로 제한.
- 패키지 버전 `0.0.104`로 갱신.
## v0.0.103
- `docs/map.md`: 관리자 메뉴 관리 행 설명에서 제거된 마이그레이션 안내 문구 반영.
## v0.0.102
- `AdminBlockEditor`: 빈 단락은 HTML 주석 마커로 직렬화·복원, 슬래시 메뉴 하이라이트·스크롤·긴 목록 `max-h`·블록 경계에서 위/아래 방향키로 인접 블록 이동.
- `ContentMarkdownRenderer`: 동일 마커 줄을 빈 단락으로 표시.
- `SiteHeader`: 검색 열기 버튼에 `min-w-[470px]`(md 이상)로 최소 폭 고정.
- `pages/admin/navigation`: 상단 마이그레이션 안내 문단 제거.
## v0.0.101
- `server/utils/navigation-tree.js` `buildPublicPrimaryTree`: 평면 `primary`에서 **동일 id 중복 제거**(정렬 후 첫 행 유지), **유효 부모 아래에 붙은 항목은 루트에서 제외**해 사이드바에 항목이 두 번 보이던 현상 방지.
## v0.0.100
- `.env.example`·`docs/deploy.md`·`docs/spec.md`: **`EMAIL_OTP_PEPPER` 의미**(OTP 해시용 서버 비밀, 긴 난문자열 권장·미설정 시 `MEMBER_SESSION_SECRET` 사용) 문구 보강.
## v0.0.99
- `SiteHeader`: 헤더 내부 `grid-cols-3`로 검색 패널 **중앙 열 정렬**(Ghost류 레이아웃).
- Resend 기반 **이메일 OTP**: 마이그레이션 `018_email_otp_challenges.sql`, `POST /api/auth/email-otp/request`, `POST /api/auth/password-reset/confirm`, `signup`·`bootstrap-status` 연동.
- `pages/forgot-password.vue`, `signin`에서 비밀번호 찾기 링크. `getUserByEmail`·로그인 이메일 **대소문자 무시** 조회.
- `nuxt.config` `runtimeConfig`: `resendApiKey`, `resendFromEmail`, `emailOtpPepper`.
## v0.0.98
- `SidebarPrimaryNavList`: `navRowShell`에 **`w-full`** 추가해 `site-panel-hover` 배경이 행 가로 전체를 쓰도록 함.
- `LeftSidebar`: 푸터 API `footer` 링크 **`flex-wrap`**·`nav` **`min-w-0 flex-1`**, 링크·테마 버튼 **`shrink-0`**로 항목이 많을 때 가로 오버플로 방지.
## v0.0.97
- `SidebarPrimaryNavList`: 하위 폴더 부모도 리프와 동일 **세로 막대→호버 원형** `before` 장식. 내부 링크가 현재 경로와 일치하면 장식을 **`--site-accent`**로 표시(`aria-current="page"`).
## v0.0.96
- `SidebarPrimaryNavList`: 하위가 있는 부모는 **행 전체 버튼**으로 토글, chevron **회전 애니메이션**, 하위 영역 **높이 전환 애니메이션**, 펼침 전용 배경 제거·너비·간격 리프와 통일.
## v0.0.95
- 메뉴 관리: `표시`·`폴더` 체크 제거(항목은 항상 공개, `is_folder`는 저장 시 자식 유무로 서버 설정). 테이블+행 드래그 UX를 태그 메인 태그와 동일 톤(`bg-[#f9f9f7]`·`opacity-50`, 입력 위에서는 드래그 시작 안 함).
- 태그 관리 메인 태그: 드래그 중인 행에 `opacity-50` 적용(메뉴 관리와 동일한 이탈 피드백).
- `PUT /admin/api/navigation`: `parent_id`/`is_folder` 컬럼 부재 시 한국어 안내(503) 및 화면에 마이그레이션 안내 블록.
## v0.0.94
- 메뉴 관리: 상단/하단 탭 분리, 순서는 드래그(태그 관리와 유사). 상단은 `parent_id` 트리·하위 추가·폴더(`is_folder`)·동일 부모 내 순서 변경.
- `GET /api/navigation`의 `primary`는 트리 응답, 좌측 사이드바는 `SidebarPrimaryNavList`로 접기/펼치기(`localStorage` 유지).
- 마이그레이션 `017_navigation_hierarchy.sql`, 공유 `lib/navigation-editor-tree.js`, `server/utils/navigation-tree.js` 검증·저장 순서.
## v0.0.93
- `composables/useAdminToast.js` 추가: 관리자 우측 상단 토스트(자동 숨김).
- 관리자 미디어(`pages/admin/media/index.vue`): 본문 상단 `errorMessage` 배너 제거, 폴더·이름 변경·삭제 등 실패 피드백을 토스트로 통일해 모달에 가리지 않게 함.
## v0.0.92
- 회원 `PUT /api/auth/profile`에서 관리 썸네일 URL이 바뀌거나 비워질 때도 `removeManagedAvatarAsset`으로 메타만 분리해, 해제 후에도 디스크·썸네일 탭 목록과 일치하도록 정리.
- 관리자 미디어 상세 모달에 **다운로드** 버튼 추가.
- 썸네일 탭 안내: 프로필 해제 시에도 파일이 삭제되지 않음·목록 갱신은 새로고침을 명시.
## v0.0.91
- 회원 썸네일 교체·삭제·탈퇴 시 이전 파일은 디스크에 남기고 `media_metadata`만 제거해, 관리자 썸네일 탭에서 미사용 자산을 구분·삭제할 수 있게 함.
- 관리자 미디어: 프로필이 참조 중인 썸네일만 삭제·이름 변경 차단(미참조 파일은 허용).
- `POST /admin/api/uploads`·`POST /api/auth/avatar`: 저장 파일명은 원본명 기반, 동일 폴더 충돌 시 `-2` 넘버링.
- 관리자 미디어 검색: 파일명·게시물 사용처 제목만; 모달에서 폴더 요약 중복 행 제거.
- `renameMediaItem`: 대상 폴더에 동일 파일명이 있으면 409.
## v0.0.90
- 관리자 미디어: 상단 탭으로 **미디어 라이브러리**와 **썸네일**(회원 `/members/avatars/`만) 분리, 썸네일 검색에 닉네임·이메일·IP 반영.
- 게시물용 관리자 업로드는 디스크 `posts/연/월` 유지하되 `media_metadata` 및 목록 논리 폴더는 **`미분류`**로 통일; 회원 아바타 메타는 **`썸네일`**.
- `listMediaItems`에 `avatarOwner` 부착, 썸네일 파일의 관리자 삭제·이름 변경·임의 논리 폴더 이동 차단, 예약 폴더 `썸네일`의 `media_folders` 생성·삭제 차단.
- 마이그레이션 `016_media_category_normalize.sql`로 레거시 `posts`/`회원/썸네일` 카테고리 문자열 정리.
## v0.0.89
- 관리자 미디어 썸네일 선택 컨트롤을 네이티브 체크박스에서 대비가 분명한 토글 버튼(미선택: 흰 배경·진한 테두리, 선택: 진한 배경·흰 체크)으로 교체.
- `docs/spec.md`에 미디어 디스크 경로와 `media_metadata` 논리 폴더 관계를 명시(이후 v0.0.90에서 `미분류`/`썸네일` 정책으로 갱신).
## v0.0.88
- 관리자 미디어: 썸네일 본문 클릭 시 상세 모달, 좌측 상단 체크박스로 다중 선택(Shift 범위 유지), 툴바 `현재 폴더로 이동` 제거.
- 폴더 추가는 상시 입력 대신 모달로 이름 입력.
- `DELETE /admin/api/media-folders` 및 폴더 행 삭제 UI 추가(삭제 시 해당 분류 메타는 `미분류`로).
## v0.0.87
- 메인 태그 `정렬 저장`·메뉴 `메뉴 저장`은 서버에서 받은 상태와 비교해 변경이 있을 때만 버튼이 활성화되도록 조정.
- 관리자 로그인·회원 로그인(`signin`) 제출 버튼은 이메일·비밀번호가 모두 입력된 경우에만 활성화.
- 관리자 글 목록의 삭제는 휴지통 아이콘으로 바꾸고, 기본은 낮은 불투명도·호버 시에만 강조.
- `AGENTS.md`에 커밋 후 원격 반영 시 `git push` 생략 방지 지침을 추가.
## v0.0.86
- 관리자 게시물 미리보기 본문 영역을 공개 상세와 동일한 `max-w-[720px]`·좌우 패딩으로 감싸 여백을 맞춤.
- 글 작성 폼에서 태그 토큰은 로마자 슬러그 변환 대신 한글 유지 정규화를 사용하고, 저장 시 태그 `name`은 한글 슬러그에 맞게 표시되도록 저장소 `normalizeTagSlugs`·`getTagNameFromSlug`를 조정.
- 관리자 게시물 폼에서 SEO 제목·설명 입력을 제거하고 저장 시 제목·요약을 메타 필드로 기록하도록 변경. `admin-post-input`의 SEO 문자열 길이 제한을 완화.
- 관리자 태그 관리 화면의 성공·오류 안내를 본문 상단 블록 대신 우측 상단 고정 토스트로 표시.
## v0.0.85
- 관리자 블록 에디터 저장 시 의도적으로 만든 빈 문단(연속 Enter)을 제거하지 않도록 빈 문단 마커(`<!--sori:blank-paragraph-->`) 직렬화/복원 로직을 추가.
- 공개 본문 마크다운 렌더러에서도 빈 문단 마커를 문단 블록으로 해석해 저장 후에도 문단 간 여백 의도를 유지하도록 맞춤.
## v0.0.84
- 관리자 블록 에디터 본문에서 위/아래 방향키 입력 시 커서가 블록 시작/끝 경계에 있으면 이전/다음 문단(또는 구조형 블록)으로 이동하도록 보완.
- 슬래시 메뉴를 최대 높이 제한 + 내부 스크롤 구조로 변경해 명령 개수가 많아도 화면을 넘기지 않도록 조정.
- 슬래시 메뉴 방향키 이동 시 현재 하이라이트 항목이 항상 스크롤 영역 안에 보이도록 자동 스크롤을 추가.
## v0.0.83
- 관리자 블록 에디터 슬래시 메뉴에서 방향키 이동 시 하이라이트 인덱스가 매번 초기화되던 문제를 수정해 연속 이동이 가능하도록 보정.
- 슬래시 메뉴가 열린 블록(`text`가 `/`로 시작)에서만 위/아래 방향키 메뉴 이동 로직이 동작하도록 분기해, 일반 본문 블록의 방향키 입력 간섭을 줄임.
## v0.0.82
- 메인 태그 목록의 `삭제` 버튼을 제거하고 `일반 태그로 변경`(강등) 버튼으로 교체.
- 일반 태그 삭제는 일반 태그 검색 결과 영역에서만 가능하도록 변경.
- 태그 생성/수정 폼에서 정렬 순서 입력과 태그 유형 선택을 제거해, 메인/일반 전환은 태그 목록 액션으로만 처리하도록 단순화.
## v0.0.81
- 관리자 글 작성 태그 입력에서 한글 조합 중 Enter 입력 시 중복 태그가 생성되지 않도록 IME 조합 상태 가드를 추가.
- 게시물 저장 중 새로 생성되는 태그는 기본값을 `general`(일반 태그)로 저장하도록 수정.
- 관리자 태그 화면에서 `관리용 태그` 명칭을 `메인 태그`로 변경.
- 관리자 태그 화면의 일반 태그 전체 목록 테이블을 제거하고, 일반 태그 검색 후 `메인 태그로 전환`하는 흐름으로 개편.
- 관리자 태그 목록 API에 `tagType`, `q`, `limit` 조회 옵션을 추가해 일반 태그 검색을 지원.
## v0.0.80
- 태그에 유형(`managed`/`general`) 컬럼을 추가하는 마이그레이션(`015_add_tag_type_and_reorder_support.sql`)을 추가.
- 관리자 태그 입력 폼에 태그 유형 선택을 추가하고, 일반 태그는 정렬 순서를 사용하지 않도록 정리.
- 관리자 태그 목록을 `관리용 태그`/`일반 태그`로 분리.
- 관리용 태그 목록에 드래그 앤 드롭 정렬 UI를 추가하고, 저장 버튼으로 순서를 일괄 반영하도록 개선.
- `PUT /admin/api/tags/reorder` API를 추가해 관리용 태그의 `sort_order`를 순차 재정렬하도록 확장.
- 공개 태그 API(`GET /api/tags`)는 관리용 태그만 반환하도록 변경해 좌측 카테고리 영역과 태그 관리 목적을 분리.
## v0.0.79
- 댓글 목록에 작성자 썸네일(`avatar_url`)을 노출하고, 썸네일이 없으면 이니셜 아바타를 표시하도록 UI를 개선.
- 댓글/대댓글에 좋아요 토글을 추가하고, 좋아요 수/내 좋아요 상태를 함께 반환하도록 API와 저장소를 확장.
- 댓글 시간 표기를 `n분 전`, `n시간 전`, 24시간 이후 날짜 형식으로 변경.
- `comment_likes` 테이블 마이그레이션(`012_add_comment_likes.sql`)을 추가.
- 댓글 정렬 옵션(`Best`, `Latest`, `Oldest`)을 실제 동작하도록 연결.
- 댓글/대댓글 카드 보더를 최소화하고 간격·아이콘 스타일을 정리해 더 단정한 레이아웃으로 조정.
- 대댓글 아바타가 깨질 때 이니셜로 안전하게 대체되도록 이미지 로드 실패 처리 보강.
- 공개 레이아웃(`default`, `post`)의 데스크톱 3열 `gap-x`를 제거해 본문-사이드 사이가 이중 패딩처럼 보이던 간격을 정리.
- 좌측 사이드바 네비게이션/카테고리 hover 배경을 `site-panel-hover` 기반으로 통일해 다크 모드에서 텍스트 가독성 저하를 수정.
- 관리자 멤버 목록에 권한 컬럼을 추가하고, 환경변수 관리자 계정을 `관리자` 권한으로 함께 표시하도록 보강.
- 사용자 테이블에 관리자 권한 컬럼(`is_admin`)을 추가하는 마이그레이션(`013_add_user_admin_role.sql`)을 추가.
- 최초 사용자 생성 시 관리자 권한을 자동 부여하고, 가입 응답에 관리자 여부를 함께 반환하도록 수정.
- 관리자 로그인은 환경변수 고정 계정 대신 `is_admin` 회원 계정 인증으로 전환.
- `GET /api/auth/bootstrap-status`를 추가해 최초 관리자 등록 필요 여부를 조회하도록 확장.
- 회원가입 화면에서 최초 사용자일 때 `관리자 등록` 타이틀/설명/필드 라벨을 노출하도록 수정.
- 관리자 로그인 시 회원 세션도 함께 설정하고, 관리자 로그아웃 시 회원 세션도 함께 정리하도록 수정.
- 관리자 설정 화면에 관리자 프로필(썸네일 업로드/제거, 이름 저장) 섹션을 추가.
- 관리자 설정 화면에서 현재 비밀번호 확인 기반 관리자 비밀번호 변경을 지원하도록 추가.
- 회원 권한 3단계(`owner`/`admin`/`member`)를 위한 마이그레이션(`014_add_user_role_levels.sql`)을 추가.
- 관리자 멤버 화면에서 권한 선택/저장 UI와 `PUT /admin/api/members/:id/role` 권한 변경 API를 추가.
## v0.0.78
- 관리자 미디어 목록에서 회원 썸네일 경로(`/uploads/members/avatars/`)를 다시 포함해 `회원/썸네일` 폴더에서 확인 가능하도록 수정.
- 회원 썸네일 파일도 일반 미디어와 동일하게 폴더 트리/검색/카운트 집계에 반영되도록 정리.
## v0.0.77
- 회원 설정 프로필 영역에서 썸네일 URL 입력을 제거하고, 썸네일 미리보기 + 이미지 변경/제거 버튼 중심 UI로 개편.
- 썸네일 업로드 완료 안내 문구를 실제 동작과 맞게 간소화.
- 썸네일 수동 크롭 UI는 우선순위 낮은 후속 작업으로 `docs/todo.md`에 기록.
## v0.0.76
- 회원 썸네일 업로드 시 원본 비율과 관계없이 중앙 기준 1:1 정사각형으로 강제 크롭하도록 변경.
- 크롭 결과 해상도는 `AVATAR_MAX_WIDTH`, `AVATAR_MAX_HEIGHT` 중 작은 값을 사용해 정사각형(`N x N`)으로 저장하도록 정리.
## v0.0.75
- 회원 썸네일 업로드 시 최소 해상도 제한(`AVATAR_MIN_WIDTH`, `AVATAR_MIN_HEIGHT`)을 추가해 너무 작은 이미지를 차단.
- 썸네일 품질과 리사이즈 설정값이 비정상일 때 서버에서 안전 범위로 보정(clamp)하도록 방어 로직을 추가.
- 최대 해상도 설정이 최소 해상도보다 작게 들어와도 자동 보정되도록 처리.
## v0.0.74
- 회원 썸네일 업로드 시 원본 포맷과 관계없이 WebP로 변환 저장하도록 수정.
- 회원 썸네일 업로드 시 `AVATAR_MAX_WIDTH`, `AVATAR_MAX_HEIGHT` 기준으로 자동 리사이즈(`fit: inside`)를 적용.
- 썸네일 품질을 `AVATAR_WEBP_QUALITY` 환경 변수로 제어하도록 설정을 추가.
## v0.0.73
- 회원 썸네일 교체 시 기존 회원 전용 썸네일 파일/메타데이터를 자동 정리하는 공통 유틸을 추가.
- `DELETE /api/auth/avatar`를 추가해 회원 설정에서 썸네일 제거를 지원하고, 제거 시 프로필 `avatarUrl`을 비움.
- 회원 탈퇴 시에도 회원 전용 썸네일 파일/메타데이터가 함께 정리되도록 처리.
## v0.0.72
- 회원 썸네일 업로드 API(`POST /api/auth/avatar`)를 추가하고 업로드 경로를 `/uploads/members/avatars/YYYY/MM`으로 분리.
- 회원 설정 페이지에서 썸네일 파일 업로드를 직접 처리하고, 업로드 후 프로필 저장 흐름으로 연결.
- 관리자 미디어 목록에서 회원 썸네일은 전용 카테고리(`회원/썸네일`)로 구분해 관리.
## v0.0.71
- 헤더 사용자 영역에서 구독 버튼을 제거하고, 로그인 상태 기반 아바타/드롭다운(설정, 로그아웃 / 비로그인 시 Sign up, Sign in)으로 정리.
- 회원 설정 페이지(`/settings`)를 추가하고 닉네임 변경(중복 확인), 썸네일 URL 변경, 비밀번호 변경, 회원 탈퇴 기능을 연결.
- 관리자 멤버 화면(`/admin/members`)과 회원 목록 API를 추가해 닉네임, 이메일, 최근 접속 시각/IP, 댓글 개수, 활동 현황을 확인할 수 있게 구성.
- 회원 활동 컬럼(`last_seen_at`, `last_seen_ip`)과 아바타 컬럼(`avatar_url`)을 DB에 추가하고, 로그인/세션 조회/댓글 작성 시 최근 활동을 갱신.
## v0.0.70
- 회원 인증 API(`POST /api/auth/signup`, `POST /api/auth/login`, `GET /api/auth/me`, `POST /api/auth/logout`)와 회원 세션 쿠키(`sori_member_session`)를 추가.
- 댓글 DB 스키마(`users`, `comments`)와 게시물 댓글 API(`GET/POST /api/posts/:slug/comments`)를 추가하고, 대댓글은 1단까지만 허용하도록 검증을 적용.
- 게시물 상세 `#comments` 영역에 `PostComments` UI를 연결해 로그인 회원 댓글/답글 작성과 댓글 목록 표시를 구현.
- `signin`/`signup` 화면을 시뮬레이션에서 실제 API 연동으로 전환.
## v0.0.66
- 태그 검색은 `description`을 제외하고 `name`·`slug`만 부분 일치하도록 조정해, `p` 같은 한 글자 입력으로 의미 없는 태그가 뜨는 혼선을 줄임.
- 검색 모달 헤더 아이콘은 입력 비어있으면 돋보기, 입력이 있으면 X(클리어)로 전환하고 클릭 시 입력값을 비운다. 좌측/우측 닫기 X는 제거하고 `Esc`·백드롭 클릭·모바일 취소로 닫는다.
- 검색 입력은 IME(한글 조합) 중에도 디바운스로 검색을 갱신해 `워`처럼 조합 상태가 유지되는 입력에서도 결과가 나오게 하고, 조합 종료 시점에는 확정값으로 즉시 한 번 더 갱신한다.
## v0.0.67
- 공개 검색에서 `/uploads/...` 파일 경로와 마크다운 이미지 토큰(`![](...)`)은 노이즈로 간주해 매칭 대상에서 제거, 이미지 파일명 때문에 숫자 검색이 걸리던 문제를 해결.
## v0.0.68
- 게시물 상세(`pages/post/[slug].vue`) 섹션 패딩을 내부 래퍼로 이동해 레이아웃 그리드 패딩과 중복되던 2중 패딩을 제거.
- 댓글 섹션 구분선(`border-y`)은 패딩 없이 전체 폭으로 표시하고, 내용만 내부 래퍼에 패딩을 적용.
## v0.0.69
- 공개 레이아웃(`layouts/default.vue`, `layouts/post.vue`)에서 메뉴 닫힘 시 추가로 주던 메인 우측 패딩을 제거해 가로 패딩이 1회만 적용되도록 정리.
- 홈/태그 목록/태그 상세 공개 페이지 섹션의 `px-*`를 제거하고 레이아웃 그리드 패딩만 사용하도록 통일해 2중 패딩을 해소.
## v0.0.65
- 헤더 `/` 단축키·검색 영역 클릭으로 통합 검색 모달(`SiteSearchModal`)을 연다. `INPUT`·`TEXTAREA`·`SELECT`·`contenteditable` 포커스일 때는 `/`를 가로채지 않는다.
- `GET /api/search?q=`와 `searchPublicContent`(저장소)로 태그·게시물(제목·요약·본문) 부분 일치 검색, 모달에서 Tags·Posts 섹션·일치 구간 강조·`html.site-search-open` 스크롤 잠금.
## v0.0.64
- 비개발용 `paths.mjs`가 `#internal/nitro`를 import하는데 루트 `package.json` `imports`에 없어 `Package import specifier "#internal/nitro" is not defined`가 나던 문제를, `scripts/node-paths-nitro-shim.mjs`로 최소 `useRuntimeConfig().app`만 제공하고 `#internal/nitro`를 매핑해 해결.
## v0.0.63
- `tailwindcss.cssPath`를 `~/assets/css/main.css`로 지정해, 없는 기본 경로 때문에 `node_modules/tailwindcss/tailwind.css`가 추가로 주입되던 이중 `@tailwind` 로딩을 제거.
- `tailwind.config.js` `content`에 `composables`·`modules`·`plugins` 스캔 경로 추가.
## v0.0.62
- 다크 인증 페이지에서 `input`이 UA 기본색으로 남아 글자·아이콘이 안 보이던 문제를 `main.css`의 `.auth-form-input`(글자색·캐럿·placeholder·autofill)로 보정.
- `AuthPasswordVisibilityToggle`은 Tailwind 의존을 줄이고 `scoped` CSS로 버튼·아이콘 크기·포커스 링을 고정.
- signin/signup 루트에 `[color-scheme:dark]`, signup 패널에 `border`·`bg-[#0d1116]`(`auth-signup__panel`)로 카드 대비 보강.
## v0.0.61
- 로그인·회원가입 비밀번호 표시 토글을 `AuthPasswordVisibilityToggle`(Material 스타일 SVG 눈 아이콘)으로 통일, 텍스트 보기/숨기기 제거.
- 회원가입 비밀번호·비밀번호 확인 각각 독립 토글·포커스 링을 가진 입력 행으로 정리.
## v0.0.60
- 홈 Featured 가로 트랙에 `touch-pan-x`·`-webkit-overflow-scrolling:touch`·`overscroll-x-contain`을 두어 모바일에서 손가락으로 가로 슬라이드(스크롤·스냅)가 잘 먹도록 함.
- Featured 이전/다음 화살표는 스크롤 시작·끝에 따라 `disabled`와 시각적 비활성 처리, `ResizeObserver`·`scroll`로 상태 동기화.
## v0.0.59
- Nuxt 3.21 SSR이 `#internal/nuxt/paths`를 외부 import로 두는데 `.nuxt/paths.mjs`가 기본적으로 디스크에 쓰이지 않아 Node가 루트 `package.json`에서 해석하지 못하던 오류 수정.
- `modules/nuxt-ssr-paths-write.mjs`에서 `paths.mjs` 템플릿에 `write: true`를 부여하고, 루트 `package.json` `imports`로 `./.nuxt/paths.mjs`를 매핑.
- `nuxt` 의존성을 `^3.21.2`로 올려 lockfile과 정렬.
## v0.0.58
- 공개 3열 그리드 중앙을 `minmax(0,1fr)`로 바꾸고 `lg:gap-x-4`·`xl:gap-x-5`를 두어 본문과 오른쪽 사이드 사이 시각적 간격 확보.
- `site-main`의 고정 `lg:w-[720px]`를 제거하고 `lg:max-w-[720px]`·`justify-self-start`로 그리드 패딩·`gap`이 있어도 가로 넘침이 나지 않게 함.
- 좌측 메뉴 닫힘 시 `gap` 제거(`lg:!gap-x-0`)와 본문 `lg:pr-4`로 우측만 호흡 유지.
- `MainColumn`을 `lg:max-w-[720px]` 중심으로 정리.
## v0.0.57
- 왼쪽 사이드바 하단 푸터(`left-sidebar__footer`) 수평 패딩을 `px-1`에서 `px-4`·`sm:px-5`로 조정해 링크·테마 버튼이 가장자리에 붙지 않게 함.
- 오른쪽 사이드바 카피라이트 푸터에 `pr-3`을 두어 우측 여백을 맞춤.
## v0.0.56
- `lg`~`xl` 구간에서 헤더 내부 여백·열 간격을 키우고, 검색창을 고정 470px 대신 `max-w`+`flex-1`로 줄여 아이콘·버튼이 붙지 않게 보정.
- 브랜드 영역에 상한 `max-width`를 두어 좁은 데스크톱에서 제목과 검색·우측 액션이 겹치지 않게 함.
- 공개 레이아웃 그리드(`default`/`post`)에 `lg:px-5`·`xl:px-6`을 적용해 헤더와 본문 열 가장자리를 맞춤.
## v0.0.55
- 모바일(`lg` 미만)에서 좌측 사이드바를 고정 슬라이드 패널+백드롭으로 표시하고, 닫기는 `closeMenu`/백드롭/Escape로 처리.
- 모바일에서 본문 아래에 오른쪽 사이드바를 배치하고, 좁은 폭에서 헤더·우측 패널이 화면 가장자리에 붙지 않도록 여백·구독 폼 레이아웃을 보정.
- 좌측 메뉴 열림 시 모바일에서 문서 스크롤 잠금(`html.site-mobile-nav-open`) 적용.
- 데스크톱에서만 메뉴 닫힘 시 `max-width`가 줄어들도록 보정(`lg:max-w-[1007px]`).
## v0.0.54
- 회원가입 화면(`signup`)을 모바일 우선 여백·카드 패널 구조로 보정해 가독성 개선.
- 회원가입 2단계에 로그인 진입 링크 추가.
- 회원가입 3단계 상태 메시지(`aria-live`)와 재전송 안내 문구를 정리.
- 로그인 화면(`signin`) 비밀번호 보기/숨기기 토글 추가.
- 로그인 화면 상태 메시지를 오류/안내로 분리하고 홈 이동 링크 추가.
## v0.0.53
- 게시물 상세 제목 우측 공유 버튼에 공유 모달 추가(X/Bluesky/Facebook/LinkedIn/Email/링크복사).
- 헤더 우측 Account 링크 제거, 사용자 아바타 버튼+드롭다운(Anonymous/Sign up/Sign in) 추가.
- 회원가입 화면(`/signup`)을 AFFiNE 참고 3단계(환영/입력/이메일 확인) 플로우로 추가.
- 회원가입 3단계에 인증 메일 재전송(쿨다운)과 인증 완료 후 로그인 이동 흐름 추가.
- 로그인 화면(`/signin`)을 동일한 다크 톤 폼 스타일로 추가.
- 회원가입 하단 스텝 인디케이터를 `min-h` 기반 하단 고정 배치로 보정.
- 회원가입 1단계 문구를 사이트 설정(`site-settings.title`, `site-settings.description`) 연동으로 변경.
- 회원가입 페이지 타이머(`setInterval`)를 `onMounted`에서만 실행하도록 수정해 SSR 오류를 해결.
## v0.0.52
- 홈/태그 목록 Featured 아이콘이 제목 줄 높이를 흔들지 않도록 고정 크기(`h-4 w-4`)·정렬 방식으로 보정.
- 게시물 상세 제목 아래 메타 정보에 `/` 구분자 표시를 `after` 규칙으로 통일.
## v0.0.51
- 좌·우 사이드바 데스크톱 열 높이를 `calc(100vh - 57px)`로 고정해 내부 스크롤·하단 푸터 배치가 뷰포트 기준으로 맞도록 수정.
- 사이드 푸터에 상단 보더 추가(스크롤 영역과 시각적 구분).
- 공개 피드·게시 상세·아카이브 발행일 `YYYY.MM.DD` 통일, `composables/formatPostDate.js` 사용·`<time datetime>` 보강.
- `pages/tag/[slug].vue` 동일 날짜·datetime 처리.
## v0.0.50
- 데스크톱(`lg+`)에서 긴 본문은 **문서 스크롤**(브라우저 오른쪽 스크롤바)로 처리하고, `main` 단독 스크롤은 제거.
- 좌·우 사이드바는 `sticky`+`max-h`로 뷰포트에 맞추고, 내부 스크롤은 `.site-sidebar-scroll`로 스크롤바만 숨김(휠·트랙패드 스크롤 유지).
## v0.0.49
- 데스크톱(`lg+`) 공개 레이아웃을 뷰포트 높이에 고정하고 중앙 컬럼만 세로 스크롤되도록 변경.
- 좌·우 사이드바는 열 높이 안에서 본문만 스크롤하고 푸터(링크·테마·카피라이트)는 항상 열 하단에 고정.
## v0.0.48
- 공개 본문에 Thred형 북마크 카드(`ProseBookmark`, `:::bookmark`)와 회원가입 CTA(`ProseSignup`, `:::signup`) 추가.
- `ProseEmbed`에서 Twitter/X 게시물 URL을 공식 embed iframe으로 렌더링하고 테마와 동기화.
- Callout 왼쪽 강조선·이미지 캡션 변수 색상 등 카드/미디어 스타일을 Thred에 가깝게 보정.
## v0.0.47
- 공개 본문 렌더러에서 Ordered list(숫자 목록) 문법을 지원.
- 공개 본문 인용구를 멀티라인 처리하고 대체(Alternative) 인용구 스타일 문법을 추가.
- 공개 본문 리스트/인용/이미지/갤러리/카드류 기본 스타일을 Thred 톤(보더/라운드/패널/타이포)으로 통일.
- 기술 명세에 공개 본문 스타일 가이드를 추가.
## v0.0.46
- 홈 Latest 피드 보기 방식 토글(4종) 드롭다운과 localStorage 저장 추가.
- 홈 Latest 피드 Default 아이콘을 원본(restore) SVG로 보정.
- 홈/태그 상세 목록 Featured 번개 아이콘을 SVG로 교체.
- 홈/태그 상세 목록 댓글 아이콘을 SVG로 교체.
- Nuxt future 호환성 버전을 명시해 설정 resolve 오류를 예방.
- 개발 서버 실행 스크립트에서 종료 시 최근 로그를 함께 출력하도록 보강.
- 로컬 개발 환경 파일 감시(EMFILE) 이슈 완화를 위해 Vite watch polling 옵션 추가.
- 게시물 레이아웃에서 누락된 그리드 클래스를 복구해 `/post/:slug` 화면 깨짐을 수정.
- 게시물 상세 헤더를 Thred 패턴(제목+메타+썸네일) 기준으로 재구성.
- 태그 목록 카드의 ↗ 텍스트 아이콘을 SVG 아이콘으로 교체.
## v0.0.45
- 사용자 화면 기본 배경을 `#fcfcfc`로 통일하고 보더 기준 구분으로 정리.
- 오른쪽 사이드바 왼쪽 경계선이 항상 보이도록 보더 추가.
- 왼쪽 사이드바 열림/닫힘 시 폭이 스르륵 줄어드는 전환 애니메이션 추가.
- 왼쪽 네비게이션 항목 왼쪽에 회색 세로 바 표시를 추가하고 hover 시 원형 아이콘으로 전환되도록 수정.
- 왼쪽 네비게이션 hover 배경색을 더 연하게 조정하고, 마우스 오버 시 텍스트가 함께 이동하도록 전환 효과 보정.
- 왼쪽 사이드바 전환과 네비게이션 hover 효과 구현을 커스텀 CSS에서 Tailwind 유틸리티 클래스로 전환.
- 왼쪽 네비게이션과 카테고리 영역의 패딩, 간격, hover 동작을 원본 Thred 마크업 패턴에 맞춰 재정렬.
- 왼쪽 사이드바 네비게이션/카테고리/작성자 섹션의 내부 패딩과 텍스트 이동량을 미세 조정.
- 태그 목록 페이지를 원본 Thred 구조에 맞춰 중앙 히어로와 3열 태그 카드 레이아웃으로 재구성.
- 태그 상세 페이지(`tag/[slug]`)를 원본 Thred 구조에 맞춰 헤더 간격과 리스트형 게시물 카드 레이아웃으로 재구성.
- 태그 상세 페이지 게시물 메타 영역에 featured 강조, 태그 컬러 배지, 구분자 스타일을 원본 패턴에 맞춰 보정.
- 태그 상세 페이지에서 복수 태그 글은 첫 번째 태그만 배지로 표시하고, 배지와 `/` 구분자가 겹치지 않도록 메타 구조 수정.
- 오른쪽 사이드바 Follow 영역을 원본 패턴의 소셜 아이콘 링크 행으로 교체.
- 홈 중앙 메인 영역을 원본 Thred 구조에 맞춰 Hero/Featured/Latest 섹션 간격과 내부 보더 정렬 기준으로 재구성.
- 홈 Latest와 태그 상세 목록 카드 우하단 hover 화살표 액션 버튼 추가.
- 홈 Latest와 태그 상세 목록 카드의 우하단 액션 화살표를 텍스트에서 SVG 아이콘으로 교체.
- 홈 Featured 영역을 그리드에서 가로 슬라이드 트랙(좌우 버튼 이동) 구조로 변경.
- 홈 Featured 슬라이드 폭을 브레이크포인트별 1.4/1.6/2.6 카드 비율 계산식으로 보정.
- 기술 명세 현재 버전을 v0.0.45로 갱신.
## v0.0.44
- 사용자 화면 다크/라이트 테마 전환 composable 추가.
- 헤더와 좌측 사이드바에 테마 전환 버튼 연결.
- 사용자 화면 링크, 카드, 입력, 버튼 hover 인터랙션 보강.
- `ZCF-v1.0.5` 및 샘플 폴더가 Git에 포함되지 않도록 제외 규칙 추가.
- 기술 명세 현재 버전을 v0.0.44로 갱신.
## v0.0.43
- 대표 이미지가 설정된 상태의 변경/삭제 액션을 이미지 아래 버튼 영역이 아니라 이미지 hover 오버레이로 수정.
- 대표 이미지 선택 모달에서 미디어 클릭 시 즉시 적용하지 않고 선택 상태만 표시하도록 수정.
- 대표 이미지 선택 모달 하단의 대표 이미지로 적용 버튼으로 선택 이미지를 확정하도록 수정.
- 기술 명세 현재 버전을 v0.0.43으로 갱신.
- 패키지 버전을 0.0.43으로 갱신.
## v0.0.42
- 관리자 글쓰기 화면의 문서 스크롤 잠금 클래스를 html/body에 직접 적용하도록 보강.
- 관리자 글 설정의 태그 입력을 Figma 기준 배지형 입력으로 수정.
- 태그 입력 중 Enter가 게시물 저장으로 이어지던 문제 수정.
- 관리자 글 설정에서 Canonical URL과 OG 이미지 입력 UI 제거.
- 게시물 저장 시 Canonical URL은 기본 글 주소, OG 이미지는 대표 이미지를 따르도록 정리.
- 대표 이미지 선택 모달에 이미지 업로드와 미디어 라이브러리 탭 추가.
- 기술 명세 현재 버전을 v0.0.42로 갱신.
- 패키지 버전을 0.0.42로 갱신.
## v0.0.41
- 관리자 블록 에디터 `/` 명령 메뉴가 아래 블록 텍스트와 겹쳐 보이던 문제 수정.
- 관리자 블록 에디터 드래그 종료 시 삽입선 위치 기준으로 블록 이동이 확정되도록 보정.
- 개발 서버에서 Nuxt DevTools 도킹 패널로 보이는 하단 검은 영역을 막기 위해 DevTools 비활성화.
- 기술 명세 현재 버전을 v0.0.41로 갱신.
- 패키지 버전을 0.0.41로 갱신.
## v0.0.40
- 관리자 글쓰기 화면에서 바깥 문서가 함께 스크롤되어 하단 배경이 노출되던 문제 수정.
- 관리자 블록 에디터 드래그 중 드롭 위치를 위/아래 삽입선으로 표시하도록 추가.
- 관리자 블록 에디터 드롭 이동 위치가 표시된 삽입선과 일치하도록 수정.
- 관리자 블록 에디터 한글 조합 중 Shift+Enter 입력 시 조합 완료 후 줄바꿈이 바로 적용되도록 보정.
- 기술 명세 현재 버전을 v0.0.40으로 갱신.
- 패키지 버전을 0.0.40으로 갱신.
## v0.0.39
- 관리자 블록 에디터 Shift+Enter 줄바꿈이 문단 첫 위치로 커서를 이동시키던 문제 수정.
- 관리자 블록 에디터 텍스트 DOM 동기화를 `textContent` 기준으로 보정.
- 관리자 블록 에디터 왼쪽 블록 핸들을 AFFiNE 참고 스타일의 세로 막대형 hover 표시로 수정.
- 기술 명세 현재 버전을 v0.0.39로 갱신.
- 패키지 버전을 0.0.39로 갱신.
## v0.0.38
- 관리자 블록 에디터 슬래시 메뉴 필터가 입력 즉시 동기화되도록 보정.
- 관리자 블록 에디터에서 `/갤` Enter 입력 시 필터링된 갤러리 명령이 적용되도록 수정.
- 관리자 블록 에디터에서 Shift+Enter 줄바꿈과 Enter 문단 생성을 구분하도록 수정.
- 관리자 블록 에디터 구조형 블록의 자체 위아래 여백을 제거하고 블록 행 사이 margin-top 기준으로 정리.
- 관리자 블록 에디터 하단의 불필요한 최소 높이로 생기던 빈 영역 제거.
- 관리자 글 수정 화면의 보기/삭제 액션을 Figma 기준에 맞춰 게시물 설정 패널 내부로 이동.
- 기술 명세 현재 버전을 v0.0.38로 갱신.
- 패키지 버전을 0.0.38로 갱신.
## v0.0.37
- 관리자 블록 에디터의 한글 조합 입력 종료 후 Enter 처리 보정.
- 관리자 블록 에디터의 슬래시 메뉴 필터가 한글 조합 완료 뒤 갱신되도록 수정.
- 관리자 블록 에디터에서 ` ``` ` 입력 시 코드 블록으로 즉시 변환되도록 추가.
- 관리자 코드 블록 글자색과 caret 색상 보정.
- 관리자 블록 에디터에 블록 핸들 선택, Delete/Backspace 삭제, 드래그 이동 기능 추가.
- 할 일 문서에 블록 핸들 액션 메뉴 후속 작업 추가.
- 기술 명세 현재 버전을 v0.0.37로 갱신.
- 패키지 버전을 0.0.37로 갱신.
## v0.0.36
- 할 일 문서에서 완료 또는 현재 기준 불필요한 QA 항목 정리.
- 기술 명세 현재 버전을 v0.0.36으로 갱신.
- 패키지 버전을 0.0.36으로 갱신.
## v0.0.35
- 관리자 공통 레이아웃의 기본 내부 패딩 제거.
- 관리자 글 작성/수정 화면에서 좌측 관리자 네비게이션을 숨기도록 수정.
- 관리자 글 작성/수정 폼을 에디터 작업 영역과 우측 설정 패널의 1차 좌우 분할 구조로 수정.
- 게시물 설정 패널 열림/닫힘 너비 전환 애니메이션 추가.
- 관리자 글 작성/수정 화면의 버튼, 입력, 미디어 선택 요소 hover/focus 효과 보강.
- 기술 명세 현재 버전을 v0.0.35로 갱신.
- 패키지 버전을 0.0.35로 갱신.
## v0.0.34
- 배포 문서에 개발/운영 DB 분리 검증 절차 추가.
- 로컬 개발 DB 실행 안내에 Docker Desktop과 Colima 기준 병기.
- 할 일에서 개발 DB와 운영 DB 분리 검증 절차 작성 항목 정리.
- 기술 명세 현재 버전을 v0.0.34로 갱신.
- 패키지 버전을 0.0.34로 갱신.
## v0.0.33
- 개발 서버 실행 링크 출력을 개발 서버, Admin, Tailwind Viewer 3개 주소로 정리.
- 개발 서버 실행 링크가 Nuxt 출력 URL 대신 프로젝트 고정 포트 43117 기준으로 표시되도록 수정.
- 배포 문서에 로컬 PostgreSQL DB 확인 방법 추가.
- 할 일에서 CloudBeaver PostgreSQL 연결 방식 확정 항목 정리.
- 기술 명세 현재 버전을 v0.0.33으로 갱신.
- 패키지 버전을 0.0.33으로 갱신.
## v0.0.32
- 관리자 글 작성/수정 화면의 별도 제목 헤더 제거.
- 관리자 글 작성/수정 폼을 Ghost 스타일 상단 바와 중앙 에디터 구조로 수정.
- 대표 이미지 추가 영역을 에디터 본문 상단으로 이동.
- 게시물 설정 패널을 420px 우측 패널과 토글 구조로 정리.
- 관리자 글 에디터 컬럼을 좌우 32px 패딩 포함 804px로 보정해 실제 본문 폭 740px 유지.
- 블록 에디터 첫 placeholder 문구를 간결하게 수정.
- 패키지 버전을 0.0.32로 갱신.
## v0.0.31
- 관리자 글 작성/수정 폼에 미리보기 버튼 추가.
- 저장 전 게시물 입력값을 브라우저 저장소에 담아 새 미리보기 탭으로 전달하도록 추가.
- 관리자 게시물 미리보기 화면 추가.
- 미리보기 화면이 공개 게시물 본문 렌더러와 같은 컴포넌트를 사용하도록 연결.
- 패키지 버전을 0.0.31로 갱신.
## v0.0.30
- 게시물 OG 이미지 필드 추가.
- 관리자 글 작성/수정 폼에 OG 이미지 선택, 업로드, 변경, 삭제 기능 추가.
- 공개 게시물 상세 화면에 OG 이미지와 Twitter large image 카드 메타 연결.
- 미디어 라이브러리 사용 현황에 게시물 OG 이미지 사용처 표시 추가.
- 패키지 버전을 0.0.30으로 갱신.
## v0.0.29
- 게시물 SEO 메타데이터 컬럼 추가.
- 관리자 글 작성/수정 폼에 SEO 제목, SEO 설명, canonical URL, 검색엔진 노출 제외 설정 추가.
- 관리자 게시물 생성/수정 API가 SEO 값을 저장하도록 수정.
- 공개 게시물 상세 화면에 SEO 제목, description, canonical, robots, 기본 OG 메타 연결.
- 패키지 버전을 0.0.29로 갱신.
## v0.0.28
- 관리자 글 작성/수정 폼에 발행 시각 입력 기능 추가.
- 발행 상태에서 미래 발행 시각을 저장하면 예약 발행으로 처리하도록 추가.
- 공개 게시물 목록과 상세 API가 미래 발행 글을 노출하지 않도록 수정.
- 관리자 글 목록에서 발행/예약/초안/비공개 상태 표시를 구분하도록 수정.
- 예약 발행 글은 공개 보기 버튼을 숨기도록 수정.
- 패키지 버전을 0.0.28로 갱신.
## v0.0.27
- 미디어 폴더 테이블 추가.
- 관리자 미디어 폴더 목록/생성 API 추가.
- 관리자 미디어 화면을 왼쪽 폴더 트리와 오른쪽 썸네일 갤러리 구조로 수정.
- 미디어 Ctrl/Command 클릭 및 Shift 클릭 복수 선택 기능 추가.
- 선택 미디어를 폴더로 드래그해 일괄 이동하는 기능 추가.
- 미디어 폴더 이동은 실제 파일 경로가 아닌 메타데이터 경로를 갱신하도록 유지.
- 패키지 버전을 0.0.27로 갱신.
## v0.0.26
- 미디어 메타데이터 테이블 추가.
- 미디어 URL별 카테고리 저장 기능 추가.
- 관리자 미디어 목록에 카테고리 필터 추가.
- 관리자 미디어 상세 모달에 카테고리 수정 기능 추가.
- 미디어 파일명 변경/삭제 시 메타데이터도 함께 갱신하도록 수정.
- 패키지 버전을 0.0.26으로 갱신.
## v0.0.25
- 관리자 블록 에디터에서 빈 문단 placeholder를 마지막 보조 입력 블록에만 표시하도록 수정.
- 네비게이션 항목 데이터베이스 테이블 추가.
- 공개 네비게이션 조회 API 추가.
- 관리자 네비게이션 조회/일괄 저장 API 추가.
- 관리자 메뉴 관리 화면 추가.
- 공개 왼쪽 사이드바 상단/하단 메뉴를 네비게이션 API와 연결.
- 패키지 버전을 0.0.25로 갱신.
## v0.0.24
- 관리자 블록 에디터에서 마지막 빈 문단 Enter 입력 시 연속 빈 줄이 유지되도록 수정.
- 사이트 설정 데이터베이스 테이블 추가.
- 공개 사이트 설정 조회 API 추가.
- 관리자 사이트 설정 조회/수정 API 추가.
- 관리자 사이트 설정 화면을 실제 저장 API와 연결.
- 공개 헤더와 오른쪽 사이드바에 사이트 설정 값을 연결.
- 패키지 버전을 0.0.24로 갱신.
## v0.0.23
- 관리자 고정 페이지 목록 화면을 실제 API와 연결.
- 관리자 고정 페이지 생성 화면 추가.
- 관리자 고정 페이지 수정 화면 추가.
- 관리자 고정 페이지 생성/수정/삭제 API 추가.
- 고정 페이지 작성 폼에 블록 에디터와 대표 이미지 선택 기능 연결.
- 패키지 버전을 0.0.23으로 갱신.
## v0.0.22
- 관리자 블록 에디터 마지막에 클릭 가능한 빈 문단 블록을 항상 유지하도록 수정.
- 빈 마지막 문단 블록은 저장 콘텐츠에 포함하지 않도록 유지.
- 한글 조합 입력 직후 Enter가 새 블록 입력으로 중복 처리되는 문제 보정.
- 관리자 글 저장/수정/삭제 진행 상태를 토스트로 표시하도록 추가.
- 새 글 저장 후 수정 화면으로 이동해도 저장 성공 토스트를 표시하도록 추가.
- 패키지 버전을 0.0.22로 갱신.
## v0.0.21
- 관리자 글 작성/수정 폼에 로컬 자동 저장 기능 추가.
- 자동 저장본이 있으면 복원 또는 삭제 안내를 표시하도록 추가.
- 글 저장 성공 시 해당 자동 저장본을 삭제하도록 연결.
- 자동 저장 상태 시간을 글 작성 화면 하단에 표시하도록 추가.
- 패키지 버전을 0.0.21로 갱신.
## v0.0.20
- 관리자 블록 에디터에 콜아웃 블록 추가.
- 관리자 블록 에디터에 토글 블록 추가.
- 관리자 블록 에디터에 임베드 블록 추가.
- 공개 본문 렌더러에 콜아웃, 토글, 임베드 마크다운 확장 파싱 추가.
- YouTube 임베드 URL을 공개 화면에서 iframe으로 렌더링하도록 수정.
- 패키지 버전을 0.0.20으로 갱신.
## v0.0.19
- 관리자 블록 에디터의 한글 조합 입력 중복 방지 처리 추가.
- 이미지/갤러리 삽입 시 파일명을 alt/caption으로 자동 표시하지 않도록 수정.
- 이미지 블록 alt 입력을 이미지 hover 또는 focus 상태에서만 표시하도록 수정.
- 공개 게시물 카드에 대표 이미지 썸네일 표시 추가.
- ProseImage Wide/Full-width 화면 이탈 보정 작업을 할 일에 기록.
- 패키지 버전을 0.0.19로 갱신.
## v0.0.18
- 새 글 작성 화면에서 빈 본문 블록이 생성되지 않던 문제 수정.
- 공개 게시물 목록 경로 `/posts` 추가.
- 공개 게시물 상세 경로를 `/post/:slug` 기준으로 추가.
- 기존 `/posts/:slug` 상세 경로를 `/post/:slug`로 리다이렉트하도록 수정.
- 공개 태그 목록 경로 `/tags` 추가.
- 공개 태그 상세 경로를 `/tag/:slug` 기준으로 추가.
- 기존 `/tags/:slug` 상세 경로를 `/tag/:slug`로 리다이렉트하도록 수정.
- 공개 화면과 관리자 미리보기 링크를 단수형 상세 경로 기준으로 정리.
- 패키지 버전을 0.0.18로 갱신.
## v0.0.17
- 관리자 글 작성/수정 폼의 대표 이미지 URL 직접 입력을 이미지 선택 UI로 변경.
- 대표 이미지 썸네일, 삭제, 변경, 새 업로드 기능 추가.
- 대표 이미지를 기존 미디어 라이브러리에서 선택할 수 있도록 추가.
- 관리자 미디어 화면을 고밀도 썸네일 갤러리 구조로 변경.
- 미디어 경로, 사용 현황, 용량, 파일명 변경, 삭제 정보를 상세 모달로 이동.
- 패키지 버전을 0.0.17로 갱신.
## v0.0.16
- 관리자 미디어 목록에 게시물/페이지 사용 현황 표시 추가.
- 미디어 사용처를 대표 이미지와 본문 위치로 구분해 표시.
- 사용 중인 미디어의 파일명 변경과 삭제를 차단하도록 수정.
- 미디어 검색 대상에 사용 중인 게시물/페이지 제목 추가.
- 패키지 버전을 0.0.16으로 갱신.
## v0.0.15
- 관리자 블록 에디터 `/` 메뉴 항목 제목 색상을 진한 본문색으로 수정.
- 관리자 미디어 목록 API 추가.
- 관리자 미디어 파일명 변경 API 추가.
- 관리자 미디어 삭제 API 추가.
- 관리자 미디어 관리 화면 추가.
- 관리자 사이드바에 미디어 메뉴 추가.
- 글쓰기 이미지/갤러리 블록에서 기존 업로드 미디어 선택 기능 추가.
- 패키지 버전을 0.0.15로 갱신.
## v0.0.14
- 관리자 블록 에디터에 단일 이미지 블록 추가.
- 관리자 블록 에디터에 복수 이미지 갤러리 블록 추가.
- 이미지 블록의 기본/와이드/풀사이즈 표시 옵션 추가.
- 관리자 이미지 업로드 API 추가.
- 공개 본문 렌더러에 이미지와 갤러리 렌더링 추가.
- 공개 갤러리 이미지 클릭 시 라이트박스로 크게 보는 기능 추가.
- 업로드 파일이 Git에 포함되지 않도록 `public/uploads/` 제외 처리.
- 향후 미디어 라이브러리 관리 기능 범위 정리.
- 패키지 버전을 0.0.14로 갱신.
## v0.0.13
- 개발 서버 실행 로그를 프로젝트 전용 링크 요약 출력으로 정리.
- `npm run dev`가 `scripts/dev-server.js`를 통해 Nuxt 개발 서버를 실행하도록 수정.
- 패키지 버전을 0.0.13으로 갱신.
## v0.0.12
- 관리자 글 제목 입력에서 Enter 입력 시 본문 첫 블록으로 이동하도록 수정.
- 관리자 블록 에디터 본문 글자 색상을 관리자 화면 기준으로 고정.
- 패키지 버전을 0.0.12로 갱신.
## v0.0.11
- 관리자 블록 에디터에서 빈 문단 Enter 입력 시 새 빈 블록이 생성되도록 수정.
- 관리자 블록 에디터의 `/` 명령 메뉴에서 Enter로 선택 항목을 적용하도록 수정.
- 관리자 블록 에디터의 `/` 명령 메뉴에 위/아래 방향키 선택 이동 추가.
- 관리자 글 에디터 후속 작업 순서 정리.
- 패키지 버전을 0.0.11로 갱신.
## v0.0.10
- 관리자 블록 에디터의 `contenteditable` 입력 중복 문제 수정.
- 관리자 블록 에디터의 `/` 명령 메뉴가 화면 하단에서 위로 열리도록 수정.
- 빈 블록 placeholder가 활성 블록에만 표시되도록 수정.
- 관리자 글 제목 입력을 본문 흐름 안의 큰 제목 필드로 변경.
- 패키지 버전을 0.0.10으로 갱신.
## v0.0.9
- 관리자 글 작성/수정 폼을 textarea 방식에서 블록형 에디터 방식으로 변경.
- 관리자 블록 에디터에 `/` 명령 메뉴 추가.
- 관리자 블록 에디터에 `#`, `##`, `###`, `>`, `-` 입력 단축 변환 추가.
- 공개 게시물과 고정 페이지 본문을 마크다운 렌더러에 연결.
- 패키지 버전을 0.0.9로 갱신.
## v0.0.8
- 관리자 글 작성/수정 폼에 마크다운 미리보기 탭 추가.
- 관리자 글 작성/수정 폼에 제목, 굵게, 목록, 인용, 코드 문법 삽입 버튼 추가.
- 패키지 버전을 0.0.8로 갱신.
## v0.0.7
- 태그 정렬 순서와 색상 코드 필드 추가.
- 태그 표시 필드 마이그레이션 추가.
- 관리자 태그 생성/수정 화면을 개별 페이지로 분리.
- 관리자 태그 목록 화면의 인라인 수정 제거.
- 공개 좌측 사이드바 카테고리를 실제 태그 색상과 정렬 순서 기준으로 연결.
- 관리자 태그 상세 조회 API 추가.
- 관리자 태그 목록 API 추가.
- 관리자 태그 생성 API 추가.
- 관리자 태그 수정 API 추가.
- 관리자 태그 삭제 API 추가.
- 관리자 태그 관리 화면을 실제 API에 연결.
- 관리자 글 삭제 API 추가.
- 관리자 글 목록과 수정 화면에 삭제 액션 추가.
- 관리자 글 작성 API 추가.
- 관리자 글 상세 조회 API 추가.
- 관리자 글 수정 API 추가.
- 관리자 글 작성/수정 공통 폼 추가.
- 관리자 새 글 작성 화면과 수정 화면을 실제 저장 API에 연결.
- 관리자 글 상태를 초안/발행/비공개로 저장할 수 있도록 수정.
- 관리자 접근 미들웨어의 서버 인증 확인 방식 수정.
- 환경 변수 기반 관리자 로그인 기능 추가.
- 관리자 세션 쿠키 인증 유틸리티 추가.
- 관리자 로그아웃 및 세션 조회 API 추가.
- 관리자 글 목록 API와 화면 연결.
- 개발 서버의 `#app-manifest` 가상 모듈 분석 오류를 피하도록 Nuxt app manifest 실험 기능 비활성화.
- Nuxt 컴포넌트 자동 import 설정을 문서의 컴포넌트명 기준에 맞게 수정.
- 홈, 태그, 게시물, 고정 페이지 공개 화면을 실제 API 데이터에 연결.
- 로컬 PostgreSQL 마이그레이션 실행 스크립트 추가.
- 개발 DB 마이그레이션 npm 명령 추가.
- Homebrew, Docker CLI, Docker Compose, Colima 기반 로컬 컨테이너 실행 환경 구성.
- Docker Compose가 `ENV_FILE` 값으로 로컬/운영 환경 파일을 선택할 수 있도록 수정.
- 로컬 PostgreSQL 개발 DB 컨테이너 실행 및 시드 데이터 확인.
- Nuxt 개발/프리뷰 스크립트가 `.env.development`를 명시적으로 읽도록 수정.
- 새 개발 환경에서 Node.js 22 LTS 기준 의존성 설치 및 빌드 검증.
- 로컬 개발 필수 조건 문서의 Node.js 권장 버전 정리.
- 패키지 버전을 0.0.7로 갱신.
## v0.0.6
- `.env.example`의 실제 계정/비밀번호 값을 예시 전용 placeholder로 교체.
- 로컬 개발 전용 `.env.development` 파일 생성.
- 개발 DB 비밀번호와 관리자 비밀번호를 랜덤 값으로 분리.
- 환경 변수 파일 관리 기준 문서 정리.
- 패키지 버전을 0.0.6으로 갱신.
- 이미 원격에 올라간 비밀번호 사용 여부 점검 항목 추가.
## v0.0.5
- PostgreSQL 초기 스키마 마이그레이션 추가.
- 개발용 시드 데이터 SQL 추가.
- Nuxt 서버 API 저장소 계층 추가.
- `DATABASE_URL`이 있으면 PostgreSQL을 사용하고, 없으면 샘플 데이터를 사용하도록 수정.
- Docker Compose에 PostgreSQL 서비스와 전용 DB 포트 43119 추가.
- 공개 API가 저장소 계층을 통해 게시물, 페이지, 태그를 조회하도록 수정.
## v0.0.4
- 헤더 좌측 아이콘을 브랜드 마크에서 메뉴 토글 버튼으로 수정.
- Vue/Nuxt 상태 기반 좌측 사이드바 열기/닫기 기능 추가.
- 메뉴 열림 상태를 `localStorage`의 `MENU_STATE`에 저장하도록 추가.
- 메뉴 닫힘 상태에서 공개 레이아웃 그리드가 좌측 사이드바 폭을 제거하도록 수정.
## v0.0.3
- Thred 참고 화면 기준 공개 레이아웃 색상 토큰 정리.
- 라이트/다크 모드 CSS 변수 기반 테마 추가.
- 헤더 아래 3단 컬럼 최소 높이를 화면 전체 높이로 수정.
- 좌우 사이드바를 본문과 별개로 전체 높이 패널처럼 표시하도록 수정.
- 홈 화면 히어로, 추천 영역, 최신 글 영역 구조 보강.
- 사이트 헤더 검색 영역과 구독/계정 액션 구조 추가.
- 좌우 사이드바 임시 콘텐츠 구조 보강.
- 로컬 개발/프리뷰 포트 43117 유지.
## v0.0.2
- Nuxt 3 프로젝트 기본 실행 구조 추가.
- Tailwind CSS 설정과 전역 Pretendard 기준 스타일 추가.
- 공개 레이아웃, 게시물 레이아웃, 고정 페이지 레이아웃, 관리자 레이아웃 골격 추가.
- 사이트 컴포넌트와 콘텐츠 컴포넌트 초기 골격 추가.
- 홈, 게시물 상세, 태그, 고정 페이지, 관리자 기본 화면 추가.
- Nuxt `server/api` 기반 백엔드 골격 추가.
- Zod 기반 콘텐츠 스키마와 샘플 API 추가.
- `.env.example`, Dockerfile, docker-compose.yml, .dockerignore 추가.
- 로컬 개발 포트 43117, NAS Docker 외부 포트 43118 기준 추가.
## v0.0.1
- sori.studio 개인 블로그/CMS 방향 정리.
- note.md 원본 기획 기준 문서 재점검.
- Ghost 스타일 관리자와 Thred 스타일 공개 화면 기준 명세 정리.
- Nuxt SSR, JavaScript, JSDoc, Zod, Tailwind CSS 기본 전제 정리.
- Git 원격 저장소와 작성자 기준 문서화.
- 로컬 개발 DB와 NAS 운영 DB 분리 원칙 추가.
- 공개 레이아웃, 콘텐츠 컴포넌트, 관리자 화면 계획 정리.
- pages 전체 화면 표시 기준 정리.
- 배포 가이드에 clone, 개발/운영 환경 변수, NAS 운영 DB 기준 추가.
- 초기 할 일, 배포 초안, 파일-화면 매핑 문서 정리.
- note.md 삭제 정리.
- Git 저장소 초기 기준점 설정 진행.