← Selected work

Food distribution · Web & mobile platform

FoodBank CRM

From food subscriptions to fulfilled orders, in one connected platform.

MY ROLE
Full-stack engineer
SCOPE
Backend architecture · Web application · Mobile development
FoodBank CRM administrator dashboard showing platform summaries and the recent orders area.
The administrator overview brings members, vendors, orders, and subscriptions into one workspace. Screenshot totals are interface examples, not reported business outcomes.

THE PLATFORM

What it does.

FoodBank CRM is a production food distribution platform connecting community members, local vendors, and administrators across Nigeria. Members subscribe to food packages or buy directly from approved vendors. Vendors manage products, fulfil orders, and request withdrawals. Administrators oversee approvals, subscription plans, orders, financial operations, and support.

MY CONTRIBUTION

The backend, the apps, and what connects them.

I built the system end to end: a Laravel 12 REST API, a Next.js 16 web application, and a React Native mobile app using Expo 54. The web and mobile applications use the same authentication flows and API contracts. Behind those screens, I implemented role-based access, inventory, credits, subscriptions, redemptions, payment verification, vendor earnings, and queued notifications. I deployed the frontend and API in separate production environments.

HOW IT FITS TOGETHER

The main workflows.

01

For members

Register household and location details, choose a subscription tier, or browse products from approved vendors. Category filters help members find food, Paystack handles checkout, and order statuses show progress through to delivery.

02

For vendors

Submit business and bank details for administrator approval before receiving orders. Once approved, vendors manage product images, prices, stock, and units; fulfil orders through each status; and request withdrawals against their earnings ledger.

03

For administrators

Review vendor registrations, configure subscription pricing and limits, monitor orders and payments, review withdrawals, and handle support. Reports give the team a view across the platform.

SYSTEM ARCHITECTURE

One API. Web and mobile. Shared rules.

  1. LAYER 01

    Web and mobile

    The Next.js web application and React Native app share a versioned API contract and Laravel Sanctum bearer-token authentication.

  2. LAYER 02

    One Laravel API

    Separate member, vendor, and administrator route groups enforce permissions. The backend handles order rules, subscriptions, payment webhooks, and background jobs.

  3. LAYER 03

    Data and connected services

    MySQL stores application records. Paystack processes payments, Cloudinary serves product images, and Resend and Expo Push deliver notifications. The web application runs on Vercel and the API on Whogohost.

ENGINEERING DECISIONS

The choices behind the workflow.

DECISION 01

Give web and mobile the same source of truth.

Both applications use one versioned Laravel API. Shared authentication flows and response contracts keep business rules in one place and reduce the risk of the web and mobile versions behaving differently.

DECISION 02

Enforce each role at the API boundary.

Dedicated role middleware protects every route group. A vendor token cannot access a member endpoint, and administrator operations have their own access checks. Permissions are enforced on the server, beyond what each interface displays.

DECISION 03

Verify payments before changing an order.

A checkout success screen is not proof of payment. The API verifies the HMAC signature on Paystack’s webhook before marking the order paid, keeping payment confirmation under server control.

DECISION 04

Let notifications run in the background.

Order updates, vendor approvals, and withdrawal notifications are queued jobs. Resend emails and Expo push notifications are delivered separately from the request, so users do not wait for notification delivery before continuing.

DECISION 05

Serve product images through a CDN.

Vendor product images are stored and served through Cloudinary, separating media delivery from the application server.

THE CENTRAL CHALLENGE

Keeping every part in step.

Members, vendors, and administrators work with the same orders from different perspectives. The challenge is keeping their permissions, payment records, order progress, and vendor earnings consistent across web and mobile, while giving administrators clear oversight.

TECHNOLOGY

What I built it with.

MORE OF THE PRODUCT

Beyond the dashboard.

MOBILE APPLICATIONS

Two roles. One app.

GET IN TOUCH

Let’s talk about
your project.

Have a role or project in mind? Send me an email.

Email me
START A CONVERSATION

Tell me what you’re working on
and where you need a hand.