Khdamli
Khdamli is a mobile application we developed to connect clients with skilled workers in Algeria, addressing the challenges of slow, unreliable hiring processes. Our app enables clients to post job requests (public or private) and workers to browse or accept jobs, fostering local employment and community growth. Built as a second-year project at ESI SBA by a team of six students, Khdamli simplifies job matching through an intuitive platform.
Project Details
Overview
Khdamli is a mobile application designed to connect clients with skilled workers in Algeria, addressing the challenges of slow and unreliable hiring processes. The app enables clients to post job requests (public or private) and workers to browse or accept jobs, fostering local employment and community growth. Built as a second-year project at ESI SBA by a team of six students, Khdamli simplifies job matching through an intuitive, user-friendly platform.
Technologies Used
- TypeScript
- React Native
- Tailwind CSS
- Node.js
- Express
- PostgreSQL
Key Features
- Client Functions: Sign up, post public or private job requests with photos and videos, browse categories (e.g., plumbing), comment on worker responses, rate workers (5-star system), and receive notifications.
- Worker Functions: Sign up with listed skills, browse job categories, comment on or accept jobs, edit/delete comments, and view client ratings.
- Local Matching: Prioritizes job requests within the user's city for efficiency.
- Public/Private Requests: Clients can post jobs for all workers (public) or target a specific worker (private).
Contribution
- This project was developed by a team of six students (three on backend, three on frontend) as part of our second-year coursework at ESI SBA. I was part of the backend team.
- I designed and implemented the database using PostgreSQL.
- I contributed to the backend logic and API development, and also supported the frontend team in integrating and using the APIs.
Challenges & Solutions
- Database Design: The first challenge was designing the database due to the application's complexity. I carefully studied the application's documentation, created an ER diagram and then developed, after that we deployed the database on Supabase.
- API Structure: Our large API risked becoming unstructured without a clean architecture. I introduced API Standardization by establishing uniform URL patterns, using the correct HTTP methods, validating inputs, returning clean and structured responses with appropriate status codes, and implementing consistent error handling.
- Real-Time Updates: Initially, when a client sent private request or accept a worker on public request, worker had to refresh manually to see updates. I solved this by implementing real-time communication using WebSockets (Socket.IO).
- API Security: To protect the API, I added CORS, required authentication using JWT tokens (access and refresh tokens), and implemented silent login behind the scenes to prevent token expiration from interrupting the user experience.
- Role-Based Authorization: Certain features were exclusive to clients (e.g., creating requests) or workers (e.g., commenting on requests). I implemented role-based authorization middleware by checking user roles from the JWT token payload.
Lessons Learned
- Learned how to design and develop RESTful APIs and relational databases.
- Gained practical experience with WebSocket protocol and integrating it into an Express application using Socket.IO.
- Improved teamwork and communication skills while collaborating closely with other team members.












