A React Native mobile application built with Expo that allows you to search and view 42 Network student profiles. Browse student information, projects, skills, and achievements through an intuitive and modern interface.
This app does NOT work on Expo Go. The project uses custom native modules and configurations that require a development build. You must use Expo Dev Client or create a standalone build to run this application.
- Profile Search: Search for any 42 student by their intra login
- Comprehensive Profile View: View detailed student information including:
- Personal information and profile picture
- Cursus progress and level
- Skills and expertise levels
- Project history with scores and validation status
- Campus and cohort information
- Dark/Light Mode: Toggle between dark and light themes
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- Android Studio (for Android development)
You'll need to register an application on the 42 API:
- Go to 42 API
- Create a new application
- Note your
UIDandSECRET
-
Clone the repository:
git clone https://github.com/Ra-Wo/Swifty-Companion.git cd Swifty-Companion -
Install dependencies:
npm install
-
Set up environment variables:
Create a
.envfile in the root directory:EXPO_PUBLIC_42_API_URL=https://api.intra.42.fr EXPO_PUBLIC_42_API_UID=your_42_api_uid EXPO_PUBLIC_42_API_SECRET=your_42_api_secret # Optional: Only needed for Windows builds NINJA_PATH=C:/path/to/ninja.exe
-
Prebuild the native projects (if needed):
npm run prebuild
-
Install Expo Dev Client:
npx expo install expo-dev-client
-
Start the development server:
npm start
-
Run on Android device/emulator:
npm run android
- ✅ Android: Fully supported
- ❌ iOS: Not developed/tested
- ❌ Expo Go: NOT supported
- Framework: Expo (~53.0.22) with Expo Router
- Language: TypeScript
- UI: React Native with NativeWind (Tailwind CSS)
- Navigation: Expo Router (file-based routing)
- State Management: Zustand
- Storage: AsyncStorage
- Fonts: Poppins, Inter
- Styling: Class Variance Authority + Tailwind Merge
- API: 42 Network API
.
├── app/ # App screens (file-based routing)
│ ├── _layout.tsx # Root layout
│ ├── index.tsx # Home/Search screen
│ └── profile.tsx # Profile screen
├── components/ # Reusable components
│ ├── profile-page/ # Profile-specific components
│ └── ui/ # UI primitives
├── constants/ # App constants
├── hooks/ # Custom React hooks
├── lib/ # Utilities and API functions
├── store/ # Zustand stores
├── types/ # TypeScript type definitions
├── assets/ # Images and static assets
└── android/ # Android native project
npm start- Start the development server with Expo Dev Clientnpm run android- Run on Android device/emulatornpm run web- Run in web browser (experimental)npm run lint- Run ESLint and Prettier checksnpm run format- Format code with ESLint and Prettiernpm run prebuild- Generate native projects
- Launch the app on your device
- Enter a 42 student's intra login (e.g.,
roudouch) - Tap "Search" to view their profile
- Browse through their projects, skills, and statistics
- Toggle between dark and light modes using the theme switch
The app configuration is managed in app.config.ts. Key settings include:
- App name and slug
- Platform-specific configurations
- Plugins and native modules
- Windows-specific CMake fixes (for development)
API endpoints and credentials are managed through environment variables. Make sure to set up your .env file with valid 42 API credentials.
This is expected. You must create a development build or use EAS Build.
If you encounter CMake build issues on Windows, ensure the NINJA_PATH environment variable is set to your Ninja executable path.
This project is created as part of the 42 Network curriculum.
Rachid Oudouch





