A simple, privacy-focused contraction timing app for expectant parents. Built with React Native and Expo for iOS, Android, and Web.
- One-tap timing - Start and stop contractions with a single tap
- Contraction history - View all recorded contractions with duration and time between
- Statistics - See average duration and frequency at a glance
- Save sessions - Save contraction sets for later reference
- Dark mode - Automatic theme support based on system preferences
- Privacy-first - All data stays on your device, no accounts or cloud sync
- Cross-platform - Works on iOS, Android, and web browsers
-
Clone the repository:
git clone https://github.com/yourusername/contraction-timer.git cd contraction-timer -
Install dependencies:
pnpm install
-
Start the development server:
pnpm dlx expo start
-
Run on your preferred platform:
- Press
ifor iOS simulator - Press
afor Android emulator - Press
wfor web browser - Scan the QR code with Expo Go on your device
- Press
- Start timing - Tap the large button when a contraction begins
- Stop timing - Tap again when the contraction ends
- View history - See all recorded contractions in the list below
- Check statistics - Average duration and frequency appear automatically
- Save session - Save your contraction set for later reference
- Clear history - Start fresh when needed
- Framework: React Native with Expo SDK 54
- Language: TypeScript
- Navigation: React Navigation
- State Management: React Context + useReducer
- Storage: AsyncStorage (local device storage)
- Styling: React Native StyleSheet
src/
├── components/ # Reusable UI components
│ ├── TimerButton.tsx
│ ├── ContractionList.tsx
│ ├── ContractionItem.tsx
│ ├── Statistics.tsx
│ └── Instructions.tsx
├── context/ # State management
│ ├── ContractionContext.tsx
│ └── ThemeContext.tsx
├── screens/ # App screens
│ ├── HomeScreen.tsx
│ ├── SavedSetsScreen.tsx
│ └── SettingsScreen.tsx
├── types/ # TypeScript definitions
│ └── index.ts
└── utils/ # Helper functions
├── storage.ts
└── formatting.ts
# Start development server
pnpm start
# Start on specific platform
pnpm ios # iOS simulator
pnpm android # Android emulator
pnpm web # Web browser
# Build for production
pnpm dlx expo build:ios
pnpm dlx expo build:android
pnpm dlx expo export:web- Functional components with hooks
- Named exports preferred
- TypeScript strict mode enabled
- Components are focused and single-purpose
This app is designed with privacy as a core principle:
- No accounts required - Use immediately without signing up
- No cloud storage - All data stored locally on your device
- No analytics - No tracking or data collection
- No ads - Being a parent is expensive enough already
- No network calls - Works completely offline
Your contraction data never leaves your device.
This app is a timing tool only. It does not provide medical advice, diagnoses, or recommendations about when to go to the hospital or contact your healthcare provider. Always consult with your doctor, midwife, or healthcare provider for medical guidance during pregnancy and labor.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
GNU AGPLv3. See the LICENSE file for details.