Tendy is a research prototype that explores and compares three attendance verification approaches: dynamic QR codes (active), Bluetooth proximity (passive), and a biometric liveness audit (social). This repository contains the backend (Python / FastAPI), the frontend (Flutter mobile + web), development infrastructure, and the project paper and analysis artifacts.
- Backend: FastAPI server for session management, TOTP QR generation, BLE presence, and check-in endpoints.
- Frontend: Flutter app demonstrating QR, BLE, and selfie flows (mobile + web).
- Research artifacts: LaTeX paper and analysis notebooks under
paper/. - Dev infra:
docker-composefor local development and GitHub Actions CI included.
backend/- Python service, tests, Dockerfile, packagingfrontend/- Flutter app source, tests, and web build outputinfra/-docker-composeand supporting infra (local dev)paper/- LaTeX source, figures, and notebooksscripts/- helper scripts and automation tasks
Prerequisites: Docker & Docker Compose. For Flutter development, install the Flutter SDK.
-
Clone the repo and install dev tooling (optional):
make setup
-
Start both services locally (development mode):
make dev
- Backend will be available at:
http://localhost:8000 - Flutter web dev server (if used) runs at:
http://localhost:5000
- Backend will be available at:
-
Run tests:
make backend-test # run backend pytest make frontend-test # run flutter tests
- Backend: use
uvicorn backend.app:app --reload --port 8000(or rely onmake dev). - Frontend: update
frontend/myapp/lib/config.dartAppConfig.apiBaseUrlto point to your backend (use10.0.2.2for Android emulator,127.0.0.1for iOS simulator, or your host LAN IP for real devices). - For CI debugging, check
.github/workflows/python-tests.ymlandflutter.yml.
We welcome issues and pull requests:
- Run
flutter analyzeanddart format .before opening PRs for the frontend. - Run
pytestfor backend tests and keep coverage where possible. - Add clear doc comments for public APIs and widgets.
Author: Michael Pisman - mpisman@ucmerced.edu
Status: active research prototype - expect changes and refinements as experiments progress.
