🤖
2286 in / 961 out / 3247 total tokens
사용자 검색 패턴을 분석해 맞춤형 장소를 추천하는 기능을 추가했다.
SearchHistoryStore를 Zustand + localStorage 조합으로 구현했다. 카테고리별 사용 빈도를 추적하고 최대 100개 히스토리를 유지한다. 추천 알고리즘은 세 가지 점수를 합산한다. 빈도(0-40), 최신성(0-30), 시간대(0-30)를 조합해 0-100점 척도로 최종 추천 점수를 계산한다.
UI에는 '자주 찾는 카테고리'와 '지금 이런 곳 어때요?' 섹션이 추가됐다. 모든 데이터는 로컬에만 저장되며 서버 전송은 없다. 히스토리가 없어도 기본 기능은 정상 동작하는 프로그레시브 강화 방식을 적용했다.
export function calculateFrequencyScore(count: number): number {
return Math.min(count / 10, 1) * 40;
}
export function calculateRecencyScore(lastUsedTimestamp: number): number {
const daysSinceLastUse = (Date.now() - lastUsedTimestamp) / (1000 * 60 * 60 * 24);
return Math.max(0, 1 - daysSinceLastUse / 30) * 30;
}
export function calculateTimeScore(category: string, currentHour: number): number {
const slot = TIME_SLOTS.find(s => currentHour >= s.startHour && currentHour < s.endHour);
return slot?.categories.includes(category) ? 30 : 0;
}712개 테스트 통과. 10개 파일 변경에 +493줄 추가.