A beautiful and intelligent Pomodoro timer app built with React Native and Expo, featuring AI-powered break suggestions and YouTube video recommendations.
- Pomodoro Timer: 25-minute work sessions with customizable break times
- Mood Tracking: Track your mood after each work session
- Progress Statistics: View daily work time, completed cycles, and overall mood
- Dark/Light Mode: Toggle between themes for comfortable usage
- Gemini AI Integration: Get personalized break activity suggestions
- YouTube Video Recommendations: 50% chance for video suggestions during 5+ minute breaks
- Mood-Based Suggestions: Activities tailored to your current mood and break duration
- Smart Fallbacks: Automatic fallback to text suggestions if video search fails
- Short Breaks (<5 min): Always get AI text suggestions
- Medium Breaks (5-9 min): 50% chance for YouTube videos
- Long Breaks (10+ min): 50% chance for YouTube videos with extended activities
- Node.js (v20.10.0 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator (for iOS development) or Android Studio (for Android development)
-
Clone the repository
git clone https://github.com/yourusername/rhythm-1.git cd rhythm-1 -
Install dependencies
npm install
-
Set up environment variables
cp config/env.example .env
Edit
.envand add your API keys:GEMINI_API_KEY=your_gemini_api_key_here ARCADE_API_KEY=your_arcade_api_key_here
-
Start the development server
npm start
-
Run on device/simulator
- Scan QR code with Expo Go app (mobile)
- Press
ifor iOS simulator - Press
afor Android emulator - Press
wfor web browser
- Visit Google AI Studio
- Create a new API key
- Add it to your
.envfile asGEMINI_API_KEY
- Visit Arcade.dev
- Sign up and get your API key
- Add it to your
.envfile asARCADE_API_KEY
rhythm-1/
├── components/
│ ├── BreakActivity.js # AI break suggestions & YouTube videos
│ ├── HomeScreen.js # Main dashboard with stats
│ ├── LiquidProgress.js # Animated progress indicator
│ ├── MoodSelector.js # Mood selection interface
│ └── PomodoroTimer.js # Main timer component
├── services/
│ ├── arcade.js # YouTube video search via Arcade.dev
│ └── geminiService.js # AI break activity suggestions
├── config/
│ ├── env.js # Environment variable configuration
│ └── env.example # Example environment file
├── utils/
│ └── database.js # SQLite database for stats
└── assets/ # App icons and images
- Start Session: Begin a 25-minute work timer
- Work Phase: Focus on your task with visual progress indicator
- Break Time: Take a break with AI-suggested activities
- Mood Selection: Track how you feel after each session
- Statistics: View your productivity patterns
The app intelligently chooses between AI text suggestions and YouTube videos:
- Break Time < 5 minutes: Always shows AI text suggestions
- Break Time ≥ 5 minutes: 50% chance for YouTube videos
- Mood-Based Keywords: Different search terms based on your mood
- Duration-Specific: Keywords adapt to break length
When a video is selected:
- Search: Uses Arcade.dev API to find relevant videos
- Popup Modal: Shows video title, channel, and description
- Watch Button: Opens video directly in YouTube app
- Fallback: If video search fails, shows AI text suggestion
GEMINI_API_KEY: Your Google Gemini API keyARCADE_API_KEY: Your Arcade.dev API keyNODE_ENV: Environment (development/production)
- Modify break durations in
PomodoroTimer.js - Add new mood types in
MoodSelector.js - Customize YouTube keywords in
BreakActivity.js - Adjust AI prompts in
geminiService.js
The app uses SQLite to store:
- Sessions: Work/break cycles with timestamps
- Moods: User mood selections
- Statistics: Daily aggregated data
# Build for iOS
expo build:ios
# Build for Android
expo build:android
# Build for web
expo build:web- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Happy Productivity! 🎯