Inspiration

We wanted to turn everyday fitness habits into something that feels like an adventure, not a chore. The Oregon Trail vibe gave us a fun metaphor: every walk moves your wagon party forward, and consistency keeps your crew healthy. Fitness Trail was inspired by nostalgia, game mechanics, and a simple question: what if step tracking felt like a journey you actually want to keep playing?

What it does

Fitness Trail is a gamified health app where users travel the Oregon Trail by staying active.

  • Tracks daily steps and translates them into trail miles.
  • Shows a live dashboard with streaks, weekly consistency, vitality, and trail progress.
  • Includes a rewards system with unlockable badges and milestone progression.
  • Supports account auth (register/login) with token-based sessions.
  • Syncs daily health logs to a backend API and updates streak/achievement logic.
  • Includes native health integrations: iOS HealthKit in the Expo app and Android Health Connect support in the Kotlin module.

How we built it

We built Fitness Trail as a multi-part stack:

  • Frontend: Expo + React Native + TypeScript with themed tab navigation and custom UI components (wagon scene, step ring, heatmap, health bars, reward map).
  • Backend API: FastAPI with JWT auth, SQLAlchemy ORM, and Pydantic schemas.
  • Database: PostgreSQL-backed health logs, streak tables, users, and achievements.
  • Game logic: server-side streak engine processes sync events, updates current/longest streaks, and awards milestone badges.
  • Health data:
    • iOS: HealthKit step reads via a React Native bridge.
    • Android: Health Connect reader + background sync service (WorkManager) in a Kotlin app module.

The flow is: collect daily health data -> sync to API -> recompute streaks/achievements -> return dashboard-ready data for the app.

Challenges we ran into

  • Cross-platform health APIs are very different. iOS HealthKit and Android Health Connect have different permission and query patterns.
  • Making sync idempotent was important so re-syncing a day updates data without double-counting progress.
  • Keeping frontend state aligned with backend responses required careful schema mapping and loading/error handling.
  • Local development networking (device/simulator/emulator to localhost API) added complexity during integration and testing.
  • Balancing game feel with real health data meant mixing polished UI interactions with still-evolving backend integrations.

Accomplishments that we're proud of

  • Built an end-to-end prototype with authentication, persistence, streaks, and achievements.
  • Designed a distinctive Oregon Trail-inspired UI instead of a generic fitness dashboard.
  • Implemented meaningful gamification (trail distance, milestones, badges, vitality) tied to user behavior.
  • Added native health platform integration work on both iOS and Android paths.
  • Created a backend that cleanly separates auth, sync, dashboard aggregation, and achievement logic.

What we learned

  • Product framing matters: the same fitness data becomes more motivating when wrapped in a story and progression.
  • Backend game logic should live server-side for consistency and easier iteration.
  • Cross-platform mobile health integrations require early testing on real devices and an environment setup discipline.
  • Clear API contracts and typed schemas save time when frontend and backend evolve in parallel.
  • Building for habit formation means focusing on feedback loops, not just charts.

What's next for Fitness Trail

  • Finish full production-grade health sync across iOS and Android, including hydration and richer metrics.
  • Replace remaining mocked UI values with fully live backend data.
  • Add social/co-op mechanics (party invites, shared challenges, leaderboards).
  • Expand game events (weather, random trail events, recovery tasks) tied to activity trends.
  • Add notifications and smart reminders for streak protection.
  • Improve deployment and observability (hosted API, analytics, error tracking, and CI/CD).
  • Introduce personalization with adaptive goals based on user history and progress.
Share this project:

Updates