Skip to content
~/benhattab
Back to work
In productionPlatform2026 — present

Kumbis

Live video consultations, from booking to payout

A consultation platform where clients book live video or audio sessions with experts. Three roles — client, expert, administrator — drive all navigation and permissions, with SMS OTP authentication and FCFA billing.

3
product roles
PWA
installable
Role

Architect & developer — API, client/expert PWA, back office

Stack
Laravel 13PostgreSQLSanctum v4Next.jsTypeScriptAgoraserwist (PWA)Zustandreact-queryPHPUnit 12
Links
The problem

A paid live consultation concentrates nearly every hard problem in one place: sell a slot, take payment, get two people into a call that has to work over a Senegalese mobile connection, handle no-shows, and pay the expert afterwards. Every step can fail independently, and users forgive none of them.

The approach

The call itself runs on Agora, with session tokens minted on the backend and never on the client. It is the only way to stop someone joining a consultation they did not pay for: the right to enter the channel is issued by the server, after checking payment and schedule.

Authentication is SMS OTP rather than passwords. In this market the phone number is the real identity — email addresses are secondary and often shared. It also removes the whole password-reset cycle.

The client is a PWA rather than a native app. Installing straight from the browser avoids store friction and the mobile-data cost of a download, which matters when a consultation is decided within the hour.

Architecture
  1. 01

    API

    Laravel 13 under Sanctum v4, single source of truth: bookings, payments, Agora token minting, OTP and admin endpoints.

    Laravel 13 · PHP 8.3

  2. 02

    Realtime A/V

    Agora, with channel tokens issued exclusively by the backend after payment verification.

    Agora

  3. 03

    Identity

    SMS OTP through mtarget, with a dedicated artisan command to test a real send against production.

    mtarget · OTP

  4. 04

    Client & expert app

    Next.js App Router as a PWA (serwist), with Zustand for local state and react-query for server cache.

    Next.js · serwist

  5. 05

    Back office

    Separate admin dashboard, able to run on mock data so it can be developed without depending on the API.

    Next.js · SWR

Trade-offs

Call tokens are minted by the server, never by the client

This is the security boundary of the entire product. If the frontend could generate an Agora token, anyone could walk into any consultation. The backend verifies payment, time slot and identity before minting — and the token is scoped to that one channel.

Highlights
  • Booking, payment, live call and expert payout in a single flow
  • Server-side Agora token minting after payment and schedule verification
  • SMS OTP authentication, suited to a market where the phone number is the identity
  • Installable PWA rather than native, to avoid app-store friction
  • Three roles — client, expert, admin — driving navigation and permissions everywhere