Skip to content

Repository files navigation

Tracker 📊

A sleek, minimal macOS app + widget to track your daily progress on anything — LeetCode problems, reading, gym, projects, or whatever matters to you.

Built with SwiftUI and WidgetKit. Fully local, fully private, fully yours.

Tracker App


⬇️ Download & Use

🖥️ App Mode — Just want to use it?

Download Tracker v1.0.0 →

  1. Download the .dmg file from the link above
  2. Open the .dmg and drag Tracker into your Applications folder
  3. Open Tracker from Launchpad or Spotlight
  4. Right-click your desktop → Edit Widgets → Search "Tracker" to add the widget

No Xcode needed. No developer account needed. Just download and run.


🛠️ Developer Mode — Want to build or modify it?

If you want to run it from source, customize it, or contribute:

Prerequisites

  • macOS 14.0 (Sonoma) or later
  • Xcode 15.0 or later
  • Apple Developer Account (free is fine for personal use)

Build & Run

  1. Clone the repository

    git clone https://github.com/vishwassinfinity/tracker.git
    cd tracker
  2. Open in Xcode

    open Tracker.xcodeproj
  3. Set up App Group

    • Select Tracker target → Signing & Capabilities → App Groups
    • Add your App Group (e.g., group.com.yourname.tracker)
    • Select TrackerWidget target → do the same with the same App Group
    • Update TrackerStore.swift with your App Group name:
      static let suiteName = "group.com.yourname.tracker"
  4. Set your Team

    • Select both targets → Signing & Capabilities → Team → Select your Apple Developer account
  5. Build & Run

    ⌘R to run the app
    
  6. Add Widget to Desktop

    • Right-click desktop → Edit Widgets
    • Search "Tracker"
    • Drag Small or Medium widget to your desktop

Shared Files Setup

The files in Shared/ must be added to both targets. Verify in Xcode:

  1. Click each shared file
  2. Open File Inspector (⌘⌥1)
  3. Under Target Membership, ensure both are checked:
    • ☑ Tracker
    • ☑ TrackerWidget

✨ Features

  • Track Anything — Create unlimited trackers with custom names, icons, and labels
  • Custom Counters — Rename "Solved/Revised" to "Pages/Notes", "Tasks/Bugs", or whatever fits
  • Single or Dual Counters — Use one counter or two per tracker
  • Interactive Widget — Increment/decrement directly from your desktop widget
  • Small & Medium Widgets — Choose the size that fits your workflow
  • Widget Picker — Select up to 4 trackers to display on your widget
  • Daily Auto-Rollover — Counts reset at midnight, yesterday's data is preserved
  • Lifetime Stats — Total counts, daily averages, best day, streak tracking
  • Weekly Bar Chart — Visual breakdown of your last 7 days
  • 30-Day Heatmap — GitHub-style activity heatmap
  • Full History — Every day's data is logged and browsable
  • Edit Anytime — Change name, icon, labels even after creation
  • 100% Local — All data stays on your Mac, no accounts, no internet needed

📸 Screenshots

Desktop Widget (Medium)

Track up to 4 items with interactive +/- buttons right on your desktop.

Medium Widget

Desktop Widget (Small)

Compact view showing 2 trackers at a glance.

Small Widget

Choose Widget Items

Select which trackers appear on your widget (up to 4).

Widget Picker

Tracker Detail View

Full breakdown with today's counters, yesterday's stats, weekly chart, lifetime stats, and 30-day heatmap.

Tracker Detail

Create New Tracker

Pick an icon, name your tracker, customize counter labels, choose single or dual counter mode.

New Tracker


🛠️ Tech Stack

Component Technology
UI Framework SwiftUI
Widget WidgetKit
Interactive Widget AppIntents
Data Storage UserDefaults (App Group)
Platform macOS 14.0+ (Sonoma)
IDE Xcode 15+

📦 Project Structure

Tracker/
├── Shared/                          # Shared between App & Widget
│   ├── TrackerItem.swift            # Data model
│   ├── TrackerStore.swift           # Data persistence & logic
│   └── WidgetDataReader.swift       # Widget data access
│
├── Tracker/                         # Main App
│   ├── TrackerApp.swift             # App entry point
│   ├── ContentView.swift            # Sidebar + navigation
│   ├── DetailView.swift             # Tracker detail with charts
│   ├── AddItemView.swift            # Create new tracker
│   ├── EditItemView.swift           # Edit existing tracker
│   └── WidgetPickerView.swift       # Choose widget items
│
└── TrackerWidget/                   # Widget Extension
    └── TrackerWidget.swift          # Widget views + intents

💡 Usage

Create a Tracker

  1. Click + in the sidebar
  2. Choose an emoji icon
  3. Enter a name (e.g., "LeetCode")
  4. Customize counter labels (e.g., "Solved" / "Revised")
  5. Toggle dual counter mode on/off
  6. Click Create

Track Your Progress

  1. Select a tracker from the sidebar
  2. Use + / - buttons to update today's count
  3. Data automatically rolls over at midnight

Add to Widget

  1. Click the grid icon (🔲 2/4) in the sidebar header
  2. Check up to 4 trackers to show on your widget
  3. Click Done
  4. Your widget updates automatically

Edit a Tracker

  1. Select a tracker
  2. Click the pencil icon in the detail view
  3. Change name, icon, labels, or counter mode
  4. Click Save

Use Widget Buttons

  • Tap + / - directly on the widget to increment/decrement
  • Changes sync instantly with the app

🔒 Privacy

Tracker is built with privacy as a core principle:

  • No analytics — Zero tracking, zero telemetry
  • No network calls — The app never connects to the internet
  • No accounts — No sign-up, no login
  • 100% local storage — All data lives in your Mac's App Group container
  • No cloud sync — Your data never leaves your device

Your data is stored at:

~/Library/Group Containers/group.com.vishwas.tracker/

🧩 Customization Ideas

Tracker is flexible enough to track anything:

Use Case Label 1 Label 2 Single/Dual
LeetCode Solved Revised Dual
Reading Pages Single
Gym Sets Reps Dual
Writing Words Single
Project Tasks Done Bugs Fixed Dual
Meditation Minutes Single
Language Learning Words Sentences Dual
Drawing Sketches Single

📋 Requirements

Requirement Minimum
macOS 14.0 (Sonoma)
Xcode 15.0
Swift 5.9
Apple Developer Account Free (for personal use) or Paid (for distribution)

🤝 Collaborate & Contribute

Contributions are very welcome! Whether you're fixing a bug, adding a feature, or improving docs — all help is appreciated.

How to Contribute

  1. Fork the repository
  2. Create your feature branch
    git checkout -b feature/amazing-feature
  3. Commit your changes
    git commit -m "Add amazing feature"
  4. Push to your branch
    git push origin feature/amazing-feature
  5. Open a Pull Request — describe what you changed and why

💡 Ideas for Contribution

These are open for anyone to pick up:

  • iCloud sync across devices
  • CSV/JSON data export
  • Dark/light theme customization
  • Custom color picker for counters
  • Weekly/monthly summary notifications
  • Large widget with chart view
  • iOS companion app
  • Keyboard shortcuts for quick increment

💬 Have an idea not listed here? Open an Issue and let's discuss it!

First Time Contributing?

No worries! The codebase is small and well-structured — a great place to start. Feel free to open an issue asking where to begin and I'll guide you.


📄 License

This project is open source and available under the MIT License.

MIT License

Copyright (c) 2026 Vishwas

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

⭐ Star This Repo

If you find Tracker useful, please give it a star! It helps others discover the project and motivates further development.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages