EVRION.
Fitness Tracker — main project image

Mobile App · Fitness

A native iOS fitness dashboard built with SwiftUI and SwiftData: activity rings and daily stats, a workout log, trend charts across 7/30/90 days, and adjustable goals — a high-contrast, OLED-friendly dark experience that runs fully offline.

Project
Fitness Tracker
Year
2025
Discipline
iOS · SwiftUI
Stack
SwiftUI · SwiftData

Context

Fitness Tracker is an activity and workout dashboard in the vein of a rings app, built natively in SwiftUI with a whole-app dark mode for a high-contrast, OLED-friendly look. It ties together four surfaces: Today, Workouts, Trends, and Goals.

The point is legibility at a glance — the day's progress readable in the half-second before you put the phone back down.

Challenge

A dashboard lives or dies on how quickly it communicates. Rings, streaks, and stat cards all have to render instantly from local data and stay honest, with charts that make a week or a quarter of activity readable rather than noisy.

And it had to feel complete and alive from the first launch, without requiring an account, a sync, or a network round-trip.

Approach

The Today screen leads with an activity-ring summary and glanceable stat cards; Trends turns the same underlying logs into calorie and active-minute charts across 7, 30, and 90 days; Goals lets targets be tuned and reflected everywhere.

All data is stored locally with SwiftData and seeded with realistic sample activity on first launch, so the app is immediately populated and fully usable offline.

Outcome

The result is a coherent, four-tab fitness app: rings and daily stats on Today, a workout log, expressive trend charts, and editable goals — all in a consistent dark theme built around a single fresh-teal accent.

Because it's local-first, it opens instantly and works anywhere, with no dependency on a backend or connection.

Technical Detail

Built for iOS with SwiftUI and SwiftData; charts are rendered natively and the whole app is pinned to a dark color scheme with a reusable Theme. Sample data seeds from the root view on first launch and is a no-op thereafter.

A clean model layer (Workout, StrengthSet, WeightEntry, GoalSettings) keeps the dashboard's derived summaries fast and testable.

// Gallery

The dashboard and the workout log
The dashboard and the workout log
Trends — active calories and minutes over time
Trends — active calories and minutes over time
Goals and adjustable targets
Goals and adjustable targets

// Next step

The next case study could be yours. Tell us what you're building and we'll tell you honestly how we'd ship it.