A cross-platform mobile app (iOS + Android) for tracking gift ideas for friends and family — with links, price tracking, and status management.
Built with React Native + Expo for maximum portability.
- People Management — Add friends/family with custom emojis and occasions (birthdays, holidays, etc.)
- Gift Tracking — Save gift ideas with names, links, notes, and prices
- Price Monitoring — Track current vs. original price with percentage change indicators (↓ drops, ↑ increases)
- Status Workflow — Move gifts through: 💡 Idea → ✅ Purchased → 🎀 Wrapped → 🎉 Given
- Search & Filter — Find gifts by name/notes, filter by status
- Budget Dashboard — See total budget, savings from price drops, and completion progress
- Persistent Storage — Data saved locally via AsyncStorage, persists between app restarts
- Native Feel — Platform-adaptive UI with bottom sheet modals, haptic feedback, and smooth animations
- Node.js 18+ installed
- Expo CLI (
npx expoworks without global install) - For iOS: macOS with Xcode (or Expo Go app on your iPhone)
- For Android: Android Studio with emulator (or Expo Go app on your Android phone)
# 1. Navigate to the project
cd parcle
# 2. Install dependencies
npm install
# 3. Start the development server
npx expo startEasiest method — Expo Go app:
- Install "Expo Go" from the App Store (iOS) or Play Store (Android)
- Run
npx expo startin terminal - Scan the QR code with your phone's camera (iOS) or Expo Go app (Android)
iOS Simulator:
npx expo start --iosAndroid Emulator:
npx expo start --android# Install EAS CLI
npm install -g eas-cli
# Configure your project
eas build:configure
# Build for iOS
eas build --platform ios
# Build for Android
eas build --platform android
# Build for both
eas build --platform all# Android APK (for testing)
eas build --platform android --profile preview
# iOS (requires Apple Developer account)
eas build --platform ios --profile productionparcle/
├── App.tsx # Root component & navigation
├── app.json # Expo configuration
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── babel.config.js # Babel config (Reanimated plugin)
├── assets/ # App icons, splash screens
└── src/
├── constants/
│ └── theme.ts # Colors, status config, emojis, default data
├── hooks/
│ └── useStore.ts # Data management + AsyncStorage persistence
├── screens/
│ ├── PeopleListScreen.tsx # Home screen — people list + stats
│ └── PersonDetailScreen.tsx # Gift list for a person + add/edit
└── utils/
├── types.ts # TypeScript interfaces
└── helpers.ts # formatPrice, priceDiff, generateId
| Action | How |
|---|---|
| Add a person | Tap the orange + button on the home screen |
| View gifts | Tap on a person's card |
| Add a gift | Tap + on the person detail screen |
| Edit a gift | Tap on a gift card |
| Change status | Tap the status badge or "↻ Status" to cycle through statuses |
| Delete a gift | Long-press on a gift card |
| Delete a person | Long-press on a person card |
| Search gifts | Use the search bar on the person detail screen |
| Filter by status | Tap status filter chips (All, 💡 Idea, ✅ Purchased, etc.) |
| Open a link | Tap "🔗 Open Link" to open in your browser |
Edit src/constants/theme.ts → COLORS object to adjust the app's palette.
Edit the EMOJIS array in src/constants/theme.ts.
- Add to the
GiftStatustype insrc/utils/types.ts - Add config in
STATUS_CONFIGinsrc/constants/theme.ts - Add to
STATUSESarray
- React Native — Cross-platform mobile framework
- Expo SDK 52 — Build tooling, OTA updates, device APIs
- TypeScript — Type safety
- AsyncStorage — Local data persistence
- React Native Reanimated — Smooth animations (ready to use)
MIT