Waypoint

Overview

Waypoint is an iOS navigation app that combines the simplicity of a compass interface with destination-based navigation. Instead of traditional turn-by-turn directions, Waypoint shows you a compass with a waypoint indicator pointing toward your destination, giving you a natural, intuitive sense of direction and distance.

Awaiting approval for release on iOS App Store.

Demo Video

Watch Demo Video

Key Features

How It Works

  1. Set a destination using the search bar on the map view
  2. Switch to compass view to see a waypoint indicator showing the direction to your destination
  3. As you move or rotate your device, the compass updates in real-time
  4. The waypoint pin rotates around the compass ring to always point toward your destination
  5. Haptic feedback activates when you’re within 20° of the target bearing

Technical Details

Tech Stack

System Architecture

Waypoint follows a clean architecture pattern with clear separation of concerns:

Waypoint/
├── Models/          # Data structures
├── Services/        # Business logic and external APIs
├── Views/           # UI components
└── Utils/           # Reusable utilities

File Structure

Waypoint/
├── WaypointApp.swift          # App entry point, initializes Google Maps SDK
├── Models/
│   ├── CurrentLocation.swift
│   └── Destination.swift
├── Services/
│   ├── LocationManager.swift
│   ├── PlacesService.swift
│   └── HapticService.swift
├── Views/
│   ├── ContentView.swift
│   ├── CompassView.swift
│   ├── MapView.swift
│   └── SearchBar.swift
├── Utils/
│   └── CompassDrawing.swift
├── Config.plist               # Google Maps API key (not in repo)
└── Assets.xcassets/           # App icons and assets

Models

Models are simple data structures that represent the core entities in the app. They contain no business logic—just properties and basic initialization.

CurrentLocation.swift

Destination.swift

Services

Services contain the business logic and handle interactions with external systems (APIs, device sensors, etc.). They manage state and provide functionality used by the views.

LocationManager.swift

PlacesService.swift

HapticService.swift

Views

Views are SwiftUI components that define the user interface. They observe data from services and models, display information to users, and handle user interactions.

ContentView.swift

CompassView.swift

MapView.swift

SearchBar.swift

Utils

CompassDrawing.swift

Key Technical Concepts

Navigation Math

Coordinate Formatting

Haptic Feedback Algorithm

State Management

State Variables and Storage

LocationManager (Session State - @Published)

LocationManager (Session State - Non-Published)

LocationManager (Persistent State - UserDefaults)

PlacesService (Session State)

View-Level State (@State)

Persistence Strategy

Configuration

The app requires a Google Maps API key stored in Config.plist:

<key>GMSApiKey</key>
<string>YOUR_API_KEY_HERE</string>

This key is used for both Google Maps and Google Places services.

Permissions

The app requires the following iOS permissions:


Development Notes

Architecture Principles

Future Enhancements

Potential areas for expansion: