Habit tracker app (Keel)
Calm, local-first habit tracker for iOS and Android: daily, set-weekday or N-per-week habits, one-tap medallion check-ins with undo, notes, DST-safe streaks, 16-week almanac with list alternative, pause/archive, and opt-in local reminders. No health claims.
Creator ($9 a month) includes up to 20 new premium families a billing month (5 in any 24 hours). Already a member? Open your library.
- Version
- 1.0.2
- Platforms
- iOS, Android
- Framework
- expo
- Archive
- 2.4 MB 127 files
Screens from the build
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)App screenshots may come from an Expo web export; those are labelled as such and are not native verification. Native runs are listed under Tested with their own status.
What it does
- set up a habit (daily, set weekdays, N per week)
- check in for today with undo
- add a note to a check-in
- see streaks and weekly progress
- review history heatmap or week list
- back-fill a past day
- pause, resume, archive, delete
- opt-in local reminders with permission flow
- persist across restarts
Screens
todayMedallion check-ins, progress, 7-day beads, noteshistory16-week almanac heatmap or week list with summaryhabitsActive habits, reorder, archive and settings linksarchivedArchived habits with restoresettingsWeek start, appearance, reminder permission, samples, erasehabit-detailStreaks, calendar back-fill, notes, pause/archive/deletehabit-formCreate/edit with schedule, colour, reminder and permission flownoteNote for one check-in (form sheet)
States covered
- Loading
- Empty
- No results
- Error
- Validation
- Permission denied
- Destructive confirm
- Undo
- First run
- Deleted elsewhere
Stack and versions
| expo | 57.0.25 |
|---|---|
| expo-router | 57.0.23 |
| react | 19.2.3 |
| react-native | 0.86.3 |
| typescript | 6.0.3 |
| expo-sqlite | 57.0.3 |
| expo-notifications | 57.0.21 |
| jest | 29.7.0 |
| jest-expo | 57.0.5 |
| @testing-library/react-native | 14.0.1 |
Commands:
| install | npm ci |
|---|---|
| dev | npx expo start |
| test | npm test |
| typecheck | npx tsc --noEmit |
| build | npx expo prebuild && npx expo run:ios | npx expo run:android (or EAS Build) |
| e2e | none automated; native script in docs/VERIFICATION.md |
| web_preview | npx expo export -p web --output-dir dist && node scripts/preview-screenshots.mjs |
Tested
| Check | Platform | Tool | Result | Date |
|---|---|---|---|---|
| dependency pins for Expo SDK 57 native modules (react-native-reanimated 4.5.1, react-native-worklets 0.10.1, react-native-gesture-handler 2.32): expo install --check, npm audit 0, jest, tsc, expo-doctor, Metro iOS + Android bundles | Node | npm 11 + expo install --check | Pass | 2026-09-26 |
| unit + screen tests (42, TZ America/New_York) | Node | jest 29.7.0 + jest-expo 57.0.5 + @testing-library/react-native 14.0.1 | Pass | 2026-09-26 |
| typecheck | Node | typescript 6.0.3 (tsc --noEmit) | Pass | 2026-09-26 |
| expo-doctor | Node | expo-doctor 1.20.4 | Pass | 2026-09-26 |
| native project generation (expo prebuild --no-install) | Node | expo 57.0.25 prebuild | Pass | 2026-09-26 |
| web export preview screenshots (not native verification) | Web app | expo export -p web + Playwright 1.56 Chromium | Pass | 2026-09-26 |
| fresh-copy reproduction (npm ci, npm test, tsc) | Node | npm 10.9.7 / node 22.22.2, cold Jest cache | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash reports | iOS | iOS Simulator (iPhone 17 Pro, Xcode 27) | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash in logcat | Android | Android Emulator (Pixel 9) | Pass | 2026-09-26 |
Not included
- No medical or health claims; no HealthKit/Health Connect
- Local notifications only: no push service or server; delivery subject to OS focus/battery settings
- No account, cloud sync, backup or export: data is local to the device
- No widgets, Live Activities or watch apps
- No analytics or network calls from app code
Each boundary comes with instructions for adding it in docs/INTEGRATION-BOUNDARIES.md.
Known limitations
- Native iOS/Android runs and reminder delivery not yet verified by the author (pending custodian run on a Mac)
- Reminders are planned 14 days ahead and refreshed when the app opens
- expo-notifications adds the iOS aps-environment entitlement even though only local notifications are used
- Web export is a layout preview only; reminders unavailable there
- Phone layout on tablets; JS tab bar (native tabs unstable in SDK 57)
- Tests need Node >= 22.13 (@testing-library/react-native 14)
Licence
Use in unlimited end products incl. client/commercial; no resale/redistribution as a template, kit or dataset; no ML training. Survives cancellation for delivered versions.
Full terms: Motif template licence. Open-source parts keep their own licences (licenses.json, id lic-premium-habit-tracker-1-0-2).
Ask your agent
Use Motif to activate the premium-habit-tracker template and download it. Then adapt it for a climbing gym's route log: replace the content and imagery, keep the design tokens and every state in docs/STATE-MATRIX.md, and run check_design_contract before you finish.Motif guides applied
app-design-gate-workflow · app-category-health · app-reference-gentler-streak-ethical-dataviz · app-reference-focus-friend-single-purpose-calm · app-transplant-test-no-generic-template-app · app-template-tab-fab-onboarding-budgets · app-visual-identity-system-five-decisions · app-functional-truth-rulings · app-screen-state-matrix · app-empty-states · app-onboarding-first-value · app-destructive-actions-undo-vs-confirm · app-notifications-permission-and-etiquette · app-permission-requests-and-recovery · app-form-validation-feedback · app-save-model-and-unsaved-changes-guard · app-local-persistence-choice-expo · app-sqlite-data-model-offline-first · app-tab-bar-implementation-expo-router · app-theming-light-dark-system · app-dynamic-type-and-font-scaling · app-touch-targets-and-spacing · app-react-native-accessibility-semantics · app-safe-areas-and-edge-to-edge · app-haptics-usage-guidelines · app-back-navigation-ios-android · app-platform-conventions-vs-brand · sys-accessible-chart-text-alternative-and-data-table · sys-chart-selection-by-question
Archive
SHA-256 cd7d9072653fff844ffb249f98befd0ddd4ada60231b7da27a20abc8fec41f07