A blazing-fast 🏃♂️, offline-first 📴, and scalable ⚡ backend for managing attendees, check-ins, wristbands, and more — all powered by FastAPI + PostgreSQL + RFID.
- 🎟️ Attendee Onboarding via CSV
- 🚂 RFID Wristband Assignment
- ⏱️ Real-time Check-in/Check-out Tracking
- 🡾 Freebies & Kit Distribution Tracking
- 🔌 Offline Caching for Desks
- 🔄 Multi-System Syncing with Conflict Resolution
- 🔒 Data Integrity & Deduplication
| Layer | Tech |
|---|---|
| Backend API | ⚡ FastAPI |
| Database | 🐘 PostgreSQL + SQLite (Offline) |
| RFID Interface | 🎯 PySerial / Device SDK |
| Caching | 📦 Local JSON / SQLite |
| Deployment | ☁️ Docker-ready |
git clone https://github.com/ashvp/Event-Management.git
cd Event-Managementpython -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txtCreate a .env file with your DB creds:
DATABASE_URL=postgresql://user:pass@localhost:5432/rfid_eventRun migrations:
alembic upgrade headuvicorn app.main:app --reloadpytestPOST /attendees/upload_csv → Bulk onboard via CSV
GET /attendees/ → Get all attendee info
POST /attendees/ → On spot registration
POST /attendees/{attendee_id}/assign_rfid → Assign RFID to attendee
GET /attendees/rfid_export/ → Downloads RFID
POST /check-in/ → Check in attendee
POST /claim/{item_name} → Claiming an offered item
GET /event_days/ → Get event days
POST /event_days/ → Add event days
GET /dashboard/stats → Get basic stats
GET /dashboard/ → Dashboard with advanced search📚 Full docs available at /docs via Swagger UI.
Wanna help out? Pull requests welcome! Please follow the conventional commits style and keep PRs atomic.
- RFID reader behavior can vary by vendor 🤷♂️
- Offline-first mode can cause timestamp conflicts — we dedupe based on
uuid + ts - SQLite schema must match production schema — auto-migration WIP 🔧
- Admin Dashboard (React / Streamlit / Vue)
- PDF Badge Generator
- Realtime WebSocket Sync
- Telegram Bot for Check-in Alerts 📲
Open an issue or hit us up via carrier pigeon. Seriously, just open an issue ☛ here
MIT © Ashwin 2025
Each wristband is basically a tiny dumb storage device with a superpower: being at the right place at the right time.