← all projects
Mobile Marketplace

Ohlify

Mobile app (iOS + Android) that connects clients with professional experts — consultants, lawyers, mentors, podcasters — for paid 1:1 calls. Professionals set their rates, share a booking link, and get paid to their wallet via Paystack.

Ohlify

Two-sided expert-call marketplace: discover → book → pay → call → review, with KYC onboarding, in-app wallet/payouts via Paystack, real-time RTC calls, and calendar invites. Flutter app + TypeScript backend.

TypeScript
Node.js

Problem Statement

Experts — consultants, lawyers, mentors, podcasters — get pestered for "can I pick your brain?" with no clean way to charge for their time, schedule it, take the call, and get paid. Clients, meanwhile, struggle to discover and book vetted professionals for a paid 1:1. The need is a mobile, two-sided marketplace that handles the entire loop: discovery → scheduling → payment → the actual call → review → payout.

Proposed Solution

Ohlify is an iOS + Android app where professionals set their own rates, share a personal booking link, and receive payment directly to an in-app wallet (via Paystack, in Naira), while clients discover professionals, schedule calls, pay in-app, take the call, and leave a review. Core flow: Onboard → Discover → Book → Pay → Call → Review.

Full Solution Details

From the API spec (single source of truth for the mobile app), the surface is large and complete:

  • Auth + onboarding — sign up, then KYC/role selection (Client vs Professional) with ID-document upload.
  • Discovery — browse professionals, profiles, reviews, and rates.
  • Booking lifecycle — schedule calls with full status transitions; overlap prevention (no double-booked slots).
  • Live call sessionRTC tokens + signaling for the actual in-app 1:1 call.
  • Post-call — feedback and ratings.
  • Money — wallet, payments, payouts, bank list + account resolve, professional rate management (Paystack, NGN).
  • Calendar invites — ICS files + provider links so booked calls land on the user's calendar.
  • Public web share-URL flow — a no-auth path so a professional's booking link works for anyone.
  • Plus notifications, legal (EULA/privacy/terms), support/help desk, uploads, an admin dashboard, and runtime-tunable platform config.

Technical Documentation

Mobile app — Flutter/Dart with provider state management, go_router routing, dio HTTP client, freezed + json_serializable for immutable models and JSON, flutter_secure_storage for tokens, flutter_dotenv for config, google_fonts (Quicksand), flutter_svg, and a file picker for KYC docs/avatars. The app was built mock-first (MockService) with a meticulously written API contract describing exactly what replaces the mocks — client-side caching strategy, money/time conventions, pagination, and realtime (push + websocket) all specified up front.

Backend — TypeScript/Node API implementing that contract: auth, KYC, professionals, bookings, RTC session tokens/signaling, wallet/payments/payouts (Paystack), calendar invites, notifications, admin, and platform config.

Tech Stack

Flutter, Dart, provider, go_router, dio, freezed, flutter_secure_storage (mobile); Node.js, TypeScript (backend); Paystack payments, WebRTC/RTC signaling, ICS calendar invites.

System Design

  Client (Flutter)                         Professional (Flutter)
     │  discover → book → pay                  │  set rates → share link → payout
     ▼                                         ▼
  ────────────────── Ohlify API (Node/TS) ──────────────────
   auth · KYC/role · professionals · bookings (no overlap)
   wallet/payments/payouts (Paystack, NGN) · bank resolve
   RTC tokens + signaling ──► live 1:1 call (WebRTC)
   calendar invites (ICS + links) · notifications · admin · config
     │
     └── public web share-URL flow (no auth) → booking link works for anyone

Smart Architectural Decisions

  • Contract-first, mock-driven build. The app runs entirely on MockService behind a fully-specified API contract, so frontend and backend can progress independently and integrate cleanly — a disciplined way to build a large two-sided app.
  • Immutable models with freezed. Using freezed + json_serializable gives the Flutter app type-safe, immutable domain models and reliable JSON (de)serialization — the right call for a data-heavy marketplace.
  • The whole money + call loop, not just booking. Wallet, payouts, bank-account resolution, RTC signaling, and calendar invites mean Ohlify owns the entire transaction and the call itself — far harder than a directory app.
  • Public share-URL flow. A no-auth booking link lets professionals share anywhere and convert strangers, which is the actual growth mechanism — and it's designed in, not bolted on.
  • Overlap prevention in scheduling shows attention to the real edge cases of a calendar product.

Impacts

A complete cross-platform expert-call marketplace covering discovery, KYC, scheduling, in-app payment + payouts, the live RTC call, reviews, and calendar integration — architected contract-first so a Flutter app and TypeScript backend integrate cleanly.

Demonstrated Skills

Cross-platform mobile (Flutter/Dart: provider, go_router, dio, freezed, secure storage); two-sided marketplace + payments engineering (Paystack wallet/payouts, bank resolve); real-time calling (WebRTC tokens/signaling); KYC onboarding + uploads; contract-first/mock-driven development; calendar (ICS) integration; full backend API design in TypeScript.

Notes

  • Genuinely cross-platform: real Flutter/Dart mobile work (not React Native), with idiomatic choices (freezed immutables, go_router, provider) — broadens the candidate beyond web.
  • Owns the hard parts of a marketplace: in-app wallet + payouts (Paystack), bank-account resolution, and the live WebRTC call — payments + real-time calling together is a serious scope.
  • Process maturity: a contract-first, mock-driven build with a meticulous API spec (caching, money/time conventions, realtime) is exactly how strong teams decouple mobile and backend work.
  • Growth-aware design: the public no-auth share-URL booking flow shows product thinking about distribution.
  • Fits his payments/Nigeria theme (TrustRail, Monie Utils) while adding mobile + RTC.
Ask me anything