fix(mobile): correct asset logo path depth and add expo-router app/ routes for web support

- Fix fatal crash: require('../../../assets/logo.png') in LoginScreen and
  WelcomeScreen resolved 3 levels above mobile/src/screens/ — outside the
  mobile/ directory. Changed to ../../assets/logo.png which correctly
  resolves to the existing mobile/assets/logo.png.
- Add expo-router app/ directory (root cause of missing welcome screen and
  web support): app/_layout.tsx, (auth)/, (tabs)/ with all route files
- Add WelcomeScreen.tsx: branded intro screen with feature highlights
- Update LoginScreen/WelcomeScreen to use useRouter() (expo-router style)
- Add react-native-web ~0.20.0 and react-dom 19.2.4 for web channel
- Add expo-device ~7.0.3 (was imported but missing from package.json)
- Remove android.googleServicesFile from app.json (file is gitignored;
  README documents how to restore it for Android FCM builds)
- Add web.bundler: metro and web.output: single to app.json
- Fix aria-hidden to explicit boolean value in WelcomeScreen

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-15 16:02:02 +00:00
parent a2de72ab72
commit 82d90b48e2
15 changed files with 467 additions and 179 deletions
+29 -13
View File
@@ -1,6 +1,6 @@
# DocuElevate Mobile App
Native mobile application for DocuElevate, built with **React Native** and **Expo** for both iOS (primary) and Android.
Native mobile application for DocuElevate, built with **React Native** and **Expo** for iOS, Android, and Web.
## Features
@@ -11,6 +11,7 @@ Native mobile application for DocuElevate, built with **React Native** and **Exp
- 🔔 **Push Notifications** receive real-time push notifications when documents finish processing (via Expo push notifications)
- 📂 **Document List** browse and search your processed documents
- 👤 **Profile** view account details and sign out
- 🌐 **Web** run directly in the browser via Expo web (Metro bundler)
## Requirements
@@ -26,11 +27,14 @@ Native mobile application for DocuElevate, built with **React Native** and **Exp
cd mobile
npm install
# 2. Start the development server
npx expo start
# 2. Start the development server (choose a platform)
npx expo start # interactive menu (iOS / Android / Web)
npx expo start --ios # open directly in iOS Simulator
npx expo start --android # open in Android Emulator
npx expo start --web # open in the browser
```
Scan the QR code with **Expo Go** on your iOS or Android device.
Scan the QR code with **Expo Go** on your iOS or Android device, or press `w` in the interactive menu to open the web build.
## Building
@@ -97,23 +101,35 @@ The Expo push token is sent to the backend after login via `POST /api/mobile/reg
```
mobile/
├── App.tsx # Root component
├── app.json # Expo configuration
├── eas.json # EAS Build configuration
├── app/ # expo-router file-based routes
│ ├── _layout.tsx # Root layout (AuthProvider + auth guard)
│ ├── (auth)/ # Unauthenticated route group
│ │ ├── _layout.tsx # Auth stack (no header)
│ │ ├── index.tsx # Welcome screen
│ │ └── login.tsx # Login screen
│ └── (tabs)/ # Authenticated route group
│ ├── _layout.tsx # Tab navigator (Upload / Files / Profile)
│ ├── index.tsx # Upload tab
│ ├── files.tsx # Files tab
│ └── profile.tsx # Profile tab
├── App.tsx # Legacy file (not the entry point; see app/)
├── app.json # Expo configuration
├── eas.json # EAS Build configuration
├── package.json
├── tsconfig.json
└── src/
├── context/
│ └── AuthContext.tsx # Authentication state management
│ └── AuthContext.tsx # Authentication state management
├── hooks/
│ └── usePushNotifications.ts # Push notification registration
├── screens/
│ ├── LoginScreen.tsx # SSO login
│ ├── UploadScreen.tsx # Camera capture + file picker
│ ├── FilesScreen.tsx # Document list
── ProfileScreen.tsx # User profile + sign out
│ ├── WelcomeScreen.tsx # Branded intro / onboarding
│ ├── LoginScreen.tsx # SSO login
│ ├── UploadScreen.tsx # Camera capture + file picker
── FilesScreen.tsx # Document list
│ └── ProfileScreen.tsx # User profile + sign out
└── services/
└── api.ts # DocuElevate API client
└── api.ts # DocuElevate API client
```
## Share Extension (iOS)