A React Native mobile application for Drive Clone - a secure file storage and management platform. This app provides mobile access to your files with features like biometric authentication, file browsing, uploads, downloads, photo albums, and more.
- User Authentication - Secure login with JWT tokens and 2FA support
- Biometric Security - Face ID / Touch ID integration for quick and secure access
- File Management - Browse, upload, download, rename, and delete files and folders
- Folder Navigation - Hierarchical folder structure with breadcrumb navigation
- File Preview - Built-in preview for images, PDFs, documents, and text files
- Search - Fast file search across your entire drive
- Starred Files - Mark important files for quick access
- Recent Files - View recently accessed files
- Photo Albums - Organize photos into albums with grid view
- File Sharing - Share files using iOS/Android native share sheets
- Download Management - Progress tracking for file downloads
- Encrypted storage using Expo SecureStore
- Biometric authentication (Face ID, Touch ID, Fingerprint)
- App lock when returning from background
- JWT token-based API authentication
- Secure credential management
Add screenshots of your app here
- Framework: React Native 0.81 with Expo SDK 54
- Router: Expo Router 6 (file-based routing)
- UI Components: React Native core components + Ionicons
- State Management: React hooks (useState, useEffect)
- HTTP Client: Axios
- Secure Storage: expo-secure-store
- Authentication: expo-local-authentication (biometrics)
- File System: expo-file-system, expo-document-picker, expo-sharing
- Node.js 16+ and npm
- Expo CLI (
npm install -g expo-cli) - iOS Simulator (for macOS) or Android Emulator
- Expo Go app (optional, for quick testing)
- Backend API server running (see backend repository)
-
Clone the repository
git clone https://github.com/yourusername/drive-clone-mobile.git cd drive-clone-mobile -
Install dependencies
npm install
-
Configure the API URL
The app uses
expo-constantsto read configuration. Updateapp.jsonto add your backend API URL:{ "expo": { "extra": { "apiUrl": "https://your-api-server.com/api" } } }Or for local development, the app defaults to
http://localhost:5000/api -
Update the bundle identifier (for production builds)
In
app.json, change the iOS bundle identifier:{ "expo": { "ios": { "bundleIdentifier": "com.yourcompany.driveclonemobile" } } }
Start the Expo development server:
npm startThen choose how to run:
- Press
ifor iOS Simulator (macOS only) - Press
afor Android Emulator - Press
wfor web browser - Scan the QR code with Expo Go app on your physical device
# iOS (requires macOS)
npm run ios
# Android
npm run android
# Web
npm run webThis project uses Expo Application Services (EAS) for building production apps.
npm install -g eas-cli
eas login# Development build (with dev client)
eas build --profile development --platform ios
eas build --profile development --platform android
# Preview build (internal testing)
eas build --profile preview --platform ios
eas build --profile preview --platform android
# Production build
eas build --profile production --platform ios
eas build --profile production --platform androidBuild configuration is in eas.json.
drive-clone-mobile/
├── app/
│ ├── (auth)/ # Authentication screens
│ │ └── login.js # Login with 2FA support
│ ├── (tabs)/ # Main tab navigation
│ │ ├── _layout.js # Tab bar configuration
│ │ ├── index.js # Files browser (home)
│ │ ├── recent.js # Recent files
│ │ ├── albums.js # Photo albums
│ │ ├── starred.js # Starred files
│ │ └── profile.js # User profile & settings
│ ├── album/
│ │ └── [id].js # Album detail view
│ ├── screens/ # Settings screens
│ │ ├── AccountSettings.js
│ │ ├── SecuritySettings.js
│ │ ├── BiometricSettings.js
│ │ └── NotificationsSettings.js
│ ├── components/ # Reusable components
│ │ ├── FilePreview.js # File preview modal
│ │ └── DownloadModal.js # Download progress modal
│ ├── config/
│ │ └── api.js # Axios configuration
│ ├── utils/ # Helper utilities
│ │ ├── biometricAuth.js # Biometric authentication
│ │ ├── downloadHelper.js # File download handling
│ │ └── fileIcons.js # File type icons
│ └── _layout.js # Root layout with auth guard
├── app.json # Expo configuration
├── eas.json # EAS Build configuration
├── package.json
└── tsconfig.json
- User enters credentials on login screen
- If 2FA is enabled, a second screen prompts for the code
- JWT token is stored securely in Expo SecureStore
- Token is automatically added to all API requests via Axios interceptor
- Root layout (
app/_layout.js) manages navigation guards
- On first login, users are prompted to enable biometric authentication
- Preferences stored securely using Expo SecureStore
- When enabled, app requires biometric unlock on startup
- Re-locks when app goes to background and returns to foreground
- Supports Face ID (iOS), Touch ID (iOS), and Fingerprint (Android)
- Upload: Uses
expo-document-pickerto select files - Download: Uses
expo-file-systemwith progress tracking, thenexpo-sharingto open share sheet - Preview: In-app preview for images, PDFs, and documents
- Navigation: Breadcrumb trail for folder hierarchy
The app expects a backend API with these endpoints:
POST /auth/login- User authentication (with 2FA support)GET /files- List files (supportsparent_idquery param for folders)GET /files/search?q=query- Search filesPOST /files/upload- Upload filesPOST /files/folder- Create folderPATCH /files/:id/rename- Rename filePATCH /files/:id/star- Star/unstar fileDELETE /files/:id- Delete fileGET /albums- List albumsGET /albums/:id- Get album detailsPOST /albums- Create albumDELETE /albums/:id- Delete album
All requests include Authorization: Bearer <token> header.
Edit app.json:
{
"expo": {
"extra": {
"apiUrl": "https://your-backend-api.com/api"
}
}
}Update the project ID in app.json:
{
"expo": {
"extra": {
"eas": {
"projectId": "your-eas-project-id"
}
}
}
}- Use React Native Debugger or Expo DevTools
- Console logs appear in terminal and browser devtools
- Check network requests in the browser Network tab
Issue: API requests failing
- Check that backend server is running
- Verify API_BASE_URL is correct
- Check network connectivity (use real device or configure emulator)
Issue: Biometric not working
- iOS Simulator: Face ID must be enrolled (Features > Face ID > Enroll)
- Android Emulator: Set up fingerprint in Settings > Security
Issue: File uploads failing
- Check file size limits on backend
- Verify proper multipart/form-data handling
# Run linter
npm run lint- 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
- Drive Clone Backend - Node.js backend API
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions:
- Open an issue on GitHub
- Check Expo Documentation
Made with ❤️ using React Native and Expo