Swift UI

Swift UI

Swift UI

AI Assistance

AI Assistance

AI Assistance

ShotStat

A SwiftUI-powered iOS app for tracking barrel life, logging range sessions, and maintaining your gear.


After designing and releasing Tracket, I wanted to create another utility-driven app—this time for a niche community I’m familiar with. ShotStat was born out of the desire to track barrel usage and cleaning cycles for rifles in a simple, satisfying, and intuitive way.

Timeline

Timeline

January - May 2025

January - May 2025

Role

Role

UX/UI Designer / Developer / Publisher

UX/UI Designer / Developer / Publisher

Tools Used

Tools Used

XCode, Swift UI Docs, Cursor AI

XCode, Swift UI Docs, Cursor AI

Project Type

Project Type

Personal

Personal

From Idea to Interface

The concept was straightforward: create an app that helps shooters:

  • Track barrel wear and round count

  • Record range sessions

  • Set maintenance reminders

  • Visualize usage over time

I started by mocking up a modern UI using a dark, card-style layout, strong typography, and iconography that would feel familiar to shooters but visually polished enough for the App Store. Each screen was carefully designed with a hierarchy of information that highlights what matters most: how many rounds have been fired, when a cleaning is due, and how close you are to needing a new barrel.

Development in SwiftUI

I built ShotStat entirely in SwiftUI, with minimal reliance on third-party libraries. As someone who’s not a full-time developer, I leaned on AI assistance throughout the build—helping troubleshoot logic, manage state, and finesse view layouts.

The app is modular, with views broken down by function:

  • ContentView.swift – Core home screen ("My Vault"), dynamically shows stored rifles and navigation structure

  • AddRifleView.swift – Handles creating new rifles with barrel life, caliber, serial number, and optional images

  • RifleDetailView.swift – Central hub for each rifle’s stats, including sessions, cleaning status, and usage chart

  • AddSessionView.swift and AddRangeSessionView.swift – Allow users to log range sessions or add data post-hoc

  • CleaningView.swift – A multi-tabbed experience for cleaning checklists, history, and customizable settings

  • UsageBarChart.swift – Custom-built bar chart showing round usage by month, with filters and dynamic ranges

  • SettingsView.swift – Manages notifications, thresholds, and data export

AI was particularly helpful with logic for notifications, bar chart spacing, data exporting (as CSV), and managing SwiftUI previews.

Notable Features

🧼 Maintenance Tracking
Users get cleaning reminders based on customizable round counts. Checklists, notes, and history are all preserved.

📊 Usage Charts
The UsageBarChart.swift component visualizes monthly activity with an elegant, scrollable UI. I coded this from scratch using GeometryReader and date grouping logic—made far easier with some AI help!

🔔 Notifications
Push notifications inform users when their barrel is approaching certain thresholds—like 75%, 50%, and 25% wear—completely customizable.

📤 Export Tools
Sessions can be exported in .csv format, and backups of cleaning tasks/settings are built into the app.

📱 iOS Native Polish
I used custom @AppStorage, @Environment, and theme bindings to create a seamless native feel—rounded corners, smooth transitions, and haptic interactions included.

Published on the App Store

ShotStat is now live on the iOS App Store, and it's already in the hands of real users.

Check it out on the App Store (link to your app listing)

While this was very much a solo project, building and releasing an actual SwiftUI app with clean architecture and real-world utility has been one of the most rewarding parts of my career so far.

How AI Helped

As a designer-first, developer-second kind of person, AI was a massive support system during the build.

I used tools like ChatGPT and Cursor AI to:

  • Structure SwiftUI views into reusable components

  • Debug edge cases in user input and data binding

  • Create dynamic layouts using GeometryReader and chart logic

  • Generate CSV export logic for session data

  • Handle push notification logic and user settings with persistence

AI let me move quickly and stay in flow, helping translate my design ideas into functional code—even when I was working outside my comfort zone.

Reflection

ShotStat started as a niche idea—but it turned into one of my proudest solo projects.

Designing for such a specific audience gave me clear purpose, while developing the app taught me a ton about architecture, SwiftUI, and iteration. Every screen was refined through trial and error, and every interaction was coded with intention.

Releasing it on the App Store was the cherry on top—proving to myself that I can not only design clean, useful products, but also ship them.

It’s a reminder that good tools don’t need to be complex—they just need to feel right.