HairSnap helps users track and monitor hair loss over time with easy photo comparisons, progress tracking, and data visualization. Built with Expo, React Native, and TypeScript.
- 📷 Take photos of your scalp/hair with consistent positioning guides
- 📊 Track hair density changes over time with visualization
- 🔄 Side-by-side comparison of photos from different dates
- 📅 Scheduling reminders for regular photo check-ins
- 📱 User-friendly interface with intuitive navigation
- 🔒 Private and secure - all data stays on your device
- Clone this repository
- Install dependencies:
npm install - Start the development server:
npx expo start
Run unit tests with Jest:
npm test
For end-to-end testing with Detox:
- Install Detox CLI:
npm install -g detox-cli - Build the app for testing:
detox build --configuration ios.sim.debug - Run tests:
detox test --configuration ios.sim.debug
npm install -g eas-cli
eas login
eas build:configure
eas build --profile preview --platform ios
eas build --profile preview --platform android
eas build --profile production --platform ios
eas build --profile production --platform android
eas submit -p ios --latest
eas submit -p android --latest
The project includes an eas.json configuration file with different profiles:
- development: For local development and testing
- preview: For TestFlight/Internal Testing builds
- production: For App Store/Play Store submission
Example structure:
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": true
}
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"appleId": "your-apple-id@example.com",
"ascAppId": "1234567890",
"appleTeamId": "AB12CD34EF"
},
"android": {
"serviceAccountKeyPath": "path/to/service-account.json"
}
}
}
}├── assets/ # Images, fonts, etc.
├── src/
│ ├── components/ # Reusable UI components
│ ├── constants/ # App-wide constants and theme
│ ├── context/ # React Context providers
│ ├── hooks/ # Custom React hooks
│ ├── navigation/ # Navigation configuration
│ ├── screens/ # App screens
│ ├── services/ # API and device services
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Helper functions
├── App.tsx # App entry point
├── app.json # Expo configuration
└── package.json # Dependencies
Pierre-Henry Soria — a super passionate engineer who loves automating content creation efficiently! Enthusiast of YouTube, AI, learning, and—of course—writing! Find me at pH7.me
Enjoying this project? Buy me a coffee (spoiler: I love almond extra-hot flat white coffees).
This project is licensed under the MIT License - see the LICENSE file for details.