Skip to content

Commit e6d4381

Browse files
committed
chore: app setup
1 parent ea50722 commit e6d4381

16 files changed

Lines changed: 13573 additions & 4403 deletions

README.md

Lines changed: 115 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,141 @@
1-
# Welcome to your Expo app 👋
1+
# Senior Mobile Engineer - Technical Interview Project
22

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.
44

5-
## Get started
5+
## 🎯 Objective
66

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**
829

930
```bash
1031
npm install
1132
```
1233

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**
1441

1542
```bash
16-
npx expo start
43+
npm start
1744
```
1845

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
2052

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!
2554

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:
2756

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
2962

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
3186

3287
```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
3493
```
3594

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:
37118

38-
## Learn more
119+
- Debugging skills
120+
- Performance optimization
121+
- Code architecture
122+
- Testing knowledge
123+
- TypeScript proficiency
39124

40-
To learn more about developing your project with Expo, look at the following resources:
125+
## 📚 Resources
41126

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/)
44131

45-
## Join the community
132+
## 💡 Tips
46133

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
48140

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! 🚀

app/(tabs)/_layout.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ export default function TabLayout() {
1919
<Tabs.Screen
2020
name="index"
2121
options={{
22-
title: 'Home',
23-
tabBarIcon: ({ color }) => <IconSymbol size={28} name="house.fill" color={color} />,
22+
title: 'Courses',
23+
tabBarIcon: ({ color }) => <IconSymbol size={28} name="book.fill" color={color} />,
2424
}}
2525
/>
2626
<Tabs.Screen
2727
name="explore"
2828
options={{
29-
title: 'Explore',
30-
tabBarIcon: ({ color }) => <IconSymbol size={28} name="paperplane.fill" color={color} />,
29+
title: 'Profile',
30+
tabBarIcon: ({ color }) => <IconSymbol size={28} name="person.fill" color={color} />,
3131
}}
3232
/>
3333
</Tabs>

0 commit comments

Comments
 (0)