Dash

A map-based running app focused on route creation and performance tracking.

Expo
TypeScript
Swift
Mapbox IOS SDK
Tracks Page

Overview

Dash is a mobile running app built as an MVP to validate an idea developed for an entrepreneurship course. The app allows users to create custom running routes on a map and then run those routes while tracking performance data. The project was also an opportunity to deepen native iOS experience by building all map-related UI and GPS logic in Swift and bridging it into a React Native app using Expo native modules.

Media Gallery

Start Run
Running
Finished Run
Upload Run
My Runs Page
Run Details
Leaderboard Page
Login Page
Register Page
Create Profile
Settings Page

Problem & Solution

Many running apps focus on general activity tracking rather than route-specific performance.

Dash focuses on predefined routes: users draw tracks on a map and later run those same routes to measure and compare performance, laying the foundation for competitive and social features.

Key Features

  • Create and save custom running routes on an interactive map
  • Track runs using real-time GPS data
  • Calculate basic performance stats from raw location data
  • Leaderboards powered by scheduled background jobs
  • Native map and GPS handling for accuracy and performance

Technical Highlights

  • Built with React Native using Expo
  • Implemented all map and GPS UI in Swift for native performance
  • Created Expo native modules to bridge Swift functionality into JavaScript
  • Used cron jobs to update leaderboards on a schedule
  • Designed the app as an MVP with a clear path for future refinement

Challenges & Learnings

Learning Swift in a Production Context - Used native map and GPS features as an entry point into Swift, prioritizing performance-sensitive functionality where native code matters most.

GPS Data Handling - Started with raw GPS data for stat calculations, with plans to refine accuracy and smoothing in future iterations.

Product Decisions

  • Focused on delivering a usable MVP quickly
  • Chose native implementations for maps and GPS to avoid abstraction limitations
  • Deferred advanced analytics until core functionality was validated
  • Scoped features tightly to avoid overengineering