Pine is a minimalist meditation app built with Expo and React Native. It focuses on one thing: making it easy to sit down for a guided breathing session and see your practice build up over time.
- Guided sessions — pick a duration (5, 10, or 30 minutes) and start a distraction-free breathing session with an ambient sound loop, a pulsing breathing glow, and a swaying pine forest backdrop.
- Local reminders — if a session is still running when the app is backgrounded, a local notification fires when the countdown ends, so you never miss the completion chime.
- Progress tracking — a home screen calendar marks the days you've meditated, tracks your current streak, counts sessions completed this month, and compares them against a weekly goal you set.
- Onboarding — a short first-run flow collects your name, weekly goal, and appearance preference before dropping you into the app.
- Appearance — light, dark, or device-matched theme.
- Backup & restore — export your name, goal, theme, and session history to a JSON file via the system share sheet, and import it back later on the same or another device.
- All data is stored locally on-device (via AsyncStorage) — there is no backend or account system.
- Expo SDK 57 + Expo Router for file-based navigation
- React Native 0.86 / React 19
- Zustand for state, persisted to
@react-native-async-storage/async-storage react-native-reanimated+react-native-svgfor the animated forest and breathing glowexpo-audio,expo-notifications,expo-blur,expo-linear-gradient,expo-document-picker,expo-sharing- TypeScript throughout
- Node.js 20+ and npm
- The Expo Go app on your phone (easiest way to run the project), and/or Android Studio / Xcode if you want to run on an emulator or build native code
- The Expo CLI is used via
npx, no global install required
git clone <this-repo-url>
cd pineapp
npm installStart the Metro bundler and dev server:
npm startThis opens Expo's developer tools. From there you can:
- Scan the QR code with the Expo Go app on your phone
- Press
ato open in an Android emulator - Press
ito open in an iOS simulator (macOS only) - Press
wto open the web build in your browser
Or launch a platform directly:
npm run android # build and run on Android (emulator or device)
npm run ios # build and run on iOS (simulator or device, macOS only)
npm run web # run in the browser
npm run android/npm run iosuseexpo run:android/expo run:ios, which generate nativeandroid/iosproject folders on first run (these are gitignored — safe to delete and regenerate). For everyday development,npm startwith Expo Go is faster and doesn't require native tooling.
app/— screens and routes (Expo Router), one file per route: tracker home, onboarding, session, settingssrc/components/— UI components, grouped by screen (session/,onboarding/,tracker/)src/store/— Zustand store (persisted app state: onboarding, tracker history, session state)src/lib/— sound, notifications, date helpers, and backup import/exportsrc/theme/— color tokens and the light/dark/device theme hooksrc/hooks/— shared hooks (e.g. the session countdown timer)