#리팩토링
12개의 게시물
GitHub Actions로 Daily AI 포스트 자동 발행 설정
🤖 1059 in / 713 out / 1772 total tokens GitHub Actions 워크플로우를 만들어 매시간 자동으로 AI 뉴스 다이제스트를 발행하도록 했다. API 엔드포인트 호출 방식으로, BLOG_API_KEY 시크릿을 사용해 인증한다. 기존에 하드코딩돼 있던 AI 클라이언트 설정을 getAIConfig 함수로 통합했다. gen
radarlog.kr 도메인 적용하고 AI 프로바이더 멀티 지원으로 변경
🤖 2296 in / 1380 out / 3676 total tokens 커스텀 도메인을 radarlog.kr로 확정했다. site config, docs, env example, seed script 등 모든 URL 참조를 기존 railway 서브도메인에서 새 도메인으로 일괄 변경했다. AI 프로바이더를 동적으로 선택할 수 있게 개선했다. Anth
게시글 slug를 숫자 방식으로 전환했다
🤖 1211 in / 782 out / 1993 total tokens 기존엔 제목을 한글/영문 혼합으로 변환해 slug를 만들었다. URL이 길어지고 가독성도 좋지 않았다. 그래서 단순 순번 숫자로 바꿨다. 새 글 생성 시 prisma.post.count()로 현재 개수를 구하고 +1한 값을 slug로 쓴다. 기존 글들은 /api/admin/pos
마크다운 프리뷰, 직접 짜다가 라이브러리로 갈아탐
🤖 797 in / 995 out / 1792 total tokens 에디터 페이지에서 쓰던 regex 기반 renderMarkdown 함수를 걷어내고 react-markdown 기반의 MarkdownPreview 컴포넌트로 교체했다. 순수 정규식으로 마크다운을 파싱하려니 엣지 케이스가 끝도 없었고, 코드 블록 안에서 이스케이프 처리하다가 머리가 아팠
로그인 페이지 UI 개선과 레이아웃 분리
🤖 779 in / 678 out / 1457 total tokens 로그인 페이지를 깔끔하게 다듬었다. 큰 입력창과 카드 레이아웃을 적용해서 시인성을 높였고, 전체적으로 더 모던한 느낌으로 변경했다. AppShell 컴포넌트를 새로 만들어서 레이아웃 로직을 분리했다. usePathname으로 현재 경로를 확인해서 로그인 페이지일 때는 Navbar를
TypeScript 타입 에러 3개를 0개로: 테스트 Mock 타입 확장하기
🤖 771 in / 792 out / 1563 total tokens search-cache.test.ts에서 발생하던 TypeScript 타입 에러 3개를 모두 해결했다. 기존 MockPlace 타입이 실제 DetourResult 타입과 맞지 않아 에러가 발생했다. MockPlace를 MockDetourResult로 확장하고, Place와 Rout
ESLint any 타입 경고 21개를 모두 해결했다
🤖 1442 in / 604 out / 2046 total tokens v0.52.0에서 @typescript-eslint/no-explicit-any 경고 21개를 전부 제거했다. 이제 코드베이스에 any 타입이 없다. 주요 변경은 명시적 타입 정의다. PersonalizedDetourResult는 개인화 점수가 포함된 결과를, CacheQuery
LocaleContext ESLint 에러 해결과 useState lazy initialization
🤖 794 in / 722 out / 1516 total tokens v0.49.0에서 LocaleContext의 ESLint set-state-in-effect 경고를 해결했다. 기존에는 useEffect 내부에서 localStorage 값을 읽어 setState를 호출하는 패턴이었다. 이는 React 팀에서 권장하지 않는 방식이라 ESLint가
v0.25.0: any 타입 정리하고 린트 0 달성했다
🤖 1062 in / 625 out / 1687 total tokens 코드 품질 개선 작업을 진행했다. 9개였던 린트 경고를 모두 해결했고, any 타입을 구체적인 인터페이스로 교체해 타입 안전성을 높였다. ErrorBoundary와 performance 모듈에서 Sentry 관련 any 타입이 문제였다. WindowWithSentry와 Sentr
검색창을 button으로 변경하여 UX 개선
🤖 389 in / 612 out / 1001 total tokens 검색창을 input에서 button으로 교체했다. 기존엔 input을 클릭하면 검색 오버레이가 열리는 구조였다. 문제는 실제로 텍스트를 입력할 수 없는데 input처럼 보인다는 점. 사용자가 커서가 깜빡이는 걸 보고 입력을 시도하다 혼란을 겪을 수 있다. 그래서 아예 button으
접근성 라벨 보완과 죽은 코드 정리
🤖 1043 in / 1761 out / 2804 total tokens 검색 관련 컴포넌트의 접근성을 개선했다. 스크린 리더 사용자가 버튼의 목적을 명확히 인식할 수 있도록 aria-label을 체계적으로 추가했다. SearchOverlay 닫기 버튼은 '뒤로 가기'로, 저장된 장소 카드는 '{장소명} 카테고리로 검색'으로, ResultCard 전
v3.3.0: 봇/게임 테스트 35개 추가, 커버리지 보강
🤖 1557 in / 839 out / 2396 total tokens 이번 커밋은 봇과 게임 어댑터의 테스트 커버리지를 대폭 보강했다. 총 35개 테스트가 추가되어 127개에서 162개로 늘었고, 전부 통과다. FlappyBirdBot은 신규 테스트 파일을 만들어 decide()의 파이프 감지, _pendingTick 흐름, _findNextPip