I build TypeScript products end-to-end — web frontends, the APIs behind them, and Flutter for everything that ships to a phone. Frontend by trade, fullstack when the work needs it.
Selected projects
from the last cycle.
Frontend by trade,
fullstack when it counts.
I've spent the last four years shipping TypeScript products — React and Next.js frontends, NestJS and Express APIs behind them, and the small native pieces that fill the gaps. Most of my work sits in the web, but I'm just as comfortable in a Dockerfile, a SQL migration, or an Expo build pipeline.
I lean frontend by trade. I care about typography, motion, and the milliseconds between a tap and a frame — and I keep TanStack Query nearby for everything that has to talk to a server. The best frontend work I've shipped has come from designing the system end-to-end and refusing to draw a hard line between client and API.
On mobile I run two stacks: React Native + Expo when the team is already TypeScript-native, and Flutter when the design wants tighter control of the canvas. Same product brain, different runtime.
TypeScript end to end,
Flutter where it matters.
Frontend
- TypeScriptLEAD
- React · Next.jsLEAD
- Svelte · SvelteKitSHIP
- TanStack Query · RouterSHIP
- Tailwind · CSSSHIP
Backend & API
- Node.js · ExpressSHIP
- NestJSSHIP
- tRPC · GraphQLSHIP
- PostgreSQL · PrismaSHIP
- Redis · QueuesFLUENT
Mobile
- React Native · ExpoSHIP
- Flutter · DartSHIP
- Riverpod · BlocSHIP
- Supabase · HiveFLUENT
- Platform channelsLEARN
Tooling
- Vite · TurborepoSHIP
- Docker · GH ActionsSHIP
- Vercel · Fly · RenderFLUENT
- Playwright · VitestSHIP
A history of
past collaborations.
Storytime4Kids · Remote
I lead end-to-end delivery of the Storytime4Kids mobile app — React Native with Expo (EAS Build & OTA), with selected features prototyped in Flutter — covering navigation, audio playback, offline reading, and push notifications. Owned the Google Play release pipeline. The public marketing and content site is Next.js (App Router) + TypeScript + Tailwind, with a typed React Query + Zod data layer shared with the app. CI/CD on GitHub Actions and EAS cut release time enough that "we should ship today" stopped meaning "next week".
The Bull Squad Travels · Lagos
Architected and shipped the responsive Next.js site (TypeScript + Tailwind, App Router, server components) for fast initial loads. Translated Figma into a reusable design-system layer for buttons, forms, and primitives. Improved LCP, CLS, and INP through image optimisation, route-level code splitting, font preloading, and lazy hydration; layered on SEO with semantic HTML, JSON-LD, dynamic OG metadata, and generated sitemaps. Integrated REST APIs and third-party booking/payment services via React Query, and wired CI/CD on GitHub Actions + Vercel so every PR ships a preview.
Veridux · Lagos
Built the e-commerce storefront in React + TypeScript — catalogue, sorting, faceted filtering, full-text search. Implemented a secure cart + checkout flow with form validation and a third-party payment gateway, and built accessible, responsive UI with Tailwind that hit WCAG AA contrast across mobile and desktop. Managed client state with Redux Toolkit, server state with React Query, and kept the experience snappy on low-end devices through code splitting, memoisation, and image lazy-loading.