
Bernard Ariku Oko
Full-Stack Web Developer
Abuja, Nigeria
Profile
Web developer with a full-stack foundation, currently building identity-verification and property-management platforms at BOU. Started at Efiko, a Nigerian freelance marketplace, then freelanced for clients across Nigeria before joining BOU full-time. Microsoft Certified: Azure AI Engineer Associate & Azure AI Fundamentals.
Experience
Web Developer · BOU
April 2026 – PresentFull-time · Abuja, Nigeria · Hybrid
- Spearheaded frontend development of Ninja, a NIN/KYC/KYB verification platform with a Go backend, checking customers, vendors, and employees against BVN, NIN, and CAC registries to cut identity and hiring fraud risk for Nigerian businesses.
- Built frontend features for Xtate, a property management platform for Nigerian landlords and property managers covering rent collection, tenant management, and maintenance tracking — using HAM, BOU's in-house HTML-as-modules build tool, and its internal magicui component library.
- Built and maintain the BOU corporate site.
Problems solved
- Verification without the paperwork. Ninja's Go backend checks identity and business documents against BVN, NIN, and CAC registries directly, replacing manual KYC/KYB paperwork — led frontend development (HAM plus BOU's internal magicui component library) so non-technical staff get a dashboard while engineers get an API.
- A stale SDK bundle was breaking checkout. The Ninja verification widget embedded in BOU Marketplace intermittently threw "element #ninja-verify-container not found" because the page was loading a stale CDN build. Fixed it by bundling the SDK locally and supporting both the old Ninja.init(config) and new new Ninja(config).render() APIs so older integrations kept working.
- One property platform, two very different users. Xtate serves landlords managing a portfolio and tenants making a single payment from the same platform — built frontend features covering rent ledgers, maintenance tracking, and tenant lifecycle without duplicating logic between the two roles.
Frontend Developer · Bodymotions Physio Lounge
February 2024 – May 2024Freelance · Lagos, Nigeria · Remote
- Designed, built, and hosted the WordPress website for a Lagos physiotherapy practice, the main channel for service information and appointment bookings.
Junior Web Developer · Efiko
February 2018 – February 2020Internship · Utako, Abuja, Nigeria · On-site
- Built and shipped the frontend of Efiko, a Nigerian freelance-services marketplace, to beta using HTML, CSS, and JavaScript.
- Picked up PHP and Laravel to ship backend tasks — the starting point of full-stack development.
- Learned Sass for maintainable, scalable styling.
Problems solved
- From frontend-only to full-stack. Started shipping Efiko's frontend in HTML/CSS/JS, then picked up PHP and Laravel to take on real backend tickets during the same beta — the transition that shaped a full-stack approach to every project since.
Selected Projects
Platforms and applications I've built, contributed to, or maintain.
Local Medical Diary
Fullstack Developer
Practice management platform for clinics and independent practitioners — patient records, scheduling, billing with Paystack, clinical notes, and Jitsi telehealth in one system instead of juggling separate tools. Go/Gin/GORM/PostgreSQL API, React/Vite SPA, deployed on AWS (EC2, ECR, CloudFront) with a GitHub Actions CI/CD pipeline that health-gates every release and auto-rolls-back on failure. Develop and maintain the full stack.
Problems solved
- Two-factor auth was decorative. Login checked password only — TOTP setup, backup codes, and the settings UI all existed, but the login handler never checked two_factor_enabled, so any account "with 2FA on" was still fully accessible with just a password. Fixed with a short-lived pending-2FA token: login withholds the real session until a valid code is verified, and middleware explicitly rejects the pending token on every protected route.
- A practice could end another practice's telehealth session. The end-telehealth-session endpoint trusted a client-supplied practice ID instead of the authenticated one, so any logged-in staff member could end another practice's live session by supplying that practice's ID. Fixed by always scoping the action to the authenticated practice.
- The calendar said "success" when it wasn't. Drag-and-drop reschedule, resize, and status changes on the appointment calendar fired a success toast before the API call resolved — so a rejected update (e.g. a double-booking conflict) still showed "success" while the appointment stayed visually stuck in the rejected slot. Fixed by letting the mutation's own result drive the toast and reverting the drag on failure.
- Bulk reschedule could silently double-book. Every appointment-time-change endpoint guarded against double-booking except bulk reschedule, which could shift up to 200 appointments with no overlap check. Added the same advisory-lock-plus-overlap-count guard used elsewhere, with a regression test that fails pre-fix by double-booking a practitioner on purpose.
- Two records could both be "the default". A recurring bug pattern across billing lists, intake templates, note templates, and form builders: creating a new default record didn't clear the previous one, so two rows could both report is_default. Standardized every affected endpoint on a clear-then-set pattern under an advisory lock, with a test per fix confirming exactly one default survives.
NIN/KYC/KYB verification platform for Nigerian businesses — checks customers, vendors, employees, and agents against national registries (BVN, NIN, CAC) via API, hosted link, or dashboard. Go backend; leading frontend development at BOU.
Property management software for Nigerian landlords and property managers — rent collection, tenant management, maintenance tracking, and accounting reports. Building frontend features at BOU.
Catering ordering platform — packages, gift cards, a delivery-zone/ZIP checker, and a rewards program. Next.js 14 and Supabase.
Problems solved
- A missing env var broke every production build. The production build failed whenever a Supabase environment variable was missing and network calls to Google Fonts added another build-time failure point. Added a graceful Supabase client fallback for the missing-env-var case and swapped in system fonts to remove the network dependency.
- A default bundler switch broke the build again. Vercel's default bundler moved to Turbopack while the project still had a webpack config in place for next-pwa, breaking the build a second time. Fixed by adding an explicit Turbopack config instead of relying on the webpack path.
PTAIN
PR Times Africa Influence — identity-verification-backed platform with NIN/BVN checks (masked for privacy), payments via Paystack and Stripe, and a Three.js-driven interface. Next.js 15, Prisma, Supabase.
Client Portfolio Website
Freelance Developer
Personal portfolio site built for an engineering professional (petroleum/mechanical engineering, oilfield services) — CV, work history, education, and certifications sections populated with her real career content.
License and reward-tracking system with a WebGL-based interface. Next.js, Prisma.
Global Knights Foundation
Contributing Developer
Site for a Nigerian nonprofit focused on elderly welfare — health and wellbeing, transportation support, nutrition, and advocacy programs for older persons. Assisted with development of the site.
Property Management Application
Full-stack mobile app streamlining landlord–tenant interactions: property registration, rent collection, and maintenance requests for landlords; a simple payment and issue-reporting flow for tenants.
Unified Events
Website for a Florida-based NGO dedicated to recycling ocean waste, built to showcase its mission and environmental preservation work.