Subby – iOS Subscription Tracker

Subby is a subscription tracker for iOS that I designed and built from scratch. It helps users stay on top of renewals at a glance, with a simple UI focused on clarity and a sleek, minimal aesthetic.

WHAT I DID

Designed & built solo.

Launched in 4 months, without any ads, landing page, or audience

CURRENT STATS | APR 1 - MAY 25

330+ downloads, 23 paying users

6.8% opt-in to paid, $100+ revenue

88.1% via App Store search, 0 crashes

Why I built Subby

iOS Reminders

I wanted to design and build an app to practice my skills in both design and iOS development. A subscription tracker felt like a good place to start, and I needed one for myself anyway.

I was using iOS Reminders to track renewals and bills. It worked, but it felt basic. No totals, no stats, nothing that gave me a clear view of my spending.

The other apps I tried didn’t feel right either. They were too cluttered, too generic, or just not pleasant to use. So I decided to build something that felt better.

The Problem

Other apps in this space

People forget when their subscriptions renew, and most don’t even realise how many they have, or how much they’re spending. With the average user now paying for 12+ subscriptions, this is no longer a niche problem.

Most apps don’t make Days to Renewal easy to glance. They show the info, but it’s not treated as primary, even though that’s exactly what users need to notice first.

Existing tools feel bloated, clunky, or boring. I wanted to build something calm, clear, and focused on what’s actually important—upcoming renewals.

Goals

App inspiration

Queue

podcasts

The goal was to build a clean, intuitive subscription tracker that feels like it belongs on iOS, without any account system or backend.

I wanted it to support all global currencies properly and work fully offline, with smooth animations, haptics, and gesture-based interactions.

The app had to feel calm and simple to use, but not boring. No tutorials or friction, just open and understand.

Design Highlights

UI Foundation

The app is built around a single list view. There are no tabs or multiple screens. Sorting by Days remaining turns it into a timeline of upcoming renewals. That made a separate calendar unnecessary.

Adding, editing, and settings all open as bottom sheets, so you never lose context.

You can also sort by recently added or cost. Subscriptions can be grouped by payment cycle, with the total shown for each group.

Visual System

Plus Jakarta Sans

SF Symbols

Days-left indicator colors

Progressive blur

on tool bar

Translucent

SwiftUI material

Layout is clean and consistent, using common spacing values.

Typeface: Plus Jakarta Sans for a modern, slightly different tone from system default.

SF Symbols used throughout for visual consistency.

Custom color palette with light/dark mode adjustments.

Translucent SwiftUI materials (.regularMaterial, .thinMaterial) and Progress blur applied for soft layering.

Accessibility support is planned for a future update.

Functional Features

/m

Display payment

cycle toggle

Reverse progress bar that shrinks as the renewal date approaches, resets per cycle.

Quick stat cards for total spend (monthly/yearly), number of subscriptions and upcoming renewals.

Multi-currency handling: Totals in Preferred currency, with Simplified cost per month/year.

Display payment cycle toggle (monthly/yearly) affects how simplified costs are shown.

Free trials management. Marking subscriptions as Cancelled to separate them from active subscriptions.

Core UX Decisions

Casual user focus

Subby was designed for casual users who just want to stay on top of renewals, without digging through dashboards or charts. That shaped every decision in the app.

Single screen layout

The entire experience runs on a single screen. No tabs or separate views. All interactions like adding or editing a subscription happen through bottom sheets, so users stay in context.

Focused feature set

Non-core features like calendars, custom payment cycles, detailed stats, filters, and export options were left out. The focus was to nail the core experience first, ship faster, and add things later based on real user feedback.

On-device only

There’s no account system. Everything runs on-device to keep it private and frictionless. iCloud syncing will be added in a future version to support data sync across devices using the same Apple ID, so there’s no need for a backend right now.

Dev Highlights

Subby was built entirely in SwiftUI with a focus on clarity and modular structure. Every part of the product was handled solo, including design, code, architecture, and logic. No templates or boilerplate. A significant amount of time was spent on optimising the code to make the app feel snappy performant.

Architecture and State

Built with NavigationStack and NavigationPath for full programmatic control over sheet transitions.

All flows like add, edit, sort, settings, details, and paywall open as SwiftUI Sheets, based on app state. No tab bar or screen-based navigation.

Views don’t handle logic. A single core object wires up managers for UI state, sheet flow, subscriptions, purchases, and toasts. All actions and updates are managed by external state managers.

Uses @ObservableObject for state management with minimal bindings or environment objects.

The code avoids unnecessary layers or libraries. Everything is written in native SwiftUI.

Core Systems and Logic

Billing logic is fully local and handles leap years, monthly drift, trial periods, cancellations, and reactivation.

Currency engine supports 160+ currencies, uses daily exchange rates, and displays both original and converted values.

Notification system runs offline with auto-repair on app launch if system purges or permissions change.

All data is stored using UserDefaults or AppStorage. No backend or login system. iCloud sync is not live yet but planned.

RevenueCat integration handles purchases, fallbacks, restores, and one-time unlock.

UI and Interaction

UI is fully modular and built from fully custom and reusable components: capsule buttons, input fields, sheet rows, and cards.

Toast system includes five types with slide-in animation, haptic feedback, and gesture dismiss.

Custom fields and controls include tooltip flows, toggles, dropdowns, cost input, and trial switches.

Custom placeholder logos are auto-generated when adding custom subscriptions.

Launch & Aftermath

Launched with no audience, no ad budget, and no marketing push. Reached 4,400+ App Store impressions, 920+ product page views, and over 330 downloads, in 7 weeks.

23 users converted to paid, with a 6.8% paid conversion rate. Feedback included: “Beautiful UI”, “Simple”, “Love the app”, “Easy to use”.

The hardest part wasn’t building. It was putting the product out there and getting people to notice. Visual polish helped but wasn’t enough on its own.

Next steps include adding motion, personality, and small shareable moments. Also planning to be more consistent and confident about showing the work publicly.

Every part of the app, including design, code, UX, and marketing, was handled solo. The learning curve was intense but fast.