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.
Food distribution · Web & mobile platform
From food subscriptions to fulfilled orders, in one connected platform.

THE PLATFORM
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
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
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.
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.
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
The Next.js web application and React Native app share a versioned API contract and Laravel Sanctum bearer-token authentication.
Separate member, vendor, and administrator route groups enforce permissions. The backend handles order rules, subscriptions, payment webhooks, and background jobs.
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
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.
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.
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.
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.
Vendor product images are stored and served through Cloudinary, separating media delivery from the application server.
THE CENTRAL CHALLENGE
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
MORE OF THE PRODUCT

A starting point for browsing food, viewing subscriptions, and following orders.
Open full screenshot (opens in a new tab)
Vendors can review orders and earnings from their own workspace.
Open full screenshot (opens in a new tab)
The vendor catalogue workspace, shown here before products have been added.
Open full screenshot (opens in a new tab)
Business information and payout settings sit within the vendor account.
Open full screenshot (opens in a new tab)
Reports bring platform activity into a shared administrative view.
Open full screenshot (opens in a new tab)
Administrators can review region and currency configuration. Configured regions are not a claim of active operations in those markets.
Open full screenshot (opens in a new tab)Tell me what you’re working on
and where you need a hand.