Your Mobile App Doesn't Have a Feature Problem. It Has a Reality Problem.
Simulators teach you to build for fast Wi-Fi and a user who never leaves the screen. Four lessons from shipping live delivery tracking to the phone with one bar of signal.
Available for new work · Nigeria — working remotely
Nathan ~ Alias: Blank — Software Engineer — Mobile & Full-Stack Engineer
I build mobile products end to end — React Native apps shipped to the App Store and Play Store, and the Nest.js services behind them. The work that decides whether a product feels good happens in the messy middle: real-time location, networks that drop, and the state bugs that only surface on a real device.
React Native and Expo apps on a single codebase, shipped to the App Store and Google Play with native-level parity on both platforms — including the parts that only break on real hardware.
Nest.js services on PostgreSQL or MongoDB behind the app: auth, live location, proximity search, and the sync that keeps state honest across devices and dropped connections.
Next.js and Vue interfaces taken from Figma to shipped feature — reusable component libraries, form handling and dashboards that a team can keep maintaining after handoff.
Maintaining the SwiftPay banking app on iOS and Android — triaging and fixing critical bugs in production, shipping new features, and keeping both store releases healthy for a regulated fintech product.
Building Mecfur end to end — the Nest.js/MongoDB backend behind a live-location finder app, powering real-time proximity search and matching between users and nearby service providers, plus the React Native app with live GPS tracking on a map view. Live on Google Play.
Architected a cross-platform React Native and Expo app on a unified iOS/Android codebase, and led UI/UX implementation from design handoff to shipped feature with a focus on fluid, accessible interfaces.
Established UI/UX engineering standards and a reusable component library, built API integration layers for third-party services, and implemented state management and CI/CD workflows to keep the codebase type-safe through a fast-iteration phase.
Built and maintained a React Native/Expo app on a shared codebase with native-level performance parity across iOS and Android, translating product requirements into high-fidelity accessible UI alongside the founder.
Built robust form handling with React Hook Form, delivered high-fidelity UI from Figma prototypes, and shipped interactive dashboards, modals, and dynamic filtering with Material UI, Zustand, and TypeScript.
Assisted with state management using Zustand to improve data flow across components, wrote form validation logic with React Hook Form, and took part in code reviews, testing, and debugging to maintain application stability.
Nathan took the app from a design file to both stores in under three months, and it didn't fall over when real users showed up. The live-location work especially — he tested it on actual phones on actual roads, not a simulator.
He'd fix the API contract and the screen that consumed it in the same PR. I've worked with a lot of mobile devs who stop at the network layer; Nathan doesn't.
His PRs are small, named properly, and come with a note on what to actually test on a device. Reviewing his code is the easiest part of my week.
We inherited a banking app with a crash rate nobody wanted to talk about. Within a month it was boring again, which is the highest compliment you can pay a fintech app.
Handoff to him is painless. He'll push back on a design when it won't survive a small Android screen, and he's usually right. What ships looks like what we drew.
Async across three time zones and I never once waited on him for a decision. Everything is written down, every release note is readable by a non-engineer.
Location, background tasks and flaky networks only misbehave on real hardware. I keep a drawer of test phones and ship against them.
Strict TypeScript from the API contract to the screen. Most bugs live where data changes shape, so that's where the guardrails go.
iOS and Android ship together from one codebase. A platform lagging behind is a bug in the process, not a backlog item.
Design handoff to store release — including the CI, the code review, and the 2 a.m. crash report.
Simulators teach you to build for fast Wi-Fi and a user who never leaves the screen. Four lessons from shipping live delivery tracking to the phone with one bar of signal.
Pack your dev environment in a box and take it anywhere
A deep dive into using async generators for handling large data streams efficiently
The things people usually ask in a first call — so we can skip to the interesting part.
Usually one of two shapes: I join an early team as the mobile or full-stack engineer and own a product surface end to end, or I come in for a defined build — a React Native app, a Nest.js backend, or both — and hand over a codebase with CI, docs and a release process. Either way, I ship to real devices and stores, not just staging.
TypeScript everywhere. React Native with Expo on mobile, Next.js on the web, Nest.js with PostgreSQL or MongoDB behind it, and Supabase when it lets a small team move faster. I'm not precious about tools — the existing codebase and the team's strengths matter more than my defaults.
Yes. I'm based in Nigeria (WAT, UTC+1) and have shipped with teams in Europe and North America. I keep a generous overlap window, write things down so decisions don't wait on a meeting, and treat async as the default rather than the exception.
One codebase, one release train. Both platforms ship together, with platform-specific work kept behind small, well-named abstractions. If a platform falls behind, I treat it as a process bug and fix the process.
Open to both full-time and contract work for mobile, frontend and full-stack roles — remote-first. Email is the fastest way to start the conversation.
Open to frontend, mobile, and full-stack work. The fastest way to reach me is email.