Track sessions, log daily health signals, surface patterns, and build a steadier rhythm over time.
Bowels is designed to make digestive health tracking feel approachable instead of clinical or tedious. The app focuses on fast logging, gentle guidance, and insights grounded in the data the user actually records.
It currently includes:
- Fast bowel logging with one-tap stool presets
- Timed session tracking with follow-up questions
- Daily health check-ins for water, fiber, meals, stress, sleep, exercise, caffeine, alcohol, medication, and mood
- Insight cards based on recent patterns
- Weekly Wrapped summaries
- Milestones and reminder notifications
- Import/export for backups and device migration
- Demo-mode onboarding before real data is added
| Feature | What it helps with |
|---|---|
| Quick Log | Save a bowel entry in one tap |
| Start Session | Track a live session with elapsed time |
| Questions | Add stool type, pain, blood, urgency, completion, and tags |
| Daily Health Check | Log the context around digestion |
| Insights | Surface recent trends and possible correlations |
| Weekly Wrapped | Review your week in a more visual summary |
| History | Export or import your archive |
| Settings | Pick theme accent and reminder time |
- Open the app and complete onboarding.
- If you have a previous export, import it during onboarding or later from
Data & Privacy. - If you are new, start with either
Quick LogorStart Session. - Add a few days of Daily Health Check data to improve insight quality.
Use Quick Log when you want speed. Pick the stool type preset and the app saves a short bowel entry immediately.
Use Start Session when you want richer tracking:
- Start the timer.
- Finish the session when done.
- Answer the follow-up questions.
- Save and let the app fold that into your analytics.
Log the surrounding context once per day:
- Water
- Fiber
- Meals
- Stress
- Sleep
- Exercise
- Caffeine
- Alcohol
- Medication
- Mood
These inputs help the app generate more meaningful pattern detection.
Insightshighlights recent signals like gaps in logging, recurring pain, blood, hydration patterns, stress-linked urgency, and similar trends.Weekly Wrappedturns the week into a more celebratory summary.Milestonescelebrate consistency as your logged-day streak grows.
This app is built to be local-first.
- Session data is stored on-device in SQLite
- Active draft state and milestone unlock state are stored in AsyncStorage
- Export creates a JSON archive you can share or keep as a backup
- Import supports the current archive format and legacy archive migration
If you care about keeping your history safe, export occasionally from Data & Privacy.
- Expo 55
- React Native 0.83
- React 19
- TypeScript
- Expo SQLite
- AsyncStorage
- Expo Notifications
- Node.js 20+ recommended
- npm
- Expo-compatible Android/iOS simulator or a physical device
- EAS CLI if you plan to produce APKs
npm installnpm startUseful variants:
npm run android
npm run ios
npm run webnpm run lint
npm run typecheck
npm run doctor
npm run verifynpm run build:apk
npm run build:apk:localThe notification helpers intentionally no-op in Expo Go (Constants.executionEnvironment === "storeClient"). That means reminder and live session notification behavior should be tested in a development build or production-style build, not just Expo Go.
The app does not depend on a backend for its core experience. Most development work happens inside:
- local persistence
- derived analytics
- UI states and flows
New users begin without real data. Until hasRealData is set, the app renders seeded demo sessions and health entries so the product feels alive during onboarding.
.
|-- App.tsx # App shell and screen routing
|-- components/ # Shared presentational building blocks
|-- screens/ # Main app screens
|-- store/ # AppProvider and state orchestration
|-- db/ # SQLite client, schema, repository helpers
|-- src/ # Analytics, notifications, theme, config, types
|-- assets/ # Icons and static assets
|-- scripts/ # Utility scripts
|-- .github/ # Release templates and workflows
- UI events trigger actions from
AppProvider. - Repository helpers in
db/repository.tspersist and read data from SQLite. AppProviderderives analytics, insights, and Weekly Wrapped summaries from stored records.- Screens render those derived values and allow the user to keep logging.
sessionssession_answersdaily_healthsettings
App.tsx: top-level app shell, screen selection, import/export, and notification wiringstore/AppProvider.tsx: central app state, settings persistence, demo-mode switching, and derived summariesdb/repository.ts: reads, writes, archive export/import, and legacy migrationdb/schema.ts: SQLite schemasrc/notifications.ts: reminder scheduling, live session notification updates, and milestone notificationsscreens/HomeScreen.tsx: quick log, status messaging, and daily check-in entry point
If you are preparing a release, these files already exist and are worth reading:
QUICK_RELEASE.mdCUSTOMIZE_RELEASE.mdFINAL_RELEASE_COMMANDS.mdRELEASE_GUIDE_COMPLETE.mdREADY_TO_RELEASE.md
- Install dependencies with
npm install. - Run
npm startand open the app on a device or emulator. - Make focused changes.
- Run
npm run lintandnpm run verify. - Test the affected flow manually.
- If notifications are involved, verify in a dev build rather than Expo Go.
- Fast enough to use in the moment
- Calm instead of alarming
- Insightful without pretending certainty
- Private by default
- Useful even before a user has a long history
Current app version in this repo: 2.1.2