GitHunt
JA

iOS app for building and running morning routines with an AI voice coach.

Routine 25 — iOS App

Native iOS app for building and running morning routines with an AI coach. Built with SwiftUI + SwiftData, targeting iOS 26+.

What It Does

Routine 25 solves a specific problem: you have a fixed deadline in the morning (catch the train at 8:28, get to your desk by 9:15) and need to work backwards to figure out when to wake up. Build routines from reusable activity blocks, pin activities to fixed times (kid wakes up at 7:00 AM), and auto-calculate your optimal wake-up time. Then run an auto-advancing timer to stay on schedule.

Beyond the core timer, the app includes an AI voice coach, guided meditation, nutrition tracking, HealthKit integration, and more.

Routine 25 is split across three repositories:

Repo Description
r25-app (this repo) iOS app — SwiftUI + SwiftData
r25-backend AI coaching backend — FastAPI + Anthropic API (Opus 4.6) + ElevenLabs TTS
r25-web Web app

Features

  • Routine Builder — Create routines from reusable activity blocks with drag-to-reorder
  • Smart Scheduling — Pin activities to fixed times, auto-calculate wake-up time working backwards from anchors
  • Auto-Advancing Timer — Full-screen countdown timer that moves through your routine block by block
  • AI Voice Coach — Conversational coaching powered by Anthropic API (Opus 4.6) with ElevenLabs custom voice TTS
  • Guided Meditation — Voice-guided meditation sessions
  • Nutrition Tracking — Log meals with food search and nutrition goals
  • HealthKit Integration — Syncs sleep, steps, heart rate, and activity data
  • Today View — 10-day schedule with routine details and completion logging
  • Live Activities — Lock screen timer updates
  • Widgets — Home screen widget for your routine schedule
  • Dark Mode — Designed for early morning use with a dark-first UI

Architecture

Stack: SwiftUI + SwiftData (iOS 26+) · Swift 6.0 · Local-first with backend sync

Layer Details
Data SwiftData models with @Query → View reactivity
Navigation Sheet-based modals
Timer Observable ViewModel with Timer.scheduledTimer auto-advance
Networking APIClient with async/await, Keychain-stored auth tokens
Health HealthKit read access with background sync
Voice ElevenLabs SDK for TTS with custom voices, Anthropic API (Opus 4.6) as the LLM

Core Models

  • ActivityBlock — Reusable activity (emoji, name, duration, category, optional anchor time)
  • Routine — Collection of blocks with schedule (name, days of week, timing mode)
  • RoutineBlock — Join table linking routines to blocks with ordering and fixed-time overrides
  • RoutineLog — Routine completion tracking
  • FoodEntry / NutritionGoal — Nutrition data

Project Structure

Routine25/
├── App/                    # Entry point, SwiftData container
├── Models/                 # SwiftData models
├── Services/               # API client, HealthKit, notifications, auth
├── ViewModels/             # Timer, Coach, Meditation, Nutrition state
├── Views/
│   ├── ActivityBlocks/     # Activity library and editor
│   ├── Auth/               # Sign in with Apple
│   ├── Coach/              # AI voice coach
│   ├── Fitness/            # Fitness tracking
│   ├── Journal/            # Journal entries
│   ├── Meals/              # Meal logging
│   ├── Meditation/         # Guided meditation
│   ├── Nutrition/          # Nutrition tracking
│   ├── Onboarding/         # First-launch onboarding flow
│   ├── Routines/           # Routine builder and list
│   ├── Settings/           # App settings
│   ├── Sleep/              # Sleep tracking
│   ├── Stats/              # Statistics dashboard
│   ├── Timer/              # Running timer UI
│   ├── Today/              # Main schedule view
│   └── Shared/             # Reusable components
├── Utilities/              # TimeCalculator, HapticManager
└── LiveActivity/           # Live Activity attributes
RoutineWidget/              # iOS Widget extension
RoutineMonitor/             # Screen Time Monitor extension

Setup

Requirements

  • Xcode 26.3+
  • iOS 26.0+ device or simulator
  • Swift 6.0

Running

  1. Clone the repo
  2. Run xcodegen generate to generate the Xcode project from project.yml
  3. Open Routine25.xcodeproj in Xcode
  4. Select the Routine25 scheme for production API, or Routine25 Local for local development
  5. Build and run (Cmd+R)

Backend

The app connects to the r25-backend for AI coaching, routine sync, and health data. See that repo for setup instructions. The app works offline for core timer/routine features.

License

MIT

Languages

Swift100.0%

Contributors

MIT License
Created February 12, 2026
Updated February 25, 2026
jasonellington/r25-app | GitHunt