← Cockpit Wireframes
Venue Finder · 코트 찾기
Approved — build queue
Venue Finder · 코트 찾기
ArchiveStrip Map · 세션 스트립 전체 시나리오Headers · 헤더 아이콘Compaction — 일정 · 코트 · 스코어카드Compaction — 클럽 상세 · 홈Compaction — 기록 · 프로필Live anchor — 진행 중 밴드Density · 카드 밀도토스트 — 리디자인 제안위저드 내비게이션 — 결정 보드드래프트 복원 — 무음 복원클럽 조 편성 — 모델 결정 보드Session Detail — Redesign · 일정Venue Detail — Redesign · 테니스장Profile Detail — Redesign · 프로필Tournament Detail — Redesign · 대항전Applicant Detail — Redesign · 가입 심사Canvas Migration — 회비 · 멤버 · 규칙Record Detail — Redesign · 기록Venue Filters · 코트 필터 재구성
Approved 2026-09-07 — the build spec until it ships
Interactive kit · grounded in code

Venue Finder · 코트 찾기

Recommended pathStreamline the finder around the enriched corpus
1Near-me default browse when location is granted — province sections are the fallback only.
2Zero-query state is useful, not empty: 저장한 코트 → 최근 본 코트 → 가까운 코트; pick intent orders 클럽 코트 → 최근 선택 → search.
3Recent searches sit under the field on focus, above the results.
4Kind-aware facets gain 지금 영업 중 and 무료; the dead verification toggle is dropped.
5Card v3 adds ★rating and an open-now dot to the shipped price/distance/facet anatomy.
6샵 cards swap the court-fact row for 영업시간·전화.
Owner's word needed → promoting rating/reviewCount/open-now into the list projection (one data-API change)
Data-API change`rating`/`reviewCount` (00560) and 지금 영업 중 (`operatingHours`) already exist on `DirectoryVenue` but are selected for the DETAIL screen only — promoting them into the LIST projection is the one change; `count_venues_by_view` is unchanged.
1. 탐색 · 시작 — near-me zero-query
코트 찾기
테니스장 이름·지역으로 검색
전체 3,341테니스장 2,489연습장 848샵 189즐겨찾기 4
가까운 순
이름순
저장한 코트2곳
📍
잠실종합운동장 테니스장송파구 잠실동 · 1.2 km
🔖
📍
올림픽공원 테니스장송파구 방이동 · 2.4 km
🔖
최근 본 코트
📍
방이동 실내테니스장송파구 방이동 · 3.1 km
가까운 코트현재 위치 기준
잠실종합운동장 테니스장인증됨
1.2 km · 송파구 잠실동코트 4면 💡
평일 1만원~★4.6 (128)
● 영업 중
올림픽공원 테니스장인증됨
2.4 km · 송파구 방이동코트 6면 🏠 💡
무료★4.8 (342)
저장한 코트 → 최근 본 코트 → 가까운 코트(card v3) — 쿼리 없이도 유용해요. 가까운 순이 기본값, 이름순/province sections은 위치 거부 시 fallback.
2. 탐색 · 필터 — 영업 중/무료 + counts
코트 찾기
전체 3,341테니스장 2,489연습장 848샵 189즐겨찾기 4
테니스장 이름·지역으로 검색4
서울
송파구
가까운 순
이름순
실내야간조명주차샤워예약 가능공공지금 영업 중무료
송파구 테니스장 37곳
잠실종합운동장 테니스장인증됨
1.2 km · 송파구 잠실동코트 4면 💡
평일 1만원~★4.6 (128)
● 영업 중
방이동 실내테니스장미확인
3.1 km · 송파구 방이동코트 2면 🏠
지금 영업 중/무료가 새 팻말(Naver 요일별 시간·feeSchedule)이고, 확인된 곳만 토글은 폐지 — trust는 카드 배지로만, 필터로는 절대 아니에요. 배지 숫자(4)=지역+구+팻말 2개.
3. 검색 — recent searches + Naver tail
코트 찾기
양재
최근 검색
양재 시민의숲송파구올림픽공원 테니스장
양재 시민의숲 테니스장인증됨
0.8 km · 서초구 양재동코트 8면 💡
평일 8천원~★4.4 (95)
● 영업 중
네이버 검색 결과
N
양재역 스포츠센터서초구 양재동 12-3
네이버에서 찾음 · 저장하면 추가돼요
ONE field, one intent — name/alias/구/동, server fuzzy (shipped). Recent searches sit under the field on focus, above the results.
4. 선택 — 클럽 코트 → 최근 선택 → CTA
코트 찾기
테니스장 이름·지역으로 검색
전체 3,341테니스장 2,489연습장 848샵 189즐겨찾기 4
클럽 코트2곳
잠실종합운동장 테니스장인증됨
1.2 km · 송파구 잠실동코트 4면 💡
평일 1만원~★4.6 (128)
● 영업 중
방이동 실내테니스장미확인
3.1 km · 송파구 방이동코트 2면 🏠
최근 선택
📍
올림픽공원 테니스장송파구 방이동 · 무료
이 코트로
소스 순서 클럽 코트 → 최근 선택 → search(타이핑이 둘 다 override). 탭은 ring+check만 staging — footer의 단일 CTA가 확정(wizard-nav law: header=back, footer=CTA 1개).
5. 샵 — 영업시간·전화, 팻말 없음
코트 찾기
전체 3,341테니스장 2,489연습장 848샵 189즐겨찾기 4
테니스장 이름·지역으로 검색2
서울
송파구
서울4곳
송파 테니스 스트링샵테니스 샵
송파구 잠실동
평일 10-21시 · ☎ 02-123-4567
잠실 테니스 프로샵테니스 샵
송파구 신천동
매일 9-20시 · ☎ 02-987-6543
샵엔 필터링할 플레이 시설이 없어 패널이 지역/시·군·구로만 줄어들어요. 카드는 코트 사실 대신 영업시간·전화(기존 필드, 스키마 대기 없음)로 결정됐어요.
6. 지역 선택 시트
지역 선택
시/도 (2개 선택됨)
서울경기부산
시·군·구
전체서울 송파구서울 중구부산 중구
2개 이상 지역 선택 시 '서울 중구'/'부산 중구'처럼 접두어를 붙여요 — 이미 SHIPPED(`districtOptionLabel`)라 이 시트는 그대로 재사용해요.
적용
Spec (grounding, anatomy)

Streamlining path — near-me default browse + a useful zero-query state (saved → recent → nearby) replacing the name-sorted province directory, kind-aware facets gaining 지금 영업 중/무료 and dropping the dead verification toggle, recent searches under the field, a pick-intent source order (클럽 코트 → 최근 선택 → search), and card v3 (rating + open-now on the shipped price/distance/facet anatomy). The 샵 card swap (영업시간/전화) is decided, not open. The one real data-API change is promoting rating/reviewCount/open-now into the list SELECT.

route · packages/features/sessions/src/courts-directory-screen.tsx → VenueDirectoryContent → venue-finder.tsx (intent="explore") · venue-search-takeover.tsx → venue-finder.tsx (intent="pick") grounded in 16 source file(s)
packages/app/src/presentation/components/sessions/venue-finder.tsxpackages/app/src/presentation/components/sessions/venue-filter-bar.tsxpackages/app/src/presentation/components/sessions/directory-venue-card.tsxpackages/app/src/presentation/components/venue-search-results-list.tsxpackages/features/sessions/src/courts-directory-screen.tsxpackages/app/src/presentation/components/venue-search-takeover.tsxpackages/app/src/presentation/components/region-district-filter.tsxpackages/app/src/presentation/components/venue-card.tsxpackages/app/src/presentation/utils/distance.tspackages/app/src/utils/format-count.tspackages/app/src/domain/entities/directory-venue.entity.tspackages/app/src/config/i18n/ko/venues.tsdocs/design/venue-surfaces-ux-audit-2026-09-04.mdpackages/app/src/presentation/components/sessions/venue-finder/use-venue-finder-state.tspackages/app/src/presentation/components/sessions/venue-finder/use-venue-finder-data.tspackages/app/src/presentation/components/sessions/venue-finder/venue-finder-rows.ts