All work
Case study Live

Tomoh — Recruitment Platform

A recruitment platform for applicants, freelancers, companies and employers — with real-time chat and paid subscriptions.

Illustration: a job post card next to a ranked list of applicants with match scores.

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

  1. Clients
    • Website & dashboard
    • Flutter apps
  2. Backend
    • Laravel API
    • Roles & permissions
    • Chat server · Socket.IO (key component)
    • Queues & cache
  3. 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