A small browser tool for finding nearby HYROX certified gyms from your GPS position or a precise street address.
Live app: https://hyrox-gym-finder.vercel.app/
- Resolves typed addresses and browser GPS coordinates through OpenStreetMap Nominatim.
- Calls the official HYROX365 gym finder API through the local same-origin proxy:
https://api.prod.hyrox.fiit-tech.net/hyrox365/v1/gyms/map. - Requests browser GPS by default, reverse-geocodes the precise place, and ranks certified gyms by nearest distance.
- Accepts a precise address, city keyword, gym keyword, browser GPS location, or a tap on the live map.
- Renders a real interactive Leaflet map (CARTO Positron basemap) that users can pan, zoom, and tap anywhere to drop a pin and search from that point.
- Normalizes HYROX365 gyms into a compact map/list result model.
- Ranks gyms by API distance or local Haversine distance.
- Renders only the core finder surface: a map and a distance-sorted nearby gym list.
- Lets users click map markers or result cards to sync the selection between the map and the list, panning the map and opening a popup with gym details.
- Fetches public HYROX365 gym details for top nearby results and shows address, city, coordinates, phone, email, website, and official HYROX profile links, plus a one-tap Google Maps directions link on every result card.
- Uses Vercel Functions as a hosted same-origin proxy for full in-app HYROX365 map results.
- Redacts personal contact fields from included sample data.
npm test
npm startOpen http://localhost:4173.
The app has no package dependencies. npm start runs a small Node server that serves static files and exposes fixed proxy routes for Nominatim and HYROX365. The proxy uses the system curl binary for upstream requests and is needed because the official HYROX365 API allows the official HYROX finder origin but does not allow arbitrary static browser origins.
The Vercel deployment uses api/proxy.mjs as a hosted same-origin proxy, so the production app can render the full interactive HYROX365 map and nearest-gym list. This repo no longer publishes a static GitHub Pages build — the app requires a same-origin proxy (npm start locally or the Vercel deployment) to load live HYROX365 results.
The global HYROX365 map API supports latitude, longitude, radius, and limit parameters and returns distance-sorted HYROX gym records. The app then fetches public detail records for the top nearby gyms and keeps only display-safe public fields.
The HYROXCN parser and redacted sample remain in the repo for regression coverage, but the current frontend no longer renders the old import, city-tag, or coordinate-debug controls.
Do not commit raw exports that include contactPhone or other direct personal contact details. Use the redacted sample in sample/hyroxcn-redacted-sample.json for demos and tests.
Keep changes small:
- Add one failing test in
tests/hyrox.test.mjs. - Update
src/hyrox.mjsfor data behavior orsrc/main.mjsfor UI behavior. - Run
npm test. - Check the browser at
http://localhost:4173.
Deployment changes should include npm test, npm run build, and a browser check against the Vercel URL.