DOBS: Driver Onboarding & Offboarding System
DOBS, a Python/Flask system I designed and developed end to end to run driver onboarding and offboarding across HR, fleet, finance and operations teams.
This is a public overview of the system. Original screens, operational data, and live system access are not shared here.
The problem
Bringing a driver in, or taking one out, touches HR, fleet, finance and several operations roles. Each team kept its own checklist, so hand-offs were slow, steps were missed, and nobody had one view of where a driver stood.
My role
I designed and developed DOBS end to end as its sole developer: requirements with each department, data model, backend, bilingual interface, deployment and ongoing releases.
What I built
- Configurable onboarding: stage sequences are stored per driver type, with skip conditions, so a new driver type or changed process is an admin setting rather than a code change.
- Multi-step offboarding with approvals across operations supervisor, operations manager, fleet and finance, including vehicle and inventory return checks.
- Dedicated dashboards for admin, HR, fleet, finance, operations coordinators, supervisors and managers.
- Role-based access control with fine-grained permissions, plus audited admin impersonation for support.
- Contract and promissory-note templates that generate Arabic and English PDFs with correct right-to-left shaping.
- Driver documents, bank accounts, and uniform/equipment issuance and handover records.
- Single sign-on with DMS, and a shared MySQL database so a driver moves from onboarding into daily operations without re-entry.
- Full Arabic RTL and English interfaces.
Technology
- Python, Flask, SQLAlchemy, Alembic migrations, MySQL
- Flask-Login, Flask-WTF, Flask-Limiter rate limiting, Redis caching and sessions
- Flask-Babel for localization; ReportLab, arabic-reshaper and python-bidi for Arabic PDFs
- pytest test suite; Gunicorn/Passenger deployment
Engineering decisions
I moved stage sequencing from hard-coded logic to data-driven templates and rolled it out in shadow mode first: the new engine logged where it would have differed from the old code before it took over, so the change reached production without disrupting live onboarding.