Project 04 · React Native

RoadTripPlanner

Discovery for national parks, hiking trails, and city parks. The interesting problem was never the interface. It was keeping six independent data sources — with six different rate limits, formats, and reliability profiles — from turning into six different ways for the app to fail or run up a bill.

Subject
National parks, trails, and city parks across the United States
Sources
NPS, OSM Overpass, YouTube, Google Places, OpenWeather, Recreation.gov
Status
Portfolio project
Source
github.com/baranDincsoy/RoadTripPlanner
Map with park and trail markers. Park detail sheet. Photo gallery. Trail detail with computed length. Weather forecast. Nearby campgrounds. Video shorts for a park. Unified search results. Favourites. Trip list. Trip detail with ordered stops. Map focus on a saved place.

Six sources, one interface

Source, purpose, and cache lifetime
SourcePurposeCache
NPSFederal parks and monumentsIn-memory
OSM OverpassTrails and city parks30 days
YouTubePark and trail video7 days
Google PlacesRatings, photos, hours30 days
OpenWeatherFive-day forecast3 hours
Recreation.govCampgrounds and booking7 days

Cache lifetimes are matched to how fast the data actually changes. Weather goes stale in hours; a trail network changes over years. Treating them the same would mean either serving old forecasts or paying to re-fetch footpaths that have not moved since the last ice age.

Keeping the cost down

Making it survive the network

Some details worth naming

How it is built

A service layer owns every network call, cache, and error path. Screens never call fetch directly; they compose components and manage navigation state. Components stay presentational and type-flexible — the photo gallery accepts either an array of strings or an array of objects, because two of the sources disagree on that too.

Each source gets its own service module, which is what makes the caching policies legible: the file that knows how volatile weather is, is the file that sets the three-hour lifetime.

Scope and limits

What I took from it

Every failure mode here was a lesson in someone else's constraints. Overpass is free public infrastructure and rate-limits accordingly; Google charges per call and rewards you for asking less. Writing against six of them at once made the caching strategy a design problem rather than an afterthought.