Origin
TrailBird started with a simple question: does any site put eBird hotspots and hiking trails on the same map? None did. eBird’s map shows hotspots but no trails. AllTrails has trails but no birding data. BirdingHotspots.org adds trail notes to hotspot pages but isn’t a live map. Planning a hike around recent sightings meant using eBird, AllTrails, and Google Maps together. TrailBird combines them into one map.
First mockup
The first mockup paired each hotspot with a single trail. That model failed at Green Lakes State Park, which has several eBird hotspots and around a dozen trail segments. The fix: hotspots and trails became separate layers. Zoomed out, they cluster by county. Zoomed in, each hotspot and trail appears individually. The default OpenStreetMap tiles were too busy behind the data and were replaced with a cleaner base map.
V1
V1 launched in March 2026, covering Madison County, New York. It ran on PHP and MySQL on shared hosting.
- Map of eBird hotspots, parks, and trails
- Rare and notable bird alerts
- Rarity bars for each species, based on how often it’s reported (under 2% of checklists is rare, 2–5% is uncommon)
- Nightly updates for hotspots and sightings; weekly updates for parks and trails
- Mobile layout with a panel that drags up over the map
- Admin panel for adding counties, with each region stored in the database
The first nightly update ran on March 14 and refreshed 96 hotspots.
Constraints
- eBird can’t be called from the browser. Browser security blocks it, and the API key can’t be exposed. Every request goes through a server-side proxy.
- OpenStreetMap limits request speed. Trail and park requests must be spaced out and retried, so that data is fetched ahead of time and stored rather than loaded live.
- Map data depends on tagging. Parks with incomplete OpenStreetMap data return missing boundaries or trails.
- Sightings belong to hotspots, not trails. eBird has no record of birds seen along a specific trail, and OpenStreetMap has no elevation data. Both limit what a trail page can show.
- Shared hosting. No Node.js, file uploads by FTP, and scheduled jobs through cPanel.
- API limits. Bots crawling the map can drain the eBird quota, so the data endpoints are protected.
- Sensitive species. Exact locations of sensitive birds stay hidden everywhere, including in links.
What worked
- A server-side proxy with caching for all eBird requests
- Trails and parks fetched ahead of time and refreshed on a schedule
- Separate data files for each state
- The drag-up panel on mobile
- A mockup for every feature before any build
What didn’t
- Free public proxies for eBird were unreliable and were replaced with a dedicated proxy.
- One shared data file for all states. Adding a county in Florida erased all New York data. Each state now has its own file, and data can only be added or hidden, never replaced wholesale.
- One marker per location couldn’t handle parks with many hotspots and trails.
- “Likely now” predictions weren’t useful to birders and were replaced with real sightings.
- An external icon library broke a page. Icons are now built into the site.
V2 (in progress)
V2 is a full rebuild on a TypeScript/Node stack. It’s in a sandbox and not yet live.
- Species index built around real sightings: rare nearby, notable, and continuing birds
- Chatter: a community feed for sightings, with reactions, comments, and a detail page for each post. Automated sighting posts come from a clearly labeled TrailBird account, not fake users.
- Discovery map that ranks places by what you’re looking for and shows a heat view of where birds are being seen
- Migration map showing when and where species move through
- Trip planner for saving and sharing outings
- Location privacy for sensitive species, built in from the start
What’s next
Moving V2 from the sandbox to live, then expanding content: species pages, seasonal migration pages, and region guides. Longer term, connecting birders with local guides and tour operators.
Data: eBird (Cornell Lab of Ornithology) and OpenStreetMap contributors.