A React Native web application for displaying photos from Google Drive in a beautiful slideshow format.
- Mobile-optimized UI - Responsive design for phones and tablets
- Mock authentication - Demo mode without Google Drive dependency
- Improved controls - Bottom-positioned controls (100px from bottom)
- Better positioning - Right-aligned top bar, avoids system UI
- Cross-platform storage - AsyncStorage for mobile compatibility
- Landscape support - Works in both orientations
- Top bar: Filename display only
- Bottom controls: Play/pause/next buttons + settings
- Responsive sizing: Larger buttons on tablets
- Touch-friendly: Better touch targets and spacing
- Removed web dependencies - No more localStorage issues
- Fixed crashes - Proper mobile storage implementation
- Better error handling - Graceful fallbacks
- Android: Fully tested with Expo Go
- iOS: Ready for testing
- Tablet: Responsive design optimized
- ✅ Google Drive OAuth 2.0 Authentication
- ✅ Photo slideshow with play/pause controls
- ✅ Full-screen image display with proper aspect ratio
- ✅ NEW: Tabbed Settings Interface (Connection, Folders, Display)
- ✅ NEW: Two-Level Folder Selection (root + subfolders)
- ✅ NEW: Multi-Folder Photo Loading with duplicate prevention
- ✅ NEW: Persistent Folder Selection storage
- ✅ Customizable UI settings (show/hide elements, opacity control)
- ✅ Persistent settings storage
- ✅ Responsive design with semi-transparent control bar
-
Clone the repository
git clone https://github.com/numansheikh/shared-moments.git cd shared-moments -
Install dependencies
npm install
-
Configure Google OAuth
- Create a
.envfile in the root directory - Add your Google OAuth credentials:
REACT_APP_GOOGLE_CLIENT_ID=your_client_id_here REACT_APP_GOOGLE_CLIENT_SECRET=your_client_secret_here - Create a
-
Configure Google Cloud Console
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable Google Drive API
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://localhost:8081/auth-callback.html
-
Run the application
npm run web
-
Connect to Google Drive
- Click the settings button (⚙️)
- Click "Connect to Google Drive"
- Sign in with your Google account
-
Configure Root Folder
- In settings → Connection tab, enter your Google Drive folder URL
- Format:
https://drive.google.com/drive/folders/FOLDER_ID - Click "Save URL"
-
Select Folders
- Go to settings → Folders tab
- Choose which folders to include in your slideshow:
- Root Folder - All photos in the main folder
- Subfolders - Specific folders within the root
- Use "Select All" or "Deselect All" for quick selection
-
Customize Display
- Go to settings → Display tab
- Toggle email display on/off
- Toggle navigation controls on/off
- Toggle photo counter on/off
- Adjust top bar opacity (0-100%)
- Framework: React Native Web with Expo
- Authentication: Google OAuth 2.0 (redirect flow)
- Storage: Google Drive API
- State Management: React hooks with localStorage persistence
- Styling: React Native StyleSheet
shared-moments/
├── App.tsx # Main application component
├── components/
│ └── SettingsDialog.tsx # Settings modal
├── services/
│ ├── GoogleAuthService.ts # OAuth authentication
│ └── GoogleDriveService.ts # Drive API integration
├── public/
│ └── auth-callback.html # OAuth callback page
└── .env # Environment variables (not in git)
Create a .env file with:
REACT_APP_GOOGLE_CLIENT_ID=your_google_client_id
REACT_APP_GOOGLE_CLIENT_SECRET=your_google_client_secret
- "OAuth client not found": Check your Google Cloud Console configuration
- "CORS error": Ensure redirect URI matches exactly in Google Cloud Console
- "No photos loading": Verify folder permissions and URL format
-
v0.1.0: Folder selection release with enhanced functionality
- Tabbed settings interface (Connection, Folders, Display)
- Two-level folder selection (root + subfolders)
- Multi-folder photo loading with duplicate prevention
- Persistent folder selection storage
- Improved error handling and navigation
-
v0.0.1: Initial beta release with core functionality
- Google Drive integration
- Slideshow controls
- Customizable UI
- Persistent settings
MIT License