v1.3.0
v1.3.0 전면 재작성과 그 위의 기술 SEO 개선, 문서 정비다.
Added
- 개발 가이드를
CONTRIBUTING.md로 분리했다. 환경 설정과 명령어, 코드 규약, Git 워크플로우, 콘텐츠 작성법을 담았다. - 도구에 매이지 않는 규칙 본문을
.agents/에 두고.claude/에서 링크로 읽는 구조를 도입했다. AGENTS.md를 만들고CLAUDE.md를 그리로 가는 링크로 바꿨다.- v1.3.0 재작성을 이끌 하네스를 세웠다. 에이전트 넷과 스킬 셋으로, 재작성에서 조용히 깨지는 자리(레이어 경계와 대화상자 접근성)를 만드는 사람과 보는 사람으로 갈랐다.
- 루트 metadata에 검색 엔진 소유 확인 meta(환경 변수)와 theme-color viewport, googleBot
max-image-preview:large를 더했다. - 브라우저에서만 드러나는 회귀를 막는 e2e 스펙을 갖췄다. 대화상자 접근성과 인쇄, 축소 모션, 정적 목록을 검사한다.
- 테스트 전략을
.agents/rules/testing.md에 규칙으로 못 박았다. 테스팅 트로피를 확정 전략으로 두고 층마다 소유하는 것과 지우는 기준을 적었다. - 512px 안드로이드 아이콘을 만들어 manifest에 등록했다(설치 화면 조건 충족, maskable 포함). OG 카드와 뱃지에 심볼 마크를 넣었다.
- 프로덕션 배포가 최근 7일 안에 발행하거나 고친 글을 IndexNow(네이버와 빙)에 알린다. 실패해도 배포는 막지 않고 로그에 남긴다.
- 모든 응답에 보안 헤더 넷(nosniff, Referrer-Policy, X-Frame-Options, Permissions-Policy)을 건다.
Changed
- 저장소를 FSD 6레이어로 전면 재작성했다. UI 프리미티브를 직접 구현해 shadcn/ui와 Radix 의존을 걷어냈고, 디자인 토큰 위에서 스타일을 다시 짰다.
- 조회수 저장을 Vercel KV에서 Upstash Redis로 옮겼다.
UPSTASH_접두사 환경 변수를 읽는다. - 문서를 성격별로 나눴다. 만드는 것은
docs/product/, 보이는 것은docs/design/, 굴리는 것은docs/operations/, 생성 도구에 넣는 것은docs/prompts/에 둔다. - Node.js를 24로, pnpm을 11로 올렸다.
- 커밋 메시지 템플릿에서 이모지를 뺐다.
- 모든 페이지가 og:site_name과 og:locale, RSS 대체 링크를 낸다. Next.js의 얕은 metadata 병합으로 루트 값이 사라지던 것을
buildMetadata가 직접 내도록 바꿨다. - 사이트맵에서 changefreq와 priority를 빼고 lastmod를 글 날짜에서 계산한다. 글이 한 편뿐인 태그는 사이트맵에서 빠지고 페이지는 noindex가 된다.
- RSS 저자 표기를
dc:creator로 바꿔 이메일을 내보내지 않는다. /posts목록 전체가 초기 HTML에 실린다. useSearchParams가 목록을 클라이언트 렌더로 밀어내던 것을 URL 구독으로 바꿨다.- 웹폰트를 2MB 단일 파일 preload에서 유니코드 범위 동적 서브셋으로 바꿨다. 홈 기준 폰트 전송량이 392KB로 준다.
- BlogPosting JSON-LD에 저자 URL과 dateModified, inLanguage를 더하고 About의 Person과 같은
@id로 이었다.
Removed
- 에이전트 15개와 스킬 15종, 규칙 17개로 구성했던 기존 하네스를 걷어냈다.
- Playwright 설정과 e2e 스펙 5종을 지웠다.
Fixed
contents서브모듈이 ESLint와 Prettier 검사 대상에 들어가 커밋이 막히던 문제를 고쳤다.- lefthook이 없는 경로(
scripts/commit-msg.js)를 부르던 것을 고쳤다. - 테스트 스위트를 케이스 단위로 전수 판정해 단위와 컴포넌트를 323개에서 183개로, e2e 실행을 33개에서 17개로 줄였다. 커버리지는 0.35퍼센트포인트만 빠졌다.
- 세 동적 라우트를
dynamicParams = false로 닫아 알 수 없는 slug가 런타임에 contents/를 읽던 경로와 404 응답의 1년 CDN 캐시를 없앴다. - 404 페이지가 홈의 canonical과 OG 카드를 달고 나가던 것을 닫았다.
- 태그 링크 href의 공백이 sitemap의 퍼센트 인코딩과 어긋나던 것을 통일했다.