Case study
Live
Tomoh — Recruitment Platform
A recruitment platform for applicants, freelancers, companies and employers — with real-time chat and paid subscriptions.
The problem
Job seekers, freelancers and employers usually meet on different sites, and talk through outside apps. Tomoh brings them into one platform: people find work, companies post jobs, and both sides talk and pay inside the same system.
What I did
- Designed and built the whole backend, the APIs, the web dashboard and the website in Laravel.
- Built a multi-role system for applicants, freelancers, companies and employers, each with its own permissions.
- Added real-time chat with WebSockets and Socket.IO, opened and controlled by the job owner.
- Integrated Stripe and PayPal for subscriptions and payments between roles.
- Added background jobs, queues and caching to keep the system fast under load.
- Worked with the Flutter team that built the applicant and employer apps on the same API.
Architecture
-
Clients
- Website & dashboard
- Flutter apps
-
Backend
- Laravel API
- Roles & permissions
- Chat server · Socket.IO (key component)
- Queues & cache
-
Data & payments
- MySQL
- Stripe
- PayPal
The hard part: The job owner decides when a conversation starts.
Open chat on a jobs platform quickly turns into spam: every applicant messages every employer. So in Tomoh, only the job owner can open a chat with an applicant, and only the job owner can close it.
That rule sits on the server, not in the app. The WebSocket channel for a conversation exists only after the owner opens it, so neither the web nor the mobile apps can work around it.
Results
- 4 user roles on one platform
- 2 payment gateways: Stripe and PayPal
- Real-time chat controlled by the job owner