Masroufi
A full-featured mobile recruitment platform connecting job seekers, recruiters, and admins — built with Flutter and Clean Architecture.
A full-featured mobile recruitment platform built with Flutter using Clean Architecture and BLoC, supporting three distinct user roles.
Masroufi is a comprehensive mobile recruitment platform built with Flutter, designed to support three distinct user roles operating in the same system: job seekers, recruiters, and administrators.
Job seekers can browse, search, filter, save, and apply for positions with a full application tracking dashboard showing Pending, Accepted, and Rejected states. Recruiters manage their job postings and review applicant profiles. Admins have a system-wide management panel.
The project applies production-grade Flutter architecture patterns — Clean Architecture with feature-based modular structure, BLoC/Cubit for scalable state management, and JWT authentication with automatic token refresh via Dio interceptors. Local caching with Hive keeps the app responsive under poor connectivity.
A WebSocket-based real-time chat between recruiters and applicants and a skill-based quiz system were partially implemented, demonstrating the foundation for more advanced hiring workflows.
Key Features
Three-role System
Distinct experiences for job seekers, recruiters, and admins — each with their own dashboards, permissions, and navigation flows enforced at both UI and data layers.
Application Tracking
Job seekers track every application in real time with status updates (Pending, Accepted, Rejected) and recruiter feedback.
Secure JWT Authentication
Automatic token refresh via Dio interceptors with secure token storage using FlutterSecureStorage — no plain SharedPreferences.
Offline Caching with Hive
Hive-powered local cache keeps the app functional under poor connectivity and reduces unnecessary API round trips.
Real-time Recruiter Chat
WebSocket-based messaging channel between recruiters and applicants for direct in-app communication.
Tech Stack
Architecture
The app follows Clean Architecture with three layers: Data (remote + local sources, DTOs, repository implementations), Domain (use cases, entities, repository interfaces), and Presentation (BLoC/Cubit, screens, widgets). Features are fully modular — each feature is a self-contained folder with its own layers, making the codebase navigable and independently testable.
JWT tokens are managed through a Dio interceptor that automatically detects 401 responses, triggers a token refresh, and retries the original request — transparent to the rest of the app. Secure tokens are persisted using FlutterSecureStorage, never in plain SharedPreferences.
Challenges & Solutions
The hard problems — and how I solved them.
Managing three roles in one codebase without complexity explosion
Having three completely different user experiences in a single app risked creating a tangled, hard-to-navigate codebase. I resolved this by enforcing RBAC at both the UI and repository layers, combined with feature-based modular structure so each role's screens are completely isolated. Adding a new role feature doesn't touch unrelated code.
JWT refresh race conditions under concurrent requests
Multiple simultaneous API calls when a token expires caused a race condition — each request tried to refresh independently, flooding the auth endpoint. I fixed this by implementing a request queue in the Dio interceptor: the first 401 triggers a single refresh, all queued requests are held, and they all resume with the new token once refresh completes.
Cross-feature state synchronization without tight coupling
When a recruiter accepts an application, the job seeker's application list needed to update — but these are separate feature modules. I used a shared event bus pattern so BLoCs can broadcast state-changing events without importing each other directly.
More Projects
ExtMig
An open-source developer tool designed to improve migration workflows and productivity for modern development teams.
Cat'aloge
An AI-powered mobile app that automatically scans your phone gallery and organizes pet photos using TensorFlow Lite inference running fully on-device.
Accident Risk Navigator
A full-stack AI platform that predicts accident risk based on road conditions and weather, and visualizes high-risk zones on interactive maps.
Interested in working together?
I'm always open to discussing new projects and opportunities.