|
1 | | -# Welcome to your Expo app 👋 |
| 1 | +# Senior Mobile Engineer - Technical Interview Project |
2 | 2 |
|
3 | | -This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). |
| 3 | +Welcome! This is a React Native learning platform app built with Expo. This codebase is designed to assess your technical skills through hands-on debugging, refactoring, and architectural discussions. |
4 | 4 |
|
5 | | -## Get started |
| 5 | +## 🎯 Objective |
6 | 6 |
|
7 | | -1. Install dependencies |
| 7 | +This is a realistic codebase with intentional issues including: |
| 8 | + |
| 9 | +- Bugs that prevent the app from running |
| 10 | +- Failing tests |
| 11 | +- Performance problems |
| 12 | +- Code smells and refactoring opportunities |
| 13 | +- Architectural challenges |
| 14 | + |
| 15 | +Your task is to work through these issues, discuss solutions, and demonstrate your mobile engineering expertise. |
| 16 | + |
| 17 | +## 🚀 Quick Start |
| 18 | + |
| 19 | +### Prerequisites |
| 20 | + |
| 21 | +- Node.js 18+ installed |
| 22 | +- npm or yarn |
| 23 | +- (Optional) iOS Simulator or Android Emulator |
| 24 | +- (Optional) Expo Go app on physical device |
| 25 | + |
| 26 | +### Installation |
| 27 | + |
| 28 | +1. **Install dependencies** |
8 | 29 |
|
9 | 30 | ```bash |
10 | 31 | npm install |
11 | 32 | ``` |
12 | 33 |
|
13 | | -2. Start the app |
| 34 | +2. **Run tests** (they will fail initially - that's expected!) |
| 35 | + |
| 36 | + ```bash |
| 37 | + npm test |
| 38 | + ``` |
| 39 | + |
| 40 | +3. **Start the app** |
14 | 41 |
|
15 | 42 | ```bash |
16 | | - npx expo start |
| 43 | + npm start |
17 | 44 | ``` |
18 | 45 |
|
19 | | -In the output, you'll find options to open the app in a |
| 46 | + Then choose your platform: |
| 47 | + |
| 48 | + - Press `w` for web browser |
| 49 | + - Press `i` for iOS simulator (Mac only) |
| 50 | + - Press `a` for Android emulator |
| 51 | + - Scan QR code with Expo Go app |
20 | 52 |
|
21 | | -- [development build](https://docs.expo.dev/develop/development-builds/introduction/) |
22 | | -- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) |
23 | | -- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) |
24 | | -- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo |
| 53 | + **Note:** The app will crash on first load. Your first task is to debug why! |
25 | 54 |
|
26 | | -You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). |
| 55 | +### High-Level Phases: |
27 | 56 |
|
28 | | -## Get a fresh project |
| 57 | +1. **Debug & Get Running** - Fix critical bugs to get the app running |
| 58 | +2. **Fix Tests** - Debug and fix failing test suites |
| 59 | +3. **Code Review** - Identify issues and discuss architecture |
| 60 | +4. **Performance** - Optimize rendering and list performance |
| 61 | +5. **Refactoring** - Break down large components |
29 | 62 |
|
30 | | -When you're ready, run: |
| 63 | +## 🏗️ Project Structure |
| 64 | + |
| 65 | +``` |
| 66 | +thinkific/ |
| 67 | +├── app/ # Expo Router pages (file-based routing) |
| 68 | +│ ├── (tabs)/ # Tab navigator screens |
| 69 | +│ │ ├── index.tsx # Course list (home) screen |
| 70 | +│ │ └── explore.tsx # Profile screen |
| 71 | +│ └── course/[id].tsx # Dynamic course detail screen |
| 72 | +├── components/ # Reusable UI components |
| 73 | +│ ├── CourseCard.tsx # Course card component (has perf issues) |
| 74 | +│ └── __tests__/ # Component tests |
| 75 | +├── services/ # Data layer |
| 76 | +│ ├── courseService.ts # API/mock data service (has bugs) |
| 77 | +│ └── __tests__/ # Service tests |
| 78 | +├── types/ # TypeScript type definitions |
| 79 | +│ ├── course.ts # Course and lesson types |
| 80 | +│ └── navigation.ts # Navigation types (has type errors) |
| 81 | +├── constants/ # Theme and constants |
| 82 | +├── hooks/ # Custom React hooks |
| 83 | +``` |
| 84 | + |
| 85 | +## 🧪 Testing |
31 | 86 |
|
32 | 87 | ```bash |
33 | | -npm run reset-project |
| 88 | +# Run all tests |
| 89 | +npm test |
| 90 | + |
| 91 | +# Run tests in watch mode |
| 92 | +npm run test:watch |
34 | 93 | ``` |
35 | 94 |
|
36 | | -This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. |
| 95 | +## 🛠️ Tech Stack |
| 96 | + |
| 97 | +- **React Native** - Mobile framework |
| 98 | +- **Expo** - Development platform and tooling |
| 99 | +- **Expo Router** - File-based navigation |
| 100 | +- **TypeScript** - Type safety |
| 101 | +- **Jest** - Testing framework |
| 102 | +- **React Native Testing Library** - Component testing |
| 103 | + |
| 104 | +## 📱 Features |
| 105 | + |
| 106 | +This learning platform includes: |
| 107 | + |
| 108 | +- **Course Catalog** - Browse 35+ courses with search and filtering |
| 109 | +- **Course Details** - View lessons, progress, and enroll |
| 110 | +- **User Profile** - View stats, settings, and preferences |
| 111 | +- **Theming** - Light and dark mode support |
| 112 | + |
| 113 | +## 🐛 Known Issues (For Interviewers) |
| 114 | + |
| 115 | +This section is intentionally left brief. See [INTERVIEW.md](./INTERVIEW.md) for complete issue list. |
| 116 | + |
| 117 | +The app contains various intentional issues to assess: |
37 | 118 |
|
38 | | -## Learn more |
| 119 | +- Debugging skills |
| 120 | +- Performance optimization |
| 121 | +- Code architecture |
| 122 | +- Testing knowledge |
| 123 | +- TypeScript proficiency |
39 | 124 |
|
40 | | -To learn more about developing your project with Expo, look at the following resources: |
| 125 | +## 📚 Resources |
41 | 126 |
|
42 | | -- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). |
43 | | -- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. |
| 127 | +- [Expo Documentation](https://docs.expo.dev/) |
| 128 | +- [React Native Documentation](https://reactnative.dev/) |
| 129 | +- [Expo Router Documentation](https://docs.expo.dev/router/introduction/) |
| 130 | +- [React Native Testing Library](https://callstack.github.io/react-native-testing-library/) |
44 | 131 |
|
45 | | -## Join the community |
| 132 | +## 💡 Tips |
46 | 133 |
|
47 | | -Join our community of developers creating universal apps. |
| 134 | +- Take your time to understand the codebase structure |
| 135 | +- Use console logs and debugging tools effectively |
| 136 | +- Ask questions when requirements are unclear |
| 137 | +- Think out loud - explain your reasoning |
| 138 | +- Consider edge cases and tradeoffs |
| 139 | +- It's okay to not finish everything - we want to see your process |
48 | 140 |
|
49 | | -- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. |
50 | | -- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. |
| 141 | +Good luck! 🚀 |
0 commit comments