DOC: WORK-01LAGOS, NG
REV 2026.08

Everything I've built, grouped by what it actually is.

Contract work that shipped, one package out in the open, and two products I'm building for myself in public. No case study fiction — what's done says done, what's mid-build says so.

Real users, real constraints, NDA-safe scope only.

PACKAGE · V0.5.0 · MIT

nanofetch

Came out of a conversation with AceBuddy's backend engineer, who'd stopped using Axios after one of its supply-chain incidents and switched to plain fetch. The idea: keep Axios's ergonomics — interceptors, retries, instances, one call for GET/POST — without pulling in a dependency at all. nanofetch is that: a ~5KB, zero-dependency, type-safe client with an Axios-like API, built on native fetch underneath.

TypeScriptZero-dep~5KB
$ npm install @hnrie/nanofetch

import { api } from '@hnrie/nanofetch';
const res = await api.get('/users');
PERSONAL · V2 IN PROGRESS
03

Divyd

Set out to build a bill-splitting app — shipped as a full P2P payments app (email/PIN/Google OAuth, equal/custom/recurring splits, in-app wallet, friends and groups), co-founded and built end to end. Sitting at a 5.0 rating.

Once real users started splitting bills, the behavior didn't stop there — groups already trusted each other with money, and wanted to coordinate around it. V2 is a Communities feature set (feed, events, group chat) on top of the existing payments core, alongside a refactor of the design system, navigation, and app structure, plus the CI/CD pipeline the app never had. The hard part isn't the new features — it's not breaking the thing real users already trust with real money.

React NativeDesignEAS CI/CD
PERSONAL · ~85%
04

Rubi

Multi-currency finance tracker for people earning in one currency and spending in another. Offline-first, dual-platform auth built for two different threat models, and a 92% cut in exchange-rate API calls without risking stale balances.

React NativeSpring BootOffline-first
Read the full case study →

Not tutorials — the why behind a choice, what got cut and why, what a mistake actually taught.

DECISIONWhy Rubi went offline-first before it went multi-currencycoming soon
DECISIONZustand + TanStack Query, and where the line between them sitscoming soon
CUTThe Budgets/Analytics tabs I shipped, then hid before launchcoming soon
LESSONThe bug that only showed up after real prod traffic hit Aviaraicoming soon