Mobile App¶
Overview¶
Nigall ships a native Expo (React Native) attendee app in mobile/ plus a JWT REST API at /api/mobile/v1/. The app covers authentication, Discover, event detail, RSVP, ticket wallet, event agenda, and push notifications for event-day engagement.
Purpose¶
Support modern event-day UX: browse events, RSVP, show tickets/QR, follow the agenda, and receive push alerts (session reminders, live updates, organizer broadcasts).
Who should use it¶
- Attendees on iOS/Android (Expo Go or store builds)
- Mobile app developers extending the client
- Organizers sending push broadcasts to registered devices
Benefits¶
- Token auth with
/auth/login/and/auth/me/ - Discover and search parity with web catalog
- Ticket list endpoint for wallet UI
- Device registration for Expo Push
- In-app notification inbox synced with program notifications
- Agenda endpoint for published program sessions
Navigation path¶
| Mobile endpoint / screen | Web equivalent |
|---|---|
| Discover tab | /events/discover/ |
| Event detail | /events/<pk>/<tag>/ |
| Agenda section | Program live / my agenda |
| RSVP | /events/<pk>/<tag>/rsvp/ |
| Tickets | Attendee ticket pages |
| Notifications inbox | /program/notifications/ |
Prerequisites¶
- Mobile client with JWT storage
- Physical device for real push (simulators are limited)
- User account for authenticated endpoints
- Django
MOBILE_PUSH_ENABLED=True(default)
Step-by-step — Mobile authentication¶
POST /api/mobile/v1/auth/login/with credentials.- Store access token securely.
GET /api/mobile/v1/auth/me/to verify session.- App automatically requests notification permission and registers the Expo push token.
Step-by-step — Push notifications¶
- After sign-in, app calls
POST /api/mobile/v1/devices/register/withexpo_push_token. - Program session reminders / live updates create in-app
ProgramUserNotificationrows and send Expo push when a device is registered. - Organizers (or staff) can broadcast:
POST /api/mobile/v1/events/<pk>/<tag>/push/with{ "title", "body" }. - Attendees open Profile → Notifications inbox (
GET /api/mobile/v1/notifications/). - Tapping a push deep-links to
/event/<pk>/<tag>in the app.
Session reminders continue to run via:
py -3.12 manage.py process_program_notifications --minutes 30
Step-by-step — Browse, RSVP, agenda¶
GET /api/mobile/v1/events/discover/— paginated public events.GET /api/mobile/v1/events/<pk>/<tag>/— detail.GET /api/mobile/v1/events/<pk>/<tag>/agenda/— published sessions.POST /api/mobile/v1/events/<pk>/<tag>/rsvp/— RSVP events.GET /api/mobile/v1/tickets/— user's tickets.- Registration/checkout also available under
/registration/endpoints.
Field descriptions¶
| Endpoint | Auth | Returns |
|---|---|---|
auth/login |
No | JWT tokens |
auth/me |
JWT | User profile |
events/discover |
Optional JWT | Public events list |
events/search |
Optional JWT | Search results |
events/categories |
Optional JWT | Category facets |
events/<pk>/<tag>/ |
Optional JWT | Event detail |
events/<pk>/<tag>/agenda/ |
Optional JWT | Agenda sessions |
events/<pk>/<tag>/rsvp/ |
JWT | RSVP create/update |
events/<pk>/<tag>/push/ |
JWT organizer | Push broadcast result |
devices/register |
JWT | Device record |
devices/unregister |
JWT | Deactivate device |
notifications/ |
JWT | Inbox + unread count |
tickets/ |
JWT | Registration tickets |
Business rules¶
| Rule | Detail |
|---|---|
| Push tokens | Must be Expo format (ExponentPushToken[...]) |
| Private events | Detail/agenda restricted unless host/attendee/RSVP |
| Survey questions | Still not on mobile RSVP |
| Push transport | Best-effort — never blocks email/in-app create |
| Physical device | Expo Go push works on real phones; simulators often cannot |
User permissions¶
JWT identifies user; organizer push requires can_manage_event.
Workflow¶
Run the app¶
See mobile/README.md. Quick start:
cd mobile
npm install
npx expo start --lan
Set EXPO_PUBLIC_API_URL to your Django host.
Related features¶
- Quick Start — Attendees
- API Reference
- Check-In & QR Codes
- Program notifications / session reminders
Administrator notes¶
MOBILE_PUSH_ENABLED— setFalseto disable outbound Expo calls- Configure CORS and JWT secret in production
- Schedule
process_program_notificationsfor session reminders - Store builds (EAS) needed for production APNs/FCM credentials beyond Expo Go
Developer/API notes¶
App: mobile_api + Expo client mobile/
Models: MobilePushDevice
Push: mobile_api/push.py (hooked from program.push_services.notify_user)
See also: Known Limitations