Skip to content

revolutionaryPhoton/sub-tracker

Repository files navigation

SubTracker

A small, single-user native app for macOS (iOS to follow) that tracks your subscriptions — renewal cycles, the last possible date to cancel, and costs — and reminds you before money goes out the door. Built with SwiftUI + SwiftData + Swift Charts.

Status: early WIP. Phase 1 (macOS) is the current focus. iCloud sync and a native iPhone app come in Phase 2. See the roadmap below.

Why

Lots of AI and personal subscriptions, no single place tracking them. SubTracker answers: what am I paying, when does each renew, and when's the last day I can cancel before being charged again? — with local notifications so deadlines don't slip.

Features

  • Add subscriptions with cost (EUR), renewal cycle (weekly / monthly / quarterly / yearly / custom) and an optional last-cancel-by date.
  • Local notifications 7 days and 1 day before each renewal and each cancel deadline (editable per subscription).
  • A dashboard: monthly & yearly totals, spend-by-category breakdown, and an upcoming-deadlines timeline.
  • Data persists via SwiftData; syncs across your devices via private iCloud (Phase 2).

Design

The visual spec lives in design/ — open design/index.html for an interactive native-macOS mockup (sidebar nav, light/dark, Add/Edit sheet), and see design/DESIGN.md for the design tokens and the mockup → SwiftUI mapping.

Build & run (macOS)

Requires Xcode 16+ and XcodeGen.

# One-time: point the command line at full Xcode (needed by SwiftLint + xcodebuild)
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

brew install xcodegen swiftlint swiftformat pre-commit
pre-commit install         # enable the git hooks
xcodegen generate          # regenerate SubTracker.xcodeproj from project.yml
open SubTracker.xcodeproj  # then ⌘R, or:
xcodebuild -scheme SubTracker -destination 'platform=macOS' build

Run the tests (UI tests need ad-hoc signing):

xcodebuild test -scheme SubTracker -destination 'platform=macOS' \
  -enableCodeCoverage YES CODE_SIGN_IDENTITY="-" CODE_SIGNING_REQUIRED=NO

The .xcodeproj is generated (not committed); project.yml is the source of truth. After cloning, run xcodegen generate first. Enable the git hooks with pre-commit install.

Quality

  • SwiftFormat + SwiftLint (configs in repo), enforced via pre-commit.
  • Unit tests (Swift Testing) + UI/E2E tests (XCUITest); CI runs lint, format check, tests, and an 80% coverage gate on every push (GitHub Actions).

Roadmap

  • Phase 1 — macOS (current): core app, persistence, notifications, dashboard, full test + CI setup.
  • Phase 2 — iOS + iCloud sync: iPhone app, CloudKit private-DB sync, on-device notifications, TestFlight.
  • Phase 3 — community polish: CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue/PR templates, README badges, tagged releases.

License

MIT © 2026 David Moch

About

Single-user macOS/iOS subscription tracker — renewal cycles, cancel deadlines, reminders, and a cost dashboard. SwiftUI + SwiftData. WIP.

Resources

License

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors