2026-05-23
/olenmane → /feed 전면 리네이밍 + 인스타 스타일 + 메인 D 옵션 split
- 라우트 — app/olenmane → app/feed, app/admin/olen → app/admin/feed, app/api/admin/olen → app/api/admin/feed. next.config.ts 에 /olenmane(/:id) → /feed(/:id) 308 redirect 추가 (외부 inbound 보호)
- DB — content.type 'olen' → 'feed' UPDATE (3 row), id prefix 'olen-' → 'feed-' UPDATE (3 row). content_links / comments 참조 0 이라 마이그 단순. ID 생성 함수도 'feed-' prefix
- 내부 식별자 — Olen* → Feed* (17개 함수/타입: listFeeds, getFeedById, getFeedGaps, FeedListItem, FeedFullItem, FeedGap, FeedAdminItem, ...). 파일명 olen-* → feed-* (lib + components). lib/olen-data.ts → lib/feed-admin.ts (feed-data.ts 가 ARCH-006 feed.json API 용 별도 모듈이라 naming 충돌 회피)
- CSS — .olen-* → .feed-*, .olenmane → .feed. 컴포넌트 wrapper className 도 함께 (sed 의 .olenmane 패턴이 dot 만 매치해서 JSX className 누락 → 두 단계 적용)
- cache tags — CONTENT_TAGS.olen → .feed, 'content:olen' → 'content:feed'. ContentTagKey 타입 자동 갱신
- 네비 — Feed 항목을 4곳 모두 맨 앞 (app/header.tsx NAV / app/mobile-bottom-nav.tsx ITEMS / components/v2/footer.tsx EXPLORE / components/v2/mock-data.ts). admin 사이드바 '오랜만에' → '피드 관리'
- 사용자 노출 텍스트 — /feed hero eyebrow 'OLENMANE' → 'FEED', title '오랜만에' → '피드', sub '디노의 기록'. /feed/[id] back link, metadata 다 통일
- 인스타 스타일 — /feed 카드에 content 본문 inline (trusted 운영자 입력). detail 페이지로의 link 제거 (라우트는 유지). lib/db/feed-queries.ts 의 listFeeds 가 FeedListItem → FeedFullItem (contentHtml 포함) 반환. 썸네일 별도 img 제거 (본문 안 이미지와 중복)
- 관계 태그 표시 — feed-card.tsx 가 이전엔 kind 만 ('· person'). value 누락 → '👤 김민수 / 📍 시부야 / 🎯 활동 / 🏷️ 토픽' 형식으로 icon + value 표시
- 메인 페이지 D 옵션 — components/v2/feature.tsx (01 계속 흐른다) 가 records 박스를 2-col grid 로. 왼쪽 '나의 기록' 5개 (lifePosts), 오른쪽 'Feed' 5개 + 전체 보기 → 링크. Feature 가 async server component 로 변환 (listFeeds() 직접 await). lib/v2-data.ts 의 records limit 4 → 5
- 비교 시도 후 정리 — Hero 직후 옵션 A (full card) + 옵션 C (mini widget) 잠시 같이 박았다가 D 선택 후 둘 다 삭제 (components/v2/feed-section.tsx, feed-widget.tsx)
- 필사 카테고리 사진 풀 제외 — lib/random-pick.ts 의 buildPhotoPool 에 PHOTO_POOL_EXCLUDE_CATEGORIES 추가 ('한글 필사', '영문 필사', '하루 15분 필사'). 처음 추측한 '한글필사'/'영문필사' 공백 없는 이름은 실제 DB 와 불일치라 fix
- popular 페이지 grid 깨짐 fix — grid-cols-[2.5rem_1fr_auto] 의 1fr default minmax(auto,1fr) 가 chip 의 wrappable text 를 min 으로 잡아 column 폭 squeeze. minmax(0,1fr) 강제 + chip/time whitespace-nowrap 으로 한 줄 강제