Skip to content
Sableframe
PUBLIC REPOSITORY

Yardly

A map-first way to find nearby yard and estate sales.

An early prototype of a location-centered discovery experience: search around a place, filter nearby sales, and see them on a practical local map.

Status
PUBLIC REPOSITORY
Source
Public repository
Capabilities
  • Maps
  • Search and filters
  • Consumer product
Yardly search page with filters, a list of demo garage, estate, and moving sales, and a map of Louisville with color-coded sale pins.
Synthetic dataMap and resultsClustered sales around a synthetic location, with results beside the map.

The problem

Yard, garage, and estate sale listings are scattered across many places, so finding what is happening nearby means checking each one.

Yardly is an early prototype that explores a map-first search for sales around a chosen place.

The system

  • Map-first results

    Clustered sale markers on an interactive map, alongside list and calendar views.

  • Search by place

    Search by address, city, or ZIP code, or use the browser’s location, within a chosen radius.

  • Filters and sorting

    Filter by sale type, dates, keywords, and source, and sort by distance or date.

  • Sale detail

    Dates, address, description, the places a sale was listed, and private notes.

How it was built

An Angular frontend using signals for state talks to an Express API that also serves the built app. The API validates each search, removes duplicate listings, filters by distance, and caches the result.

SQLite stores accounts, user-submitted sales, notes, saved searches, and a geocoding cache. The map is rendered with MapLibre.

  1. Interface

    • Angular app
    • Map, list, and calendar
  2. API

    • Express
    • Validated search
  3. Listings

    • Duplicate merging
    • Radius filter
    • Result cache
  4. Storage

    • SQLite
    • Geocoding cache
A search is validated, de-duplicated, and filtered by distance before results reach the map.

Technology

  • Angular
  • TypeScript
  • Express
  • SQLite
  • MapLibre

Design decisions

  1. Signals instead of a store library

    Angular signals hold search and filter state, which keeps a small app free of store boilerplate.

  2. SQLite for a small server

    A single-file database fits a small single-server deployment, with write-ahead logging for concurrent reads.

  3. Stable listing IDs

    Hash-based IDs keep a user’s notes attached even if a listing disappears and comes back.

Selected views

Current state

Public repository. Yardly is an early, hobby-scale prototype designed for a single server, with no automated tests yet. Its results can change between searches.