# Walker listings & search

### TB-005 — Postcode search with radius matching

- **Size:** L
- **Hours:** 23
- **Scope:** Full

Postcode search with radius matching

Size reason: L — geocoding plus radius queries and result ranking is the core discovery risk, with its own failure modes.

**Acceptance criteria**

- Searching a valid postcode returns walkers within the selected radius sorted by distance
- An invalid or unrecognized postcode shows a clear error instead of crashing
- Geocoding service failure degrades gracefully with a fallback message
- Radius boundary inclusion/exclusion matches the defined spec
- Results only include walkers who completed onboarding and are approved

### TB-006 — Filter by availability, price and dog size

- **Size:** M
- **Hours:** 11
- **Scope:** MVP

Filter by availability, price and dog size

Size reason: M — several interacting query parameters that must combine correctly and stay performant.

**Acceptance criteria**

- Combining availability, price and dog-size filters returns only matching walkers
- Clearing a filter widens results correctly without leftover stale state
- Filters combine correctly with postcode/radius search from TB-005
- Filtered queries return within an acceptable time on a seeded dataset

### TB-007 — Walker availability shown on search results

- **Size:** M
- **Hours:** 11
- **Scope:** MVP

Walker availability shown on search results

Size reason: M — cross-referencing live calendar state at query time couples search to the booking engine.

**Acceptance criteria**

- Search results show live availability pulled from the booking calendar at query time
- Availability updates after a booking is created or cancelled without stale caching
- Fully booked walkers are shown as unavailable in results
- Availability display never exposes another owner's booking details

### TB-008 — Search result pagination and sort

- **Size:** M
- **Hours:** 11
- **Scope:** MVP

Search result pagination and sort

Size reason: M — standard pagination, but it must stay consistent with the filter and availability logic above.

**Acceptance criteria**

- Results paginate with a consistent page size across requests
- Sort options (price, distance, rating) apply consistently across all pages
- Pagination stays consistent when combined with filters and availability from prior tickets
- No result is duplicated or skipped across page boundaries