A free, minimal 20-20-20 eye-break reminder for iPhone and Apple Watch.
iCare helps you follow the 20-20-20 rule: every 20 minutes, look at something 20 feet away for 20 seconds. It sends quiet reminders on a schedule you control, and a single tap starts a short countdown so you can get back to work.
The app is fully usable on iPhone alone and meaningfully better with Apple Watch, where reminders arrive as subtle haptic taps on your wrist.
- Recurring local reminders on a configurable interval (15 -- 45 minutes)
- One-tap countdown to complete a break from a notification or the app
- Apple Watch companion with haptic reminders, on-wrist countdown, and WatchConnectivity sync
- Focus filter integration to override reminder behavior per Focus mode
- Configurable schedule -- active hours, weekdays-only, break duration (10 -- 30 s)
- Pause, snooze, skip -- stay in control without turning reminders off
- Today's history -- see completed and skipped breaks at a glance
- No accounts, no backend, no subscriptions -- data stays on your device
iCare/ iPhone app (SwiftUI)
App/ Entry point and root navigation
Features/ Home, Countdown, History, Settings, Onboarding
Intents/ Focus filter (SetFocusFilterIntent)
iCareWatch/ watchOS app
App/ Entry point
Features/ Home, Countdown, Notification scene
Shared/ Code shared between iPhone and Watch
Models/ AppState, settings, break records
Services/ ReminderEngine, NotificationCoordinator, WatchSyncManager, etc.
DesignSystem/ Colors, typography, shared UI components
Assets.xcassets/ App icons and images
docs/ Product briefs, specs, architecture, and delivery plans
fastlane/ Fastlane config for signing and releases
.github/workflows/ Tag-based CI/CD deploy pipeline
| Tool | Version |
|---|---|
| Xcode | 16+ |
| iOS deployment target | 17.0 |
| watchOS deployment target | 10.0 |
| Ruby (for Fastlane) | 3.2+ |
| XcodeGen | latest |
# 1. Clone the repo
git clone https://github.com/<your-org>/iCare.git
cd iCare
# 2. Generate the Xcode project
xcodegen generate
# 3. Open in Xcode
open iCare.xcodeproj
# 4. Select the "iCare" scheme, pick a simulator, and runNo third-party Swift packages are required -- the app uses Apple frameworks only.
Fastlane is used for CI releases. To set it up locally:
bundle install
bundle exec fastlane sync_certs # requires Match repo and ASC credentials
bundle exec fastlane release # builds, signs, and uploads to App Store ConnectSee fastlane/Fastfile for details.
iCare is a pure SwiftUI app with no external dependencies. Key design decisions:
AppStateis the central observable model shared across views. It owns reminder scheduling, break state, notification handling, and Watch sync.ReminderEnginemanages the scheduling cadence -- intervals, active hours, weekday filtering, pause/resume, and snooze.NotificationCoordinatorhandles allUserNotificationsinteractions including actionable notification categories (Start / Snooze / Skip).WatchSyncManagerbridges iPhone and Watch state viaWatchConnectivity, syncing settings and relaying commands in both directions.SettingsStorepersists user preferences inUserDefaultswith an App Group (group.com.iCare.shared) so both targets can access shared state.- Focus filter is implemented as an
SetFocusFilterIntent(App Intents framework), allowing users to customize reminder behavior per Focus mode.
For the full technical design, see docs/technical/architecture.md.
The docs/ directory contains detailed product and technical documentation:
- Product brief -- problem, positioning, and principles
- MVP spec -- requirements, scope, and non-goals
- User flows -- core journeys on iPhone and Watch
- Architecture -- modules, notification strategy, platform design
- Data model -- app state and storage
- Notification strategy -- scheduling rules and failure modes
- Implementation plan -- milestone-based build order
- Acceptance criteria -- release gates and QA scenarios
Contributions are welcome! If you'd like to help:
- Fork the repository
- Create a feature branch (
git checkout -b my-feature) - Make your changes and verify they build on both iPhone and Watch simulators
- Open a pull request with a clear description of what you changed and why
Please keep changes focused -- iCare intentionally avoids feature bloat. See the MVP spec for the project's scope philosophy.
This project is licensed under the MIT License.




