A React Native Expo application for managing student presence at Epitech using QR code scanning (desktop/web) and NFC card scanning (mobile).
- π± Multi-Platform Support: Works on iOS, Android, and Web
- π· QR Code Scanning: Scan student QR codes using device camera
- π NFC Support: Scan student NFC cards on mobile devices
- π Epitech Authentication: Secure login with Epitech credentials
- π Real-time Tracking: View scanned students in real-time
- π¨ Modern UI: Beautiful interface built with NativeWind (Tailwind CSS)
- Node.js (v18 or later) - Download
- npm or yarn
- Expo Go app on your mobile device (for testing)
- Epitech Account with API access
cd /Users/alexandredfm/Documents/@Code/EpiCheckIf you haven't already installed dependencies:
# Using nvm (recommended)
nvm use --lts
# Install packages
npm installnpm install -g expo-cliThe app is pre-configured to use the Epitech API at https://my.epitech.eu/api.
Important: You may need to adjust the API endpoints in services/epitechApi.ts based on the actual Epitech API documentation:
// services/epitechApi.ts
const API_BASE_URL = "https://my.epitech.eu/api";Based on the Epitech API documentation, you might need to adjust these methods:
- Authentication:
/auth/loginor similar endpoint - Presence Marking:
/presenceor module-specific endpoint - Student Info:
/students/{email}or user lookup endpoint
Start the Expo development server:
npm startThis will open Expo DevTools in your browser. You can then:
npm run iosnpm run androidImportant: The web platform requires a proxy server to bypass CORS restrictions.
Quick Start:
-
Start the proxy server (in one terminal):
npm run proxy
-
Start the web app (in another terminal):
npm run web
-
Follow authentication steps in the app to extract your Intranet cookie
π Full web setup guide: See docs/WEB_QUICKSTART.md
Note: For production deployment, see proxy-server/README.md
- Install Expo Go from App Store (iOS) or Play Store (Android)
- Run
npm start - Scan the QR code shown in the terminal with:
- iOS: Camera app
- Android: Expo Go app
- Launch the app
- Enter your Epitech email and password
- Tap "Login"
- Select "π· QR Code" tab
- Point camera at student's QR code
- Presence will be marked automatically
- Select "π± NFC" tab (available only on mobile)
- Hold student's NFC card near device
- Presence will be marked automatically
- Scanned students appear at the bottom of the screen
- Green = Success, Red = Error
- Tap "Clear" to remove history
- Tap the "Logout" button in the top-right corner
EpiCheck/
βββ App.tsx # Main app entry with navigation
βββ app.json # Expo configuration
βββ package.json # Dependencies
βββ tsconfig.json # TypeScript configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ metro.config.js # Metro bundler config (NativeWind)
βββ global.css # Global Tailwind styles
βββ nativewind-env.d.ts # NativeWind type declarations
β
βββ components/
β βββ QRScanner.tsx # QR code scanner component
β βββ NFCScanner.tsx # NFC scanner component
β
βββ screens/
β βββ LoginScreen.tsx # Authentication screen
β βββ PresenceScreen.tsx # Main presence marking screen
β
βββ services/
βββ epitechApi.ts # Epitech API service layer
import epitechApi from "./services/epitechApi";
// Login
await epitechApi.login({
email: "user@epitech.eu",
password: "password",
});
// Mark presence
await epitechApi.markPresence("student@epitech.eu");
// Logout
epitechApi.logout();If your QR codes contain JSON or specific format, modify components/QRScanner.tsx:
// Example: QR code contains JSON
const handleBarCodeScanned = ({ data }) => {
try {
const parsed = JSON.parse(data);
const email = parsed.email || parsed.studentId + "@epitech.eu";
onScan(email);
} catch (e) {
// Handle plain text QR codes
onScan(data);
}
};For specific NFC card formats, modify components/NFCScanner.tsx:
// Read NDEF message or use tag ID
// Map tag ID to student email if needed
const tagId = "..."; // extracted from NFC tag
const email = await lookupEmailByTagId(tagId);# Build APK
eas build --platform android --profile preview
# Build for Play Store
eas build --platform android --profile productioneas build --platform ios --profile productionnpm run web
# Then deploy the web-build folder to your hostingiOS: Check app.json for NSCameraUsageDescription
Android: Ensure CAMERA permission is in app.json
- Android: Ensure device has NFC hardware and it's enabled
- iOS: Requires iPhone 7 or later with iOS 13+
- Check
app.jsonfor proper NFC permissions
- Verify Epitech API endpoint is correct
- Check network connection
- Verify API credentials
- Check API documentation for correct endpoints
# Clear cache and restart
npm start -- --clearThis project uses NativeWind v4 for styling. Key features:
- Tailwind CSS classes work directly on React Native components
- Use
classNameprop instead ofstyle - See NativeWind docs for more info
The app is fully typed with TypeScript for better development experience.
- expo - React Native framework
- react-native - Mobile app framework
- typescript - Type safety
- nativewind - Tailwind CSS for React Native
- tailwindcss - CSS framework
- react-native-reanimated - Animations
- react-native-safe-area-context - Safe area handling
- @react-navigation/native - Navigation library
- @react-navigation/native-stack - Stack navigator
- react-native-screens - Native navigation primitives
- expo-camera - Camera and QR code scanning
- react-native-nfc-manager - NFC card reading
- axios - HTTP client for API calls
- @expo/vector-icons - Icon library
This project is for educational purposes as part of Epitech coursework.
For issues or questions:
- Check the Epitech API documentation
- Review the troubleshooting section
- Contact your Epitech administrator
Made with β€οΈ for Epitech Students