JADS
The digital side of a national student association: two platforms, a native app on the App Store, and a conference system that runs the day itself. Real members use it.
- Client
- Jordanian Association for Dental Students
- Role
- Lead full-stack & mobile engineer
- Years
- 2025 – 2026
- Stack
- Laravel 12 · React 19 · Flutter
- Live
- jadsjo.com ↗
- App
- App Store ↗
Not a website. An operating system for an association.
JADS runs events, committees, volunteer missions, a store, a library, a forum and a national conference, and its members are on their phones. I built the whole thing as two Laravel systems that share an engineering style, with a Flutter app in front of the members' side.
Web + iOS app
The year-round home for members: events, committees, forum, store, library, volunteer missions, news and push notifications. It's managed from a web admin and from an admin console inside the app.
The event engine
Runs the annual conference: tickets, live check-in, workshops, buses, hotel rooms, certificates, galleries and bulk email. It runs in Docker with Redis queues behind it.
The app is configured, not just coded.
An association changes its mind weekly, and App Store review takes days. So the app's home layout, navigation, appearance and features all come from the server: MobileHomeConfig, MobileNavigationConfig, MobileAppAppearance and FeatureFlag. An admin can turn a section on and every member's app updates, with no release needed.
Then I gave the admins the same console in their pocket: the mobile admin API has full parity with the web admin.
Fifty-one data models, one coherent product.
From sign-up to certificate, without a spreadsheet.
Register
Attendees pick a pass. Organisers bulk-import the rest from CSV.
Ticket
A QR ticket in the app (qr_flutter), with biometric unlock.
Check in
Staff scan with mobile_scanner, and the dashboard updates live.
Certify
Certificate batches go out to everyone who attended.
Under the hood
Flutter, done properly
- Riverpod with code generation, go_router
- Dio + Retrofit, Sanctum token in secure storage
- Face ID / Touch ID via local_auth
- Firebase Cloud Messaging, full i18n
Laravel, built to operate
- Inertia + React 19 + Tailwind v4 admin
- MySQL 8, Redis 7 queues, Docker Compose
- Google Cloud Storage and Cloudflare R2
- GitHub Actions CI with Docker build and push