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
JWT refresh race conditions under concurrent requests
Cross-feature state synchronization without tight coupling
More Projects
Interested in working together?
I'm always open to discussing new projects and opportunities.