RaceThere is a U.S. running-race directory serving 1,000+ weekly users. It started from a frustration: searching a location on existing directories rarely returned races in and around that area, and most of those sites look like they haven’t been updated in years. RaceThere is built to fix both, with location-first search across surrounding areas in a fast, modern interface.
Search
- Location search that includes races in surrounding areas
- Instant filters for distance, date, and race type in a desktop sidebar and a mobile bottom sheet
- Date options that show the number of weeks available to train
- Race cards with date, location, matching distances, entry fee, and event logo
- Suggestions to loosen filters when a search returns no results
SEO as the growth strategy
Search engines bring in most of RaceThere’s traffic, and much of the product is designed around that.
- Filter state lives in the URL, so each location and filter combination becomes its own indexable results page instead of one directory homepage.
- Every race has an indexable event page with distances, registration details, location, and a link to the organizer, backed by structured data and state-level sitemaps.
- An AI-assisted pipeline running on durable workflows generates race guides at scale.
- 16 calculators for pace, finish time, training paces, heart-rate zones, tapering, VO₂ max, calories, and elevation bring in runners searching while they plan their training.
MCP server
RaceThere also runs an MCP server, so AI assistants like Claude can answer race questions with live RaceThere data. It extends the SEO strategy to a new channel: as more runners ask an assistant where to race instead of searching for it, RaceThere is the source behind the answer.
search_racesfinds races by city or ZIP and radius, distance or custom distance range, date window, trail or virtual, and race name.get_racereturns one race’s events, start times, current fees, registration status, and the organizer’s description.predict_race_timeestimates finish times and paces at other distances from a recent result.
In clients that support MCP Apps, results render as RaceThere race cards. Every result links back to RaceThere with tagged URLs, so assistant traffic can be measured separately from search, and each search returns a link to the matching location results page on the site.
Architecture
Race listings and event details come from RunSignup, with server-side caching and server-rendered results so every page is fully crawlable. Guide content is stored in Postgres, and PostHog tracks searches, filter changes, event views, and registration clicks.
Stack
- Next.js, React, tRPC, and TanStack Query
- Postgres with Drizzle ORM
- Vercel AI SDK with OpenRouter and durable workflows
- RunSignup and PostHog
- Model Context Protocol server with MCP Apps race cards
