# sori.studio 기술 명세 ## 프로젝트 개요 - **프로젝트명**: sori.studio - **유형**: 커스텀 블로그/CMS - **목표**: 개인 블로그 중심 운영, 기존 포털성 링크와 서비스 진입점은 블로그 내부 구조에 통합 - **참조**: Ghost(관리자 UX/글쓰기), Thred 테마(사용자 화면) - **현재 상태**: Nuxt 3 초기 스캐폴딩과 PostgreSQL 저장소 계층 구성 완료 - **원격 저장소**: https://git.sori.studio/zenn/sori.studio.git --- ## 화면 구조 ### 메인 화면 (3단 레이아웃) | 요소 | 크기/속성 | |------|-----------| | Header | 높이 57px, `sticky top-0`, `shrink-0` | | Shell | `min-height: 100vh`, `flex` 세로 컬럼 | | 그리드(데스크톱 `lg+`) | `items-start`, 본문(중앙) 높이에 맞춰 행이 늘어남 — **문서(`html`/`body`) 스크롤**로 긴 본문 처리(스크롤바는 브라우저 오른쪽) | | Left Aside | 너비 287px, `sticky top-[57px]`, `h-[calc(100vh-57px)]`와 `max-h` 동일(뷰포트 기준 고정 높이), 내부 상단은 `.site-sidebar-scroll`(스크롤바 숨김), 하단 푸터 `shrink-0`·상단 보더로 스크롤 영역과 구분 | | Main | 너비 720px, 별도 `overflow-y` 없음 — 뷰포트와 동일한 문서 스크롤에 포함 | | Right Aside | Left와 동일 패턴(스티키·고정 높이·내부 무스크롤바 스크롤·하단 카피라이트) | ### 메뉴 토글 - 헤더 좌측 아이콘은 브랜드 마크가 아니라 왼쪽 사이드바 열기/닫기 버튼 - 메뉴 상태는 Nuxt/Vue 상태로 관리 - 브라우저에서는 `localStorage.MENU_STATE`에 `open` 또는 `closed` 저장 - 닫힘 상태에서는 왼쪽 사이드바 폭을 0으로 줄이는 전환 애니메이션을 적용 - 헤더 우측 사용자 아이콘 버튼은 비로그인 기준 사용자 메뉴(Anonymous, Sign up, Sign in)만 표시한다. ### 공개 화면 색상 - 라이트/다크 모드는 CSS 변수로 관리 - 기본 배경, 패널, 라인, 텍스트, 보조 텍스트, 입력, 강조 버튼 색상을 분리 - 라이트 모드 기본 배경은 `#fcfcfc`로 통일하고 패널 구분은 보더로 처리 - 시스템 다크 모드는 `prefers-color-scheme: dark` 기준으로 우선 대응 - 사용자 수동 테마 전환은 `html[data-theme]`와 `localStorage.SITE_THEME`로 관리 - Thred 참고 화면처럼 사이드바와 본문은 같은 화면 안에서 구분되는 패널과 라인으로 표현 ### Post 페이지 - Main 좌우 패딩: 24px → 20px - 공개 게시물 본문은 콘텐츠 타입별 컴포넌트로 분리해 추후 스타일 변경이 쉽도록 구성 - 제목 우측 공유 버튼을 누르면 게시물 공유 모달을 연다. - 공유 모달은 게시물 썸네일/제목/요약 미리보기, X/Bluesky/Facebook/LinkedIn/Email 링크, 링크 복사 액션을 제공한다. ### 공개 목록·상세의 발행일 표시 - API의 ISO 8601 `publishedAt`를 공개 UI에서는 로컬 날짜 기준 `YYYY.MM.DD`로 표시한다. - 변환은 `composables/formatPostDate.js`의 `formatPostDate`를 사용한다. - `