AirIn is a full-stack airline online check-in system that lets passengers complete their check-in remotely, before arriving at the airport. Through the app, travelers confirm their identity by scanning their passport, choose their preferred seat, declare their baggage, and get a digital boarding pass — with full offline support.
This organization hosts both parts of the project:
| Repository | Description |
|---|---|
| AirIn-mobile | Native Android app (Kotlin, Jetpack Compose, MVVM) |
| AirIn-backend | REST API (Django) |
- Registration
- Sign up with name, email, phone number, and password
- Quick sign-in with Google account
- Flight Lookup & Booking Retrieval
- Retrieve itinerary and current check-in status via booking reference + last name
- Online Check-In (available from 24h before departure)
- Passport Scan — OCR extracts identity data from the passport's first page and verifies it against the booking
- Details Review — passenger confirms personal and travel information
- Seat Selection — interactive aircraft seat map (available / occupied / premium)
- Baggage Declaration — number and type of checked bags
- Special Requests — dietary preferences, assistance needs, infant/pet declarations
- Confirmation notification sent on completion
- QR Code Boarding Pass
- Digital boarding pass with a unique QR code, scannable at baggage drop, security, and boarding gate
- PDF Boarding Pass — downloadable, includes a flight summary
- Offline Mode & Synchronization
- Flight details and boarding passes cached locally, accessible without internet
- Automatic sync with the server when connectivity is restored
- Mobile app follows MVVM: Compose UI observes
StateFlowfrom ViewModels, which delegate to repositories that arbitrate between the Django API (Retrofit) and a local Room cache for offline access. - Backend exposes a REST API for auth, flight/booking lookup, the check-in workflow, and boarding pass generation, and dispatches push notifications via FCM.
- FCM ties the two together: the backend triggers pushes (check-in confirmation, flight/status updates) to the mobile app.
- Language: Kotlin
- UI: Jetpack Compose
- Architecture: MVVM
- Async: Coroutines & Flow
- Networking: Retrofit + OkHttp
- Offline Cache: Room
- Push: Firebase Cloud Messaging (FCM)
- Auth: Google Sign-In
- Passport OCR: CameraX + ML Kit
- QR Code: ZXing
- PDF Generation: Android PdfDocument
- DI: Hilt
- Framework: Django + Django REST Framework
- Database: PostgreSQL
- Auth: JWT + Google OAuth verification
- Push: Firebase Cloud Messaging (FCM)
- PDF Generation: ReportLab
- QR Code:
qrcode(Python)
git clone https://github.com/TDM-PROJET/AirIn-backend.git
cd AirIn-backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txtConfigure .env:
SECRET_KEY=your-secret-key
DEBUG=True
DATABASE_URL=postgres://user:password@localhost:5432/airin
FIREBASE_CREDENTIALS_PATH=path/to/firebase-adminsdk.json
GOOGLE_OAUTH_CLIENT_ID=your-google-client-idRun migrations and start the server:
python manage.py migrate
python manage.py runservergit clone https://github.com/TDM-PROJET/AirIn-mobile.git- Add
google-services.jsonto theapp/module. - Point the app at your backend, in
app/src/main/java/com/example/airin_mobile/network/NetworkConstants.kt:API_BASE_URL=http://<your-backend-host>:8000/api/ - Open in Android Studio, sync Gradle, and run.
- Boarding pass, itinerary, and check-in status are persisted locally on the device (Room).
- A connectivity observer triggers a background sync when the device reconnects.
- Users can view their boarding pass and flight info fully offline.
Developed as the final project for 2CS SIL — Techniques de Développement Mobile, École nationale Supérieure d'Informatique (ESI).
Academic project — for educational purposes.