An audit-grade, multi-tenant ERP, multi-entity from day one. Budget & Planning and Procurement are live: dimensional multi-year budgets with cross-subsidiary consolidation, and the full procure-to-pay chain from requisition, RFQ and comparative bid analysis through contracts, purchase orders, goods receipt, 3-way invoice matching and payment. Approved invoices and payments post to the general ledger automatically. Inventory, Finance, Order-to-Cash, HR, Projects, CRM and Assets follow as independent suites on the same platform.
NestJS services
7
NestJS services
data models
142
data models
API endpoints
600+
API endpoints
test files
900
test files
How it is built
Database per tenant: every organisation is provisioned its own Postgres database as a Neon branch at sign-up, with encrypted connection strings, a routing pool and migrations rolled across the whole fleet on deploy.
Tamper-evident audit trail: every write lands in a hash-chained audit log inside the same transaction, anchored with RFC 3161 timestamps, with evidence packs auditors can open by link.
Balances are never stored. Committed, consumed and remaining budget are computed from the ledger at read time, so figures always reconcile.
One approval engine for every document type, with signing matrices, per-currency ceilings, delegation and separation of duties. Process strictness is policy per organisation, so an NGO and a small business run the same code.
Architecture rules enforced in CI by 31 custom ESLint rules, each tested: no cross-suite imports, audit writes inside transactions, permission decorators on every endpoint.
Suite entitlements checked on every request, roughly 120 role-based permissions, subdomain-only sign-in, 77 transactional email templates, signed PDF rendering, live notifications over SSE, and Stripe plus Paystack billing.
A social platform for the crypto community. Users discover and follow projects, read a feed of their updates ranked by an AI engine, join community discussions, complete quests, run mining sessions for rewards, and hold, send and tip BNT, BNB and USDT from a built-in custodial wallet with KYC.
API endpoints
270
API endpoints
data models
74
data models
automated tests
1,180+
automated tests
admin console pages
38
admin console pages
How it is built
Custodial multi-asset wallet: Turnkey key custody, a double-entry ledger with 18-decimal precision and an idempotency key on every entry, an on-chain deposit indexer over HTTP and WebSocket, sweeps, and admin-reviewed withdrawals.
BNT, an ERC-20 token written in Solidity and deployed to BNB Smart Chain testnet under a multisig owner, with its ABI and addresses exported straight into the backend.
Blocnet Edge Engine, a Python service that scores every project update for quality, sentiment, urgency and actionability, falling back across Ollama, Groq and Gemini. The API calls it through a circuit breaker whose settings admins change at runtime.
A NestJS API of 36 modules. Mining is serialised with Postgres advisory locks, and the feed went from 8 queries to 1, verified with a k6 load test of 1,000 concurrent readers.
Admin two-factor sign-in with recovery codes, stackable roles with role impersonation for testing, and an audit log that tracks financial actions.
Lead frontend engineer, Candour IT Services · digit-tally.io
Cloud accounting for Nigerian businesses. Invoices, quotes and credit notes; purchase orders and payables; a chart of accounts and journals; VAT, withholding tax, PAYE and company income tax; inventory with stock takes and goods received; and payroll with leave and payslips, across multiple branches with roles, permissions and two-factor sign-in.
independently deployed apps
7
independently deployed apps
screens
180+
screens
npm packages published
3
npm packages published
commits authored
2,400+
commits authored
How it is built
I lead a team of four frontend engineers and own the micro-frontend architecture: seven Next.js apps on their own subdomains, sharing one sign-in through parent-domain cookies and edge session checks.
A request router sends each call to the right backend service in each of four environments, and a per-app adapter layer keeps UI code independent of API shapes.
A serverless PDF service renders 10 document types, including invoices, purchase orders and payslips, in headless Chromium with embedded fonts.
CI runs lint, type checks, unit tests and Playwright smoke tests on every pull request, plus nightly API contract drift checks. Deploys skip apps whose code did not change.
Published our component library, utilities and developer CLI to npm. The CLI signs developers in with Ed25519 key pairs.
Online ordering for African and Caribbean food across the UK. Customers browse the menu, check out with Stripe, choose pickup or nationwide DPD delivery with next-day and weekend options, and track their parcel. Staff run orders, dishes, users and shipping from an admin dashboard that updates live as orders arrive.
API routes
50
API routes
pages
57
pages
transactional emails
6
transactional emails
How it is built
Payment integrity: a transactional checkout lock stops duplicate orders, and Stripe webhooks are verified and de-duplicated per event, with safe retry of shipment creation.
A paid order creates its DPD shipment automatically, and managers print thermal labels straight from the browser. I extracted the DPD client into an open-source package, @jazzdev/dpd-local-sdk.
Delivery pricing and cut-off rules on London time, with free delivery thresholds and weekend availability.
Scheduled jobs for DPD token refresh and draft-order cleanup, Redis caching with an in-memory fallback, and a dashboard with revenue analytics, roles and activity logs.
The membership platform for the Nigerian Army 67 Intake and its 3,600+ members across all 36 states. Members get a portal with their profile, a directory and news; the public site covers donations, volunteering, a gallery and a hall of fame honouring fallen members; staff run members, content, family support and condolence letters from a secure admin.
API routes
78
API routes
pages
64
pages
admin roles
6
admin roles
How it is built
Every admin action is written to an audit trail with the actor, IP address and device.
Admin sessions are tracked per device and can be revoked remotely.
Member records import from a Google Sheets form, mapping 22 columns to structured data.
Donations are recorded before the donor leaves for Paystack, so abandoned payments stay visible. System endpoints handle health checks, maintenance and account housekeeping.
Next.js
TypeScript
Prisma
PostgreSQL
NextAuth
Paystack
Cloudinary
Resend
VOM Church
2025
Mobile app
Admin panel
Lead engineer
A mobile app for the members of Valley of Mercy church and a web admin for its staff. Members follow sermons, Bible study, prayer requests, testimonies and the church programme, and find each other in a directory. Staff manage members, first-timers, attendance, departments and push announcements.
How it is built
Engagement built in: points for daily prayer, study and sermons, 30+ badges, day streaks and a leaderboard.
Sign-in by email or phone OTP, with a flow for existing members to find and activate their accounts.
Role-based admin access for teams such as programme, treasury and secretariat, enforced by permission guards, with Firebase session cookies verified on the server.
Push notifications sent in batches through Expo with delivery receipts, member CSV import and export, and Android builds produced by CI.
React Native
Expo
Next.js
Firebase
Redux Toolkit
TanStack Query
NativeWind
Asiko Foods
2026–now
Web app
Admin panel
Frontend engineer
Commerce for African and Caribbean groceries, serving retail shoppers and wholesale trade buyers. Four apps: a retail store with rewards, referrals and gift cards; a wholesale portal with trade applications and invoices; a catalogue tool for field sales; and an admin for products, campaigns, discounts and delivery zones.
Next.js apps
4
Next.js apps
pages
99
pages
API route handlers
182
API route handlers
How it is built
A backend-for-frontend layer in each app keeps auth tokens in httpOnly cookies and refreshes them transparently.
A typed gateway client with timeouts, exponential backoff with jitter and idempotency keys, validated with Zod.
Stripe Payment Element checkout keyed to the order for safe retries.
One design system and shared packages across all four apps in a Turborepo monorepo, with a tracked log of backend defects re-tested before each is closed.
The official website of a UK-based Afro-fusion multi-instrumentalist, winner of Best Instrumentalist at the Eko Heritage Awards 2026, with music, videos, photos and press.
How it is built
Rebuilt without a framework in HTML, CSS and JavaScript with GSAP. Every page still works with JavaScript off, if animation fails, or with reduced motion.
A deploy build minifies and bundles everything with content-hashed file names, so assets are cached for a year and still update on release.
YouTube embeds load only when played, from the privacy-enhanced player. Fonts are self-hosted and preloaded, and structured data links the artist to Wikidata.
The first version was a Next.js app with a small CMS where the artist managed videos, photos and press coverage.
A personal brand website for Ismail Oshodi, an entrepreneur, logistics operator and speaker connecting the UK and Nigeria. It presents his services, from distribution and deal brokering to speaking and mentorship, with testimonials and a contact form.
How it is built
A React single-page app with routes loaded on demand.