Offline Android-first tracker for a personal 75 Hard Challenge. The app is built with Expo SDK 54 and React Native, stores progress locally with AsyncStorage, and has no login, backend, cloud sync, subscription, or social features.
- Setup flow before Day 1 with start date, water goal, reading goal, reminder time, and locked daily task selection.
- Default tasks can be enabled, disabled, or renamed. Multiple custom tasks can be added.
- Today screen with Day
N / 75, date, quote, progress, checklist, notes, photo picker, warning state, and day completion confetti. - 75-day progress grid with completed, failed, pending, and current indicators.
- Day detail modal for checklist edits, notes, progress photo, previous-day warning, and failure confirmation.
- Stats for completion percentage, current streak, longest streak, days remaining, perfect days, and task-wise completion.
- Settings for restart, start date, locked checklist editing with warning, reminders, why-I-started text, JSON export/import, and reset.
- Past incomplete days are marked failed automatically the next time the app opens after midnight.
.
├── App.tsx
├── app.json
├── eas.json
├── package.json
├── src
│ ├── components
│ ├── lib
│ ├── screens
│ ├── state
│ ├── theme.ts
│ └── types.ts
└── README.md
npm installStart the Expo development server:
npm run startRun in Expo Go on a connected Android device or emulator:
npm run androidOr run npm run start and scan the QR code from Expo Go.
This project is pinned to Expo SDK 54 so it can run in Expo Go versions that reject SDK 55 projects with Project is incompatible with this version of Expo Go.
Log in and build the APK with the project-local EAS CLI:
npx --yes eas-cli login
npm run build:apkIf EAS tries to package sibling folders from /home/deeponh/Projects or fails with ENOSPC, use the isolated build script:
npm run build:apk:isolatedThe preview profile in eas.json is configured with "buildType": "apk".
Requires Android Studio, Android SDK, Java, and Gradle support on your machine.
npm run build:apk:localThe APK will be generated at:
android/app/build/outputs/apk/release/app-release.apk
If you already installed an older APK, uninstall it from the phone before installing the new one. APKs do not live reload like Expo Go.
npm run typecheck
npx expo-doctor
npx expo export --platform android --output-dir /tmp/75hard-expo-export-sdk54All three checks passed in this workspace after implementation.