diff --git a/components/features/history/ActivityTimelineItem.tsx b/components/features/history/ActivityTimelineItem.tsx index fc7e70b..614ed5d 100644 --- a/components/features/history/ActivityTimelineItem.tsx +++ b/components/features/history/ActivityTimelineItem.tsx @@ -33,6 +33,7 @@ export default function ActivityTimelineItem({ item, isLast }: Props) { const Icon = meta.icon; const href = getHref(item); const title = + item.content?.translatedTitle ?? item.content?.title ?? item.post?.title ?? (item.actionType === "daily_login" ? "출석을 완료했어요" : null); diff --git a/components/features/history/HistoryTimelineItem.tsx b/components/features/history/HistoryTimelineItem.tsx index b20182a..afad05a 100644 --- a/components/features/history/HistoryTimelineItem.tsx +++ b/components/features/history/HistoryTimelineItem.tsx @@ -36,7 +36,7 @@ export default function HistoryTimelineItem({ item, isLast }: Props) { const meta = ACTION_META[item.actionType]; const Icon = meta.icon; const href = getHref(item); - const title = item.content?.title ?? item.post?.title ?? null; + const title = item.content?.translatedTitle ?? item.content?.title ?? item.post?.title ?? null; const preview = item.content?.preview ?? null; const card = ( diff --git a/components/features/home/RecommendedContents.tsx b/components/features/home/RecommendedContents.tsx index 793a624..96f932c 100644 --- a/components/features/home/RecommendedContents.tsx +++ b/components/features/home/RecommendedContents.tsx @@ -25,7 +25,7 @@ export function RecommendedContents({ items }: RecommendedContentsProps) { {item.thumbnailUrl ? ( {item.title}

- {item.title} + {item.translatedTitle ?? item.title}

{item.sourceName} diff --git a/components/features/home/SourceLogo.tsx b/components/features/home/SourceLogo.tsx index aab9d30..1b41fc7 100644 --- a/components/features/home/SourceLogo.tsx +++ b/components/features/home/SourceLogo.tsx @@ -9,11 +9,12 @@ type LogoConfig = { src: string; bg?: string; innerPadding?: number; + iconColor?: string; }; const SOURCE_LOGO: Record = { velog: { src: "/icons/sources/velog.svg" }, - naver_d2: { src: "/icons/sources/naver.svg", bg: "#03C75A", innerPadding: 5 }, + naver_d2: { src: "/icons/sources/naver.svg", bg: "#03C75A", innerPadding: 6 }, kakao_tech: { src: "/icons/sources/kakao.svg", bg: "#FEE500", @@ -21,6 +22,50 @@ const SOURCE_LOGO: Record = { }, toss_tech: { src: "/icons/sources/toss.png" }, oliveyoung_tech: { src: "/icons/sources/oliveyoung.svg" }, + woowahan_tech: { src: "/icons/sources/woowahan_tech.png", bg: "#FFFFFF" }, + socar_tech: { + src: "/icons/sources/socar_tech.png", + bg: "#FFFFFF", + innerPadding: 2, + }, + skplanet_tech: { src: "/icons/sources/skplanet_tech.svg", bg: "#FFFFFF" }, + nongshim_cloud_tech: { + src: "/icons/sources/nongshim_cloud_tech.png", + bg: "#FFFFFF", + innerPadding: 2, + }, + kakaopay_tech: { src: "/icons/sources/kakaopay_tech.png", bg: "#FEE500" }, + meta_engineering: { + src: "/icons/sources/meta_engineering.svg", + bg: "#FFFFFF", + iconColor: "#0668E1", + }, + cloudflare_blog: { src: "/icons/sources/cloudflare_blog.svg", bg: "#FFFFFF" }, + github_blog: { src: "/icons/sources/github_blog.svg", bg: "#FFFFFF" }, + aws_korea_tech: { src: "/icons/sources/aws_korea_tech.svg", bg: "#FFFFFF" }, + ms_devblogs: { + src: "/icons/sources/ms_devblogs.svg", + bg: "#FFFFFF", + innerPadding: 2, + }, + nvidia_developer: { + src: "/icons/sources/nvidia_developer.svg", + bg: "#FFFFFF", + iconColor: "#77B900", + }, + grab_engineering: { + src: "/icons/sources/grab_engineering.svg", + bg: "#FFFFFF", + iconColor: "#00983A", + }, + google_developers: { + src: "/icons/sources/google_developers.svg", + bg: "#FFFFFF", + innerPadding: 2, + }, + spring_blog: { src: "/icons/sources/spring_blog.svg", bg: "#FFFFFF" }, + flex_tech: { src: "/icons/sources/flex_tech.jpg", bg: "#FFFFFF" }, + nextjs_blog: { src: "/icons/sources/nextjs_blog.svg", bg: "#FFFFFF" }, }; export function SourceLogo({ sourceName, size = 17 }: SourceLogoProps) { @@ -50,14 +95,34 @@ export function SourceLogo({ sourceName, size = 17 }: SourceLogoProps) { padding: pad > 0 ? pad : undefined, }} > - {/* eslint-disable-next-line @next/next/no-img-element */} - {sourceName} + {config.iconColor ? ( + + ) : ( + /* eslint-disable-next-line @next/next/no-img-element */ + {sourceName} + )} ); } diff --git a/components/features/landing/LandingPage.tsx b/components/features/landing/LandingPage.tsx index 39f44b2..9c0ba60 100644 --- a/components/features/landing/LandingPage.tsx +++ b/components/features/landing/LandingPage.tsx @@ -311,9 +311,124 @@ const SOURCES = [ logo: "/icons/sources/oliveyoung.svg", logoPadding: "p-1.5", }, + { + name: "우아한형제들", + sub: "기술 블로그", + containerBg: "bg-white", + logo: "/icons/sources/woowahan_tech.png", + logoPadding: "", + }, + { + name: "SOCAR Tech", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/socar_tech.png", + logoPadding: "p-1.5", + }, + { + name: "SK Planet", + sub: "기술 블로그", + containerBg: "bg-white", + logo: "/icons/sources/skplanet_tech.svg", + logoPadding: "p-1", + }, + { + name: "농심 클라우드", + sub: "기술 블로그", + containerBg: "bg-white", + logo: "/icons/sources/nongshim_cloud_tech.png", + logoPadding: "p-1.5", + }, + { + name: "KakaoPay Tech", + sub: "", + containerBg: "bg-[#FEE500]", + logo: "/icons/sources/kakaopay_tech.png", + logoPadding: "", + }, + { + name: "Meta Engineering", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/meta_engineering.svg", + logoPadding: "p-1.5", + iconColor: "#0668E1", + }, + { + name: "Cloudflare", + sub: "Blog", + containerBg: "bg-white", + logo: "/icons/sources/cloudflare_blog.svg", + logoPadding: "p-1", + }, + { + name: "GitHub Blog", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/github_blog.svg", + logoPadding: "p-1.5", + }, + { + name: "AWS Korea", + sub: "Tech", + containerBg: "bg-white", + logo: "/icons/sources/aws_korea_tech.svg", + logoPadding: "p-1.5", + }, + { + name: "Microsoft", + sub: "DevBlogs", + containerBg: "bg-white", + logo: "/icons/sources/ms_devblogs.svg", + logoPadding: "p-2", + }, + { + name: "NVIDIA", + sub: "Developer", + containerBg: "bg-white", + logo: "/icons/sources/nvidia_developer.svg", + logoPadding: "p-1.5", + iconColor: "#77B900", + }, + { + name: "Grab", + sub: "Engineering", + containerBg: "bg-white", + logo: "/icons/sources/grab_engineering.svg", + logoPadding: "p-1.5", + iconColor: "#00983A", + }, + { + name: "Google Developers", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/google_developers.svg", + logoPadding: "p-2", + }, + { + name: "Spring Blog", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/spring_blog.svg", + logoPadding: "p-2", + }, + { + name: "Flex", + sub: "기술 블로그", + containerBg: "bg-white", + logo: "/icons/sources/flex_tech.jpg", + logoPadding: "", + }, + { + name: "Next.js Blog", + sub: "", + containerBg: "bg-white", + logo: "/icons/sources/nextjs_blog.svg", + logoPadding: "p-2", + }, { name: "Medium", - sub: "당근 · 무신사 · 마이리얼트립 · 넷플릭스", + sub: "당근 · 무신사 · 마이리얼트립 · 넷플릭스 · 에어비앤비 · 핀터레스트 · 여기어때 · Flutter", containerBg: "bg-white", logo: "/icons/sources/medium.svg", logoPadding: "", @@ -411,12 +526,29 @@ function FeaturesSection() {
- {/* eslint-disable-next-line @next/next/no-img-element */} - {source.name} + {"iconColor" in source && source.iconColor ? ( + + ) : ( + /* eslint-disable-next-line @next/next/no-img-element */ + {source.name} + )}

diff --git a/lib/mock/home-search-results.ts b/lib/mock/home-search-results.ts index 26ad2f9..a88ed1b 100644 --- a/lib/mock/home-search-results.ts +++ b/lib/mock/home-search-results.ts @@ -188,6 +188,206 @@ const MOCK_SEARCH_RESULTS: SearchResultItem[] = [ tags: ["SystemDesign", "Backend", "Architecture"], url: "/home/sr-017", }, + { + id: "sr-018", + title: "배달의민족 주문 시스템 대규모 트래픽 처리 전략", + sourceName: "woowahan_tech", + publishedAt: "2026-03-27", + thumbnailUrl: null, + summary: "우아한형제들 주문 시스템이 피크 타임 트래픽을 처리하는 방식을 소개합니다. 이벤트 기반 아키텍처, 메시지 큐, 서킷 브레이커 패턴을 실제 사례와 함께 설명합니다.", + tags: ["Backend", "Architecture", "Java"], + url: "/home/sr-018", + }, + { + id: "sr-019", + title: "쏘카 실시간 차량 위치 추적 시스템 구축기", + sourceName: "socar_tech", + publishedAt: "2026-03-26", + thumbnailUrl: null, + summary: "GPS 데이터를 실시간으로 처리해 차량 위치를 추적하는 시스템을 어떻게 구축했는지 설명합니다. WebSocket, Redis Pub/Sub, 지도 렌더링 최적화 전략을 다룹니다.", + tags: ["Backend", "Redis", "WebSocket"], + url: "/home/sr-019", + }, + { + id: "sr-020", + title: "SK Planet T-map 경로 탐색 알고리즘 개선기", + sourceName: "skplanet_tech", + publishedAt: "2026-03-25", + thumbnailUrl: null, + summary: "T-map 경로 탐색 성능을 개선하기 위해 다익스트라 알고리즘을 최적화한 과정을 공유합니다. 실시간 교통 데이터 반영과 캐싱 전략도 함께 소개합니다.", + tags: ["알고리즘", "Backend", "Optimization"], + url: "/home/sr-020", + }, + { + id: "sr-021", + title: "농심 클라우드 전환 여정 — On-premise에서 AWS로", + sourceName: "nongshim_cloud_tech", + publishedAt: "2026-03-24", + thumbnailUrl: null, + summary: "전통 제조 기업인 농심이 온프레미스 인프라를 AWS 클라우드로 전환하는 과정에서 겪은 시행착오와 해결 방법을 공유합니다. 레거시 시스템 마이그레이션 전략도 포함됩니다.", + tags: ["AWS", "DevOps", "Cloud"], + url: "/home/sr-021", + }, + { + id: "sr-022", + title: "카카오페이 결제 시스템 안정성 확보를 위한 장애 대응 전략", + sourceName: "kakaopay_tech", + publishedAt: "2026-03-23", + thumbnailUrl: null, + summary: "금융 결제 시스템에서 요구되는 높은 가용성을 달성하기 위해 카카오페이가 운영하는 장애 감지, 자동 복구, 롤백 전략을 소개합니다.", + tags: ["Backend", "Architecture", "DevOps"], + url: "/home/sr-022", + }, + { + id: "sr-023", + title: "Meta의 대규모 소셜 그래프 저장 시스템 TAO 소개", + sourceName: "meta_engineering", + publishedAt: "2026-03-22", + thumbnailUrl: null, + summary: "Meta가 수십억 명의 소셜 관계를 저장하고 조회하기 위해 개발한 분산 그래프 데이터베이스 TAO의 아키텍처와 설계 원칙을 설명합니다.", + tags: ["Architecture", "Database", "Backend"], + url: "/home/sr-023", + }, + { + id: "sr-024", + title: "Cloudflare Workers로 엣지 컴퓨팅 시작하기", + sourceName: "cloudflare_blog", + publishedAt: "2026-03-21", + thumbnailUrl: null, + summary: "Cloudflare Workers를 사용해 엣지에서 JavaScript를 실행하는 방법을 소개합니다. 지연 시간 감소, 전역 배포, KV 스토리지 활용법을 실전 예제와 함께 설명합니다.", + tags: ["Edge", "JavaScript", "DevOps"], + url: "/home/sr-024", + }, + { + id: "sr-025", + title: "GitHub Actions로 모노레포 CI/CD 파이프라인 최적화하기", + sourceName: "github_blog", + publishedAt: "2026-03-20", + thumbnailUrl: null, + summary: "모노레포 환경에서 변경된 패키지만 선택적으로 빌드·테스트하는 GitHub Actions 워크플로우 구성 방법을 소개합니다. 캐싱 전략과 병렬 실행으로 빌드 시간을 단축합니다.", + tags: ["CI/CD", "DevOps", "GitHub"], + url: "/home/sr-025", + }, + { + id: "sr-026", + title: "AWS Lambda와 EventBridge로 서버리스 이벤트 파이프라인 구축하기", + sourceName: "aws_korea_tech", + publishedAt: "2026-03-19", + thumbnailUrl: null, + summary: "AWS Lambda와 EventBridge를 조합해 확장 가능한 서버리스 이벤트 처리 파이프라인을 구축하는 방법을 단계별로 안내합니다. 비용 최적화 팁도 함께 소개합니다.", + tags: ["AWS", "Serverless", "DevOps"], + url: "/home/sr-026", + }, + { + id: "sr-027", + title: "Visual Studio Code 확장 개발 입문 — Language Server Protocol 활용", + sourceName: "ms_devblogs", + publishedAt: "2026-03-18", + thumbnailUrl: null, + summary: "VS Code 확장을 개발하는 방법과 Language Server Protocol(LSP)을 사용해 커스텀 언어 지원을 추가하는 과정을 소개합니다.", + tags: ["VSCode", "TypeScript", "Tools"], + url: "/home/sr-027", + }, + { + id: "sr-028", + title: "CUDA 프로그래밍 입문 — GPU 병렬 연산으로 딥러닝 추론 가속화", + sourceName: "nvidia_developer", + publishedAt: "2026-03-17", + thumbnailUrl: null, + summary: "CUDA를 활용해 GPU에서 병렬 연산을 수행하는 기초를 소개합니다. 딥러닝 모델 추론 성능을 개선하기 위한 메모리 최적화와 커널 튜닝 기법을 다룹니다.", + tags: ["CUDA", "AI/ML", "Python"], + url: "/home/sr-028", + }, + { + id: "sr-029", + title: "Grab의 멀티리전 데이터 동기화 전략", + sourceName: "grab_engineering", + publishedAt: "2026-03-16", + thumbnailUrl: null, + summary: "동남아시아 전역에 서비스를 제공하는 Grab이 멀티리전 환경에서 데이터 일관성을 유지하는 방법을 소개합니다. CRDT, 이벤트 소싱, CDC 패턴을 활용한 사례를 설명합니다.", + tags: ["Architecture", "Database", "Backend"], + url: "/home/sr-029", + }, + { + id: "sr-030", + title: "Google의 ML 모델 서빙 인프라 — Vertex AI 아키텍처 공개", + sourceName: "google_developers", + publishedAt: "2026-03-15", + thumbnailUrl: null, + summary: "Google이 Vertex AI를 통해 머신러닝 모델을 대규모로 서빙하는 인프라 아키텍처를 소개합니다. 자동 스케일링, A/B 테스트, 모델 버전 관리 전략도 포함합니다.", + tags: ["AI/ML", "Cloud", "Architecture"], + url: "/home/sr-030", + }, + { + id: "sr-031", + title: "Spring Boot 3.x 마이그레이션 — Jakarta EE 전환 완벽 가이드", + sourceName: "spring_blog", + publishedAt: "2026-03-14", + thumbnailUrl: null, + summary: "Spring Boot 2.x에서 3.x로 업그레이드할 때 필수로 확인해야 할 Jakarta EE 네임스페이스 변경, 보안 설정, 자동 구성 변화를 실전 체크리스트와 함께 설명합니다.", + tags: ["Spring", "Java", "Backend"], + url: "/home/sr-031", + }, + { + id: "sr-032", + title: "Flex HR 데이터 기반 조직 관리 시스템 설계기", + sourceName: "flex_tech", + publishedAt: "2026-03-13", + thumbnailUrl: null, + summary: "HR 플랫폼 Flex가 수만 명의 직원 데이터를 안전하게 처리하고 조직 관리 기능을 구현하기 위해 선택한 아키텍처와 데이터 모델링 전략을 소개합니다.", + tags: ["Backend", "Architecture", "Database"], + url: "/home/sr-032", + }, + { + id: "sr-033", + title: "Next.js 15 App Router 캐싱 전략 대변화 — 무엇이 달라졌나", + sourceName: "nextjs_blog", + publishedAt: "2026-03-12", + thumbnailUrl: null, + summary: "Next.js 15에서 변경된 fetch 캐싱 기본값과 새로운 캐싱 API를 정리합니다. 기존 프로젝트에서 마이그레이션할 때 주의해야 할 Breaking Change도 함께 안내합니다.", + tags: ["Next.js", "React", "Frontend"], + url: "/home/sr-033", + }, + { + id: "sr-034", + title: "Airbnb의 프론트엔드 모노레포 전환기 — Turborepo 도입 사례", + sourceName: "Medium_airbnb-engineering", + publishedAt: "2026-03-11", + thumbnailUrl: null, + summary: "Airbnb 엔지니어링 팀이 수십 개의 프론트엔드 패키지를 Turborepo 기반 모노레포로 전환하면서 겪은 경험과 성능 개선 결과를 공유합니다.", + tags: ["Frontend", "Monorepo", "React"], + url: "/home/sr-034", + }, + { + id: "sr-035", + title: "Flutter 3.x 성능 최적화 — 렌더링 파이프라인 완전 분석", + sourceName: "Medium_flutter", + publishedAt: "2026-03-10", + thumbnailUrl: null, + summary: "Flutter의 렌더링 파이프라인 구조를 분석하고 앱 성능을 개선하기 위한 위젯 리빌드 최소화, Repaint Boundary 활용, Skia vs Impeller 전환 전략을 소개합니다.", + tags: ["Flutter", "Mobile", "Performance"], + url: "/home/sr-035", + }, + { + id: "sr-036", + title: "여기어때 검색 시스템 고도화 — Elasticsearch 도입기", + sourceName: "Medium_gccompany", + publishedAt: "2026-03-09", + thumbnailUrl: null, + summary: "여기어때가 숙박 검색 품질 향상을 위해 Elasticsearch를 도입한 과정을 설명합니다. 형태소 분석기 설정, 동의어 사전 구축, 검색 랭킹 튜닝 전략을 다룹니다.", + tags: ["Elasticsearch", "Backend", "Search"], + url: "/home/sr-036", + }, + { + id: "sr-037", + title: "Pinterest의 이미지 추천 알고리즘 — 수십억 핀을 실시간으로 랭킹하기", + sourceName: "Medium_pinterest-engineering", + publishedAt: "2026-03-08", + thumbnailUrl: null, + summary: "Pinterest가 수십억 개의 이미지 중 사용자에게 맞는 핀을 실시간으로 추천하기 위해 사용하는 두 단계 랭킹 시스템과 임베딩 기반 유사도 검색 방식을 소개합니다.", + tags: ["AI/ML", "Recommendation", "Backend"], + url: "/home/sr-037", + }, ]; export function searchMockResults(query: string): SearchResultItem[] { diff --git a/public/icons/sources/aws_korea_tech.svg b/public/icons/sources/aws_korea_tech.svg new file mode 100644 index 0000000..39f9762 --- /dev/null +++ b/public/icons/sources/aws_korea_tech.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/icons/sources/cloudflare_blog.svg b/public/icons/sources/cloudflare_blog.svg new file mode 100644 index 0000000..d014bdc --- /dev/null +++ b/public/icons/sources/cloudflare_blog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/sources/flex_tech.jpg b/public/icons/sources/flex_tech.jpg new file mode 100644 index 0000000..bc31b26 Binary files /dev/null and b/public/icons/sources/flex_tech.jpg differ diff --git a/public/icons/sources/github_blog.svg b/public/icons/sources/github_blog.svg new file mode 100644 index 0000000..538ec5b --- /dev/null +++ b/public/icons/sources/github_blog.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/public/icons/sources/google_developers.svg b/public/icons/sources/google_developers.svg new file mode 100644 index 0000000..57b9431 --- /dev/null +++ b/public/icons/sources/google_developers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/sources/grab_engineering.svg b/public/icons/sources/grab_engineering.svg new file mode 100644 index 0000000..5266c7e --- /dev/null +++ b/public/icons/sources/grab_engineering.svg @@ -0,0 +1 @@ +Grab \ No newline at end of file diff --git a/public/icons/sources/kakaopay_tech.png b/public/icons/sources/kakaopay_tech.png new file mode 100644 index 0000000..9ec2a43 Binary files /dev/null and b/public/icons/sources/kakaopay_tech.png differ diff --git a/public/icons/sources/meta_engineering.svg b/public/icons/sources/meta_engineering.svg new file mode 100644 index 0000000..d9a1631 --- /dev/null +++ b/public/icons/sources/meta_engineering.svg @@ -0,0 +1 @@ +Meta \ No newline at end of file diff --git a/public/icons/sources/ms_devblogs.svg b/public/icons/sources/ms_devblogs.svg new file mode 100644 index 0000000..5334aa7 --- /dev/null +++ b/public/icons/sources/ms_devblogs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons/sources/nextjs_blog.svg b/public/icons/sources/nextjs_blog.svg new file mode 100644 index 0000000..6a08047 --- /dev/null +++ b/public/icons/sources/nextjs_blog.svg @@ -0,0 +1 @@ + diff --git a/public/icons/sources/nongshim_cloud_tech.png b/public/icons/sources/nongshim_cloud_tech.png new file mode 100644 index 0000000..6b142f9 Binary files /dev/null and b/public/icons/sources/nongshim_cloud_tech.png differ diff --git a/public/icons/sources/nvidia_developer.svg b/public/icons/sources/nvidia_developer.svg new file mode 100644 index 0000000..2c7ff66 --- /dev/null +++ b/public/icons/sources/nvidia_developer.svg @@ -0,0 +1 @@ +NVIDIA \ No newline at end of file diff --git a/public/icons/sources/skplanet_tech.svg b/public/icons/sources/skplanet_tech.svg new file mode 100644 index 0000000..b2cf2b6 --- /dev/null +++ b/public/icons/sources/skplanet_tech.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/sources/socar_tech.png b/public/icons/sources/socar_tech.png new file mode 100644 index 0000000..3f4236e Binary files /dev/null and b/public/icons/sources/socar_tech.png differ diff --git a/public/icons/sources/spring_blog.svg b/public/icons/sources/spring_blog.svg new file mode 100644 index 0000000..9a10e7f --- /dev/null +++ b/public/icons/sources/spring_blog.svg @@ -0,0 +1 @@ + diff --git a/public/icons/sources/woowahan_tech.png b/public/icons/sources/woowahan_tech.png new file mode 100644 index 0000000..b6aa652 Binary files /dev/null and b/public/icons/sources/woowahan_tech.png differ diff --git a/types/content.ts b/types/content.ts index 042973c..ef26b70 100644 --- a/types/content.ts +++ b/types/content.ts @@ -21,7 +21,7 @@ export type AiSummaryResponse = ApiResponse; export interface Content { id: string; title: string; - translatedTitle?: string | null; + translatedTitle: string | null; author: string | null; sourceName: string; preview: string; diff --git a/types/history.ts b/types/history.ts index 9d0259c..6990e46 100644 --- a/types/history.ts +++ b/types/history.ts @@ -26,6 +26,7 @@ export type ActivityFilterValue = ActivityActionType | "answer"; export interface HistoryContentRef { id: string; title: string; + translatedTitle: string | null; preview?: string; }