Prototype implementation of a classroom attendance system using BLE proximity + biometrics.
- Mobile: Flutter (single app with Teacher/Student roles)
- Backend: FastAPI
- Database: PostgreSQL (Docker compose provided)
backend/- FastAPI APIs, models, seed script, docker composemobile/ble_attendance_mobile/- Flutter app sourceARCHITECTURE.md- architecture and scope notes
- Role-based register/login (teacher/student)
- Teacher starts/ends sessions and advertises BLE token
- Student scans BLE, sends periodic RSSI detections
- Presence ratio computed from detection windows
- Student biometric finalization endpoint flow
- Teacher detections + attendance summary endpoints
- Teacher manual attendance override endpoint
Seeded accounts (from backend/scripts/seed_demo.py):
- Teacher:
T001/Pass@123 - Student:
25CE099/Pass@123 - Student:
25CE100/Pass@123 - Student:
D26CE045/Pass@123
cd backend
docker compose up -d
cd ..
python3 -m venv .venv
.venv/bin/pip install -r backend/requirements.txt
PYTHONPATH=backend .venv/bin/python backend/scripts/seed_demo.py
PYTHONPATH=backend .venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --app-dir backendAPI docs: http://127.0.0.1:8000/docs
- On laptop, start backend with
--host 0.0.0.0(command above). - Find laptop IP (example
192.168.1.7) usingip a. - On phone browser, verify
http://<laptop-ip>:8000/health. - In app login screen, set
Server URLtohttp://<laptop-ip>:8000. - Tap
Test Connection, then login.
cd mobile/ble_attendance_mobile
flutter pub get
flutter runFor physical Android devices on same LAN:
flutter run --dart-define=API_BASE_URL=http://<your-laptop-ip>:8000Build split release APKs for armeabi-v7a and arm64-v8a:
cd mobile/ble_attendance_mobile
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64Package them with app name + version iteration in filename:
./scripts/package_release_apks.sh v0.1.3Output files (raw + packaged):
mobile/ble_attendance_mobile/build/app/outputs/flutter-apk/app-armeabi-v7a-release.apkmobile/ble_attendance_mobile/build/app/outputs/flutter-apk/app-arm64-v8a-release.apkmobile/ble_attendance_mobile/build/app/outputs/flutter-apk/BLE_Attendance_v0.1.3_armeabi-v7a_release.apkmobile/ble_attendance_mobile/build/app/outputs/flutter-apk/BLE_Attendance_v0.1.3_arm64-v8a_release.apk
- Flutter SDK installed and in
PATH - Java 17 JDK available for Gradle builds
- Android SDK + licenses accepted (
platform-tools, platform/build-tools, NDK) - Docker running for local PostgreSQL
Release assets currently publish release APKs for ARM only:
app-armeabi-v7a-release.apkapp-arm64-v8a-release.apk