https://github.com/gonfff/subctrl
Dead simple subscription tracker app
https://github.com/gonfff/subctrl
flutter ios subscription-tracker
Last synced: 5 months ago
JSON representation
Dead simple subscription tracker app
- Host: GitHub
- URL: https://github.com/gonfff/subctrl
- Owner: gonfff
- License: mit
- Created: 2025-12-11T10:12:53.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2026-01-11T12:40:56.000Z (5 months ago)
- Last Synced: 2026-01-11T16:47:23.161Z (5 months ago)
- Topics: flutter, ios, subscription-tracker
- Language: Dart
- Homepage:
- Size: 2.44 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Subctrl
Dead-simple subscription tracker for iOS, built with Flutter/Cupertino widgets.
Subctrl keeps tabs on recurring costs, converts currencies automatically, and
sends optional local reminders before renewals hit.
## Features
- Track subscriptions with local storage backed by Drift (`subctrl.db`).
- Automatic currency conversion via Yahoo Finance rates with historical seeds to keep analytics stable offline.
- Analytics tabs for monthly burn, category totals, and long-term spend trends.
- Local, timezone-aware notifications driven by `LocalNotificationsService`.
- Clean Architecture split into presentation, application, domain, and
infrastructure layers.
- Enforced code coverage (70%+) through the GitHub Actions workflow.
## Screenshots
## Architecture at a Glance
```
lib/
├─ presentation/ # UI, view models, localization
├─ application/ # Use cases and dependency wiring
├─ domain/ # Pure business logic + repository interfaces
└─ infrastructure/ # Drift database, currency clients, platform services
```
- `lib/main.dart` boots the tabbed UI and wires dependencies.
- `lib/application/app_dependencies.dart` registers repositories, use cases, and
disposes the `YahooFinanceCurrencyClient`.
- Data lives in `lib/infrastructure/persistence/database.dart` (schema version 1
stored as `subctrl.db` in the app documents directory).
## Getting Started
1. **Prereqs**: Flutter 3.38.5 (matches CI), Dart SDK ^3.10.3, Xcode for iOS
simulator/device builds.
2. **Install deps**:
```bash
flutter pub get
```
3. **Run the app**:
```bash
flutter run
```
4. **Configure notifications** (optional): ensure the iOS simulator/device has
notification permissions enabled so local reminders can fire.
## GitHub Pages Policies
Static policy/support pages for App Store review live in `docs/`. The folder now
contains a minimal Jekyll setup (`_config.yml`, `_layouts`, and `assets`) so
Markdown pages gain HTML wrappers when GitHub Pages builds the `gh-pages`
branch. The `Publish Docs` workflow pushes the folder to `gh-pages` only when a
commit touching `docs/` lands on `master`, so publishing simply means editing
Markdown with the required front matter (`layout`, `title`, `permalink`) and
pushing your change. Preview the pages locally with any static server (they
render as plain Markdown locally) or let GitHub Pages handle the Jekyll build.
## Testing
All unit and widget tests run through `flutter test --coverage`, and coverage
must stay above 70%. Run locally with:
```bash
flutter test --coverage
```
## License
MIT © Denis Dementev