Skip to content
Closed testing on Google Play

OMNIA

A super-app for Guinea: payments, chat, rides, shopping and more in one app, for people and for the businesses that serve them.

Role
Kotlin Developer, SDLC Corp
Platforms
Android, plus iOS and web
Stack
Kotlin, Jetpack Compose
Time on it
1 year
OMNIA home screen: a KYC prompt, the wallet balance and quick actions

Two problems, one app.

For the people using it

Paying, chatting, travelling and shopping meant a different app for each.

OMNIA was made for a major client in Guinea as one app for daily life: a wallet linked to local banks, chat and calls, rides and parcels, bills, a shop, gold and metals, EV charging, and a way to invest in the company. Businesses run on it too, with their own tools for merchants, distributors and selling points.

Where I came in

Huge scope, little time, and code with no architecture.

The Android app had grown with API calls, logic and UI in the same files. I joined SDLC Corp as a Kotlin developer to help turn it around while features kept shipping: split it into modules, make it more secure, improve the UI and UX, and bring Claude into the project.

What was at stake.

  1. Money and identity

    A wallet tied to real bank accounts has to know who is paying. KYC had to be strict without losing people at sign-up.

  2. Five kinds of user

    An individual and four business roles each need their own screens and rules, inside one app.

  3. A high-profile client

    Delays and crashes are seen at the very top.

  4. A big app on modest phones

    Download size and stability decide whether people keep an app like this installed.

If you only read one part, read this.

5 roles One app, five ways to use it

Individuals, merchants, distributors, sub-distributors and selling-point managers each get their own home and navigation.

350 → 110 MB smaller release build

A team effort: the release went from over 350 MB to under 110 MB.

~50% fewer crashes

A team effort across low-end and current phones.

3 languages

English, French and Chinese throughout the app.

A day in OMNIA.

  1. Sign in

    Built for Guinea from the first screen.

    Login screen asking whether you live in Guinea, with a +224 mobile number field

    The role picked at sign-up decides the navigation you get.

    Sign in with a mobile number, with Guinea's +224 ready by default and a PIN for every payment after that. Choosing a role at sign-up decides which app you get.

    • Jetpack Compose
    • Navigation
    • Hilt
  2. KYC

    A face check made to tell a photo from a person.

    Selfie verification with the message: your facial recognition matches

    Liveness runs on the phone with ML Kit before the selfie is matched to the ID.

    Upload an ID card, passport or licence, then take a selfie with random live challenges: blink, turn your head, smile. Business roles can't enter the app until both steps are done.

    • CameraX
    • ML Kit face detection
  3. Wallet

    Add, send, request and withdraw, from your bank.

    Omniia Money wallet with the balance and add, send, request and withdraw buttons

    Card top-ups go through Stripe; balances are in Guinean francs.

    Link a local bank, top up, pay anyone by phone, wallet ID or QR, request money and withdraw to an account, with every transaction filterable.

    • Stripe
    • QR scanning
    • Paging
  4. Pay

    Every payment says what it's for.

    Payment to Anuj Yadav of 10,000,000 GNF with the note: for my children's school fees

    The fee is shown before you pay, never after.

    Type the amount, add a note, see the fee before you confirm, then enter your PIN. The receipt shows who was paid and when, with a button to pay again.

    • PIN
    • Ktor
    • Room
  5. Chat

    Messages encrypted end to end.

    Group chat marked end-to-end encrypted, with call history and an attach menu including Pay

    Each message gets its own AES-256 key, wrapped with the recipient's RSA key.

    One-to-one and group chat with photos, documents, location and contacts, voice and video calls, and money sent inside the conversation. Chats back up to Google Drive.

    • Socket.IO
    • mediasoup
    • Drive backup
  6. Omniia Brain

    An assistant that does it for you.

    Omniia Brain chat sending money: pick from contacts, enter a number or a wallet ID

    Voice in, voice out, and real actions in the wallet.

    Ask by text or voice and Omniia Brain sends money, requests it, withdraws to your account or pays a bill, confirming each step in the conversation.

    • Socket.IO
    • Speech to text
    • Text to speech
  7. Rides

    Book a ride or send a parcel.

    Omniia Drop with ride, parcel and reserve options and recent rides

    One booking flow for rides, parcels and reservations.

    Choose a ride, a parcel or a reservation, see the fare, and pay in cash, by QR or from the wallet. Drivers take the trip in their own app.

    • Google Maps
    • Live location
    • Socket.IO
  8. Invest

    Own a piece of the company.

    Invest in Omniia: the OMNIIA token at 140 GNF, supply figures and an open Seed Round with an Invest now button

    Each round has its own price, bonus and lock-in.

    Buy OMNIIA, the company's own token, straight from the wallet. Each round has its own price, bonus and lock-in, and a short tour explains holding and quarterly returns before anyone invests.

    • Jetpack Compose
    • Wallet
    • Onboarding tour

One app, taken apart.

Layer 1

What you tap

Jetpack Compose screens in OMNIA's own design system, with a separate navigation graph for each role.

  • Jetpack Compose
  • Navigation
  • Design system

Layer 2

What's in the middle

Each service is its own feature with data, domain and presentation layers, wired with Hilt, so the wallet and chat can change without touching each other.

  • ewallet
  • chat
  • call
  • chatBot
  • taxi
  • homeAndShop
  • crypto
  • ev_charging

Layer 3

What it talks to

REST APIs for the money, sockets for anything live, a media server for calls, and Stripe and Maps for the rest.

  • REST
  • Socket.IO
  • mediasoup
  • Stripe
  • Google Maps
  • FCM

One app for people, businesses and drivers.

Customer home screen
For peopleThe wallet, chat, rides, shopping and everything else, on one home screen.
Sub-distributor home with commission earned and the wallet
For businessesMerchants, distributors, sub-distributors and selling points each get their own home, with commission, sales and pending requests.
Driver app: choose ride, parcel or reserve and go online
For driversOmniia Partner: sign up with a licence, ID and vehicle papers, go online, accept trips and collect cash or a QR payment.

And the rest of the app.

  • Gold and metals

    Live rates and charts, buy and sell gold at a locked price, track a portfolio, and pay for a ride with it.

  • Live metal prices

    Gold, silver, bauxite, iron, nickel and more, each with its own live chart.

  • EV charging

    Find a station, pick a connector, charge by time or by percentage and pay from the wallet.

  • Video calls

    One-to-one and group calls, voice or video, from any chat.

  • Parcels

    Send or receive a package: addresses, type, weight and delivery instructions.

  • Bills

    Prepaid and postpaid electricity, by tapping or by asking Omniia Brain.

  • Shop and merchants

    The largest feature in the code: a store for customers, and sales and products for merchants.

  • Invest in OMNIA

    A short tour, then buy the company's token from the wallet, round by round.

  • Airtime and a virtual card

    Phone recharge, and a virtual debit card linked to the wallet.

Pay with your palm.

OMNIA store image, in French: fast, secure palm payments with Omniia Wallet. A customer holds his scanned palm over a reader

OMNIA also runs at the counter. A point-of-sale app on an Android POS device pairs with an infrared palm-vein camera: the shop rings up the sale, the customer holds out a hand, and the payment comes from their wallet.

  • A USB infrared camera reads the vein pattern under the skin
  • A liveness check is there to turn away photos and fake hands
  • One palm is matched against everyone enrolled
  • The customer approves the payment on their phone

One trip, start to finish.

  1. Requested: By the rider, in Omniia Drop
  2. Accepted: The driver taps Accept
  3. On the way: Driver app, with chat and call
  4. Picked up: The driver enters the rider's PIN
  5. Dropped off: Driver app
  6. Paid: Cash, QR or wallet

Parcels take the same path, from the pickup address to the door.

RiderDriver app

How it holds together.

Every service is its own feature.

Wallet, chat, calls, taxi, shop, KYC and the rest each live in their own folder with data, domain and presentation layers, so one team can work on chat without breaking payments.

Chat is encrypted end to end.

The RSA key pair is made on the phone and only the public half is shared. Each message is sealed with a fresh AES-256-GCM key, and both people can verify the encryption with a QR code or a 60-digit number.

RSA-2048 + AES-256-GCM

Identity starts on the device.

ML Kit checks for a live face on the phone, with random challenges, before the selfie is sent to be matched against the ID.

Five apps in one install.

The role chosen at sign-up picks the navigation graph and the bottom bar, so each business sees only what it needs, and business roles must finish KYC first.

Where it stands.

OMNIA is in closed testing on Google Play, with iOS and the web alongside it.

services in one app
10+
roles, each with its own app
5
MB release build, a team effort
350 → 110
fewer crashes, a team effort
~50%

What I'd build for you.

If you need a fintech app

Wallets, bank top-ups, PIN-protected payments and KYC with a liveness check.

If your app needs real-time

Chat, calls and live updates over sockets, encrypted where it matters.

If your codebase has grown messy

Help splitting it into clean features without stopping the work that keeps shipping.

If you're hiring for Android

Modern Kotlin, Jetpack Compose and clean architecture, at super-app scale.

Built with.

  • Kotlin
  • Jetpack Compose
  • Hilt
  • Ktor
  • Room
  • Paging
  • Socket.IO
  • mediasoup
  • CameraX
  • ML Kit
  • Stripe
  • Google Maps
  • Firebase
  • Media3
See the whole stack
Next projectLoudlyTurns a room full of phones into one speaker: every phone plays the same song at the same moment, with no internet.