made byseun
All work
Mobile appMarketplaceReal-timePayments

Call Lawya

Call Lawya connects people in Nigeria with verified lawyers. Clients book and pay for a consultation, then chat or call the lawyer inside the app. I built the mobile app and the backend behind it.

Role
Full-stack engineer, mobile and backend
Timeline
Since Feb 2026, now on version 2.1
Stack
React Native · Expo · NestJS · Prisma
Call Lawya home screen with lawyer categories
Lawyer profile and booking calendar
Lex, the AI legal assistant, analysing a case
Cases list with statuses

The problem

In Nigeria, most people find a lawyer by asking around, and they often don’t know the fee until they show up. Call Lawya lists verified lawyers with their fees, ratings and availability, so you can book and pay in the app.

There are really two apps in one. Clients search, book and talk to lawyers. Lawyers get verified, manage their cases and get paid every week.

Architecture

React NativeExpoNestJSPrismaPostgreSQLSocket.IOAgoraAzure
  1. 01
    Mobile app
    Expo SDK 54, React Native 0.81 and Expo Router
  2. 02
    Real-time
    Socket.IO for chat, Agora for voice calls
  3. 03
    API
    NestJS 11 with modules for auth, bookings, payments, payouts, calls and AI
  4. 04
    Database
    PostgreSQL through Prisma, with Azure Blob Storage for files
  5. 05
    Hosting
    Docker on Azure, with EAS building the iOS and Android releases
01 · Booking

Finding and booking a lawyer

You can filter lawyers by practice area, location, fee and rating. Pick a time on their calendar and pay with Paystack, all without leaving the app.

Home screen with lawyer categories
Lawyer profile and booking calendar
02 · Real-time

Chat, voice notes and calls

Messages are saved on the phone, so chats open instantly. If you send one while offline, it waits and goes out when you reconnect.

Cases list with statuses
03 · AI

Lex, the legal assistant

Lex runs on Groq. It looks at a client’s case and helps them understand it before they book, and it keeps each user’s conversation history.

Lex analysing a case

Engineering decisions

Checking that lawyers are real

Every lawyer’s Supreme Court number is checked against the Nigerian Bar Association’s records. They then complete their profile and upload a selfie. The app and the server both enforce these steps, so they can’t be skipped.

Payments and weekly payouts

Paystack payments are confirmed through webhooks, and I verify each webhook’s signature. A scheduled job pays lawyers every Thursday, and they can withdraw early for a small fee.

Calls on unreliable networks

Each call moves through clear states over the socket: invited, accepted, rejected, ended or missed. The server ends calls that are left hanging.

Chat that works offline

Conversations, messages and unsent messages are stored in SQLite on the phone. They sync in pages from the server, with read receipts.

Results

  • Live on the App Store and Google Play, now on version 2.1
  • A backend of 16 NestJS modules, from bookings to payouts

What I’d build next

An admin dashboard so the team can verify lawyers and handle support faster.

Want something built like this?