A fully functional Google Keep Notes clone built with React Native and Expo, featuring advanced AI capabilities powered by Google Gemini, vector search with Pinecone, speech-to-text with Deepgram, and cloud synchronization with MongoDB.
- Pixel-perfect UI: Exact replica of Google Keep's dark theme interface
- Note Management: Create, edit, delete, pin, and organize notes
- Color Coding: 12 Google Keep color options for note categorization
- Search: Real-time search across note titles, content, and labels
- Grid/List Views: Multiple viewing modes for note organization
- Labels: Custom label creation and filtering
- Responsive Design: Optimized for mobile devices
- AI Text Generation: Generate note content using Google Gemini AI
- Smart Search: Semantic search using Pinecone vector database
- AI Chat Assistant: Conversational AI for note queries and management
- Speech-to-Text: Audio note transcription with Deepgram
- Auto-Labeling: AI-suggested labels for note organization
- Note Summarization: AI-generated summaries of long notes
- Real-time Sync: Automatic synchronization across devices
- Cloud Storage: MongoDB Atlas for reliable data persistence
- Vector Search: Pinecone for semantic note discovery
- Authentication: User management with Clerk (ready for implementation)
- Offline Support: Local storage with automatic cloud sync when online
- Frontend: React Native with Expo
- Navigation: React Navigation (Drawer + Stack)
- UI Framework: Custom components with Material Design principles
- Local Storage: AsyncStorage for offline functionality
- Cloud Database: MongoDB Atlas
- Vector Database: Pinecone for semantic search
- AI Services: Google Gemini via Vercel AI SDK
- Speech-to-Text: Deepgram
- Authentication: Clerk (ready for integration)
- TypeScript: Full type safety throughout
- Node.js 18+ and npm
- Expo CLI:
npm install -g @expo/cli - iOS Simulator (for iOS development) or Android Studio (for Android)
- Active internet connection for cloud services
git clone <repository-url>
cd KeepNotesClone
npm installCreate a .env file in the root directory:
# AI Services
GEMINI_API_KEY=your_gemini_api_key_here
PINECONE_API_KEY=your_pinecone_api_key_here
PINECONE_ENVIRONMENT=your_pinecone_environment_here
PINECONE_INDEX_NAME=keep-notes-index
DEEPGRAM_API_KEY=your_deepgram_api_key_here
# Authentication (Optional)
CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key_here
# Database (Optional)
MONGODB_URI=your_mongodb_connection_string_here
MONGODB_DB_NAME=keepnotesclone
# App Configuration
APP_ENV=development# Start the development server
npx expo start
# Run on specific platform
npx expo start --ios # iOS Simulator
npx expo start --android # Android Emulator
npx expo start --web # Web browser- Visit Google AI Studio
- Create a new API key for Gemini
- Add the key to your
.envfile asGEMINI_API_KEY
Features enabled:
- AI text generation in notes
- Conversational AI chat assistant
- Note summarization
- Auto-label suggestions
- Sign up at Pinecone
- Create a new index with:
- Dimension: 384
- Metric: Cosine similarity
- Cloud: AWS (recommended)
- Region: us-east-1
- Get your API key and environment details
- Update
.envwith your Pinecone credentials
Features enabled:
- Semantic search across notes
- AI-powered note discovery
- Related note suggestions
- Sign up at Deepgram
- Create a new API key in your dashboard
- Add the key to your
.envfile asDEEPGRAM_API_KEY
Features enabled:
- Audio note recording and transcription
- Voice-to-text note creation
- Real-time speech recognition
Database & Backend Setup (Optional)Option 1: Custom Backend APIIf you have your own backend API for data storage:1. Set up your REST API with endpoints for notes, chat threads, labels, and users2. Add your API base URL to .env as BACKEND_URLOption 2: MongoDB Atlas (Legacy)For direct MongoDB connection (requires custom backend):1. Create account at MongoDB Atlas2. Create a new cluster (free tier available)3. Create a database user and get connection string4. Whitelist your IP address5. Add connection string to .env as MONGODB_URIFeatures enabled:- Cloud note synchronization- Cross-device data persistence- Chat thread storage- User data backupNote: The app now uses HTTP-based database services instead of direct MongoDB connections for React Native compatibility. All database operations gracefully fall back to local storage when offline.
- Sign up at Clerk
- Create a new application
- Get your publishable key from the dashboard
- Add to
.envasCLERK_PUBLISHABLE_KEY
Features enabled:
- User authentication
- Multi-user support
- Social login options
- Secure user sessions
- Tap the blue "+" floating action button
- Enter title and content
- Use the AI sparkle button to generate content with AI
- Select colors from the bottom palette
- Notes auto-save when you navigate away
- AI Text Generation: Tap the sparkle icon in note editor, enter a prompt
- AI Chat: Tap the smaller sparkle FAB on home screen
- Search: Use the search bar for both keyword and semantic search
- Voice Notes: Long-press the + button to record audio (Deepgram required)
- Pin Notes: Tap the pin icon in note editor or long-press note cards
- Colors: Use the color palette in note editor
- Labels: Add labels using the # symbol in note content
- Search: Find notes by title, content, or labels
The app works in three modes:
- Offline Mode: All features work with local storage only
- Partial Cloud: Some services configured (AI works, sync may be limited)
- Full Cloud: All services configured (complete functionality)
Data flows:
- Local First: All changes save locally immediately
- Background Sync: Cloud sync happens in background when online
- Conflict Resolution: Last-modified wins for sync conflicts
- β iOS (iOS 13+)
- β Android (API 21+)
- β Web (modern browsers)
- Local Storage: Notes stored securely on device
- API Keys: Never stored in app code, only in environment variables
- Data Transmission: All cloud communication uses HTTPS/WSS
- User Control: Full offline functionality without cloud services
App won't start:
# Clear Expo cache
npx expo start --clear
# Reinstall dependencies
rm -rf node_modules package-lock.json
npm installAI features not working:
- Verify API keys in
.envfile - Check internet connection
- Ensure API services are active and have available quota
Notes not syncing:
- Check MongoDB connection string
- Verify network connectivity
- Check console logs for sync errors
Search not working properly:
- Ensure Pinecone index is created with correct dimensions
- Check API key and environment settings
- Allow time for notes to be indexed
- Check the console logs in Expo Dev Tools
- Verify all environment variables are set correctly
- Test individual services using the test functions in service files
- Check service provider dashboards for API usage and errors
src/
βββ components/ # Reusable UI components
βββ navigation/ # Navigation configuration
βββ screens/ # Main app screens
βββ services/ # Cloud service integrations
βββ styles/ # Theme and styling
βββ types/ # TypeScript type definitions
βββ utils/ # Helper functions and utilities
- syncService: Orchestrates all cloud synchronization
- geminiService: Handles AI text generation and chat
- pineconeService: Manages vector search and indexing
- deepgramService: Processes speech-to-text
- databaseService: Manages MongoDB operations
- authService: Handles user authentication
- Create TypeScript types in
src/types/ - Implement UI components in
src/components/ - Add service integration in
src/services/ - Update sync logic in
syncService - Test with all service configurations
This project is for educational and demonstration purposes. Google Keep is a trademark of Google LLC.
Contributions are welcome! Please feel free to submit issues and pull requests.
Note: This app demonstrates the integration of multiple AI and cloud services. While it can run without any external services using local storage, the full feature set requires API keys for the various services mentioned above.