David John

ItakefractionalCTOrolesforearly-stageteamsandcontractworkasaseniorfull-stackorAIsystemsengineer.

7Products shipped
5+Years building software
How I Work
01
I study the market before I touch the architecture.
LexiLead: Worked through the product, then the alternatives Nigerian law firms already use, before writing a line of spec. The proposal that followed carried a scope, a timeline, and locked infrastructure pricing — so the build started with a number attached, not a guess.
02
I ship risky changes without betting the business on them.
CreditVeto: New fraud rules run in shadow mode against live traffic before they can block anyone, each rule fails in isolation, and config changes deploy without a restart.
03
I stay past launch, and I write up what breaks.
UK healthcare client: Rebuilt the same client's platform three times across 18 months, each version driven by what actually failed in production. When one of my AI systems broke, I published the full autopsy rather than quietly patching it.

Selected Work

Problem

Nigerian law firms needed case and document management built around local legal workflows, and hitting the timeline meant bringing in outsourced frontend and mobile developers and coordinating their work against a fixed budget.

Architecture

Next.js web app and a React Native mobile app on a NestJS backend. PostgreSQL with pgvector for legal document search. Upstash Redis and BullMQ for background jobs. Claude Sonnet for generation, Haiku for routing, split to keep AI cost predictable.

Result

Delivered a formal proposal and locked infrastructure pricing before writing code. Owned the backend and architecture directly while the contracted developers shipped against the spec.

View live

Problem

Thelix needed fraud detection that runs in real time without blocking legitimate users, and a credit scoring model calibrated for sparse Nigerian financial data.

Architecture

8-rule parallel fraud engine with shadow mode and Redis pub/sub hot-reload. 5-factor credit scoring (300–850 scale) with Mono open banking enrichment. 5 NestJS microservices plus a Python FastAPI scoring service.

Result

Rule changes deploy without a restart. A failure in one rule stays isolated instead of blocking unrelated transactions. BVN verification, sanctions and PEP screening, and a WhatsApp credit assessment bot are live in production.

View live

Problem

Nigerian SMBs need bookkeeping that keeps working without reliable internet, and losing a transaction record on a failed sync isn't an option.

Architecture

IndexedDB sync engine with three stores — offline queue, conflict cache, temp ID mappings — and dependency-aware sync ordering so a transaction never syncs before the customer it depends on.

Result

Four coordinated apps: PWA plus native via Capacitor, a background worker, marketing automation, and a CMS. Kobo-precision amounts throughout. NDPR-compliant messaging with suppression lists.

View live

Problem

Enterprise clients needed an AI assistant that queries their own documents with zero data leakage between tenants, and standard vector-only retrieval wasn't accurate enough for production use.

Architecture

Schema-per-tenant PostgreSQL for full isolation. Hybrid search combining pgvector and full-text results via Reciprocal Rank Fusion, then LLM-reranked. A LangGraph agent that can pause mid-turn, checkpoint to MongoDB, and resume after user input.

Result

Real token streaming to the client. File adapters for Google Drive, S3, Azure, SharePoint, and Dropbox. Conversations stay stateful across sessions.

View live

Problem

The client needed KPI tracking that could withstand a CQC inspection, which meant audit trails had to work as legal-grade evidence, not application logs.

Architecture

41 CQC-aligned KPIs across three manager types. Alert escalation through durable Postgres-backed jobs, no Redis dependency. Append-only audit trail. Real-time alerts over SSE.

Result

UK data sovereignty via a UK-hosted VPS with EU backups, GDPR-compliant. Full complaint and incident tracking with timestamp chains.

Problem

Stacks is asynchronous, so deposits and withdrawals need confirmation tracking, and the fund's trading agent needed secure capital access without a static API key that could leak.

Architecture

Clarity SIP-010 token with NAV-based share pricing. Confirmation polling through a retry queue. HMAC auth with timing-safe comparison and a replay window instead of a static key.

Result

The trading agent stays fully decoupled from the notification bot. Emergency pause and transfer restriction toggles. Full historical NAV tracking.

View live

Problem

Creators needed video ads without editing skills, and LLM-generated code had to run on the render server without becoming a security hole — no eval, no filesystem access.

Architecture

Claude generates the Remotion video code, a safety scanner checks it, then it's bundled and rendered on a separate worker. The render worker runs on Hetzner rather than Vercel because Remotion's bundler collides with Next.js's own webpack.

Result

Users revise a video with a plain-English prompt instead of a timeline editor. Renders upload to Backblaze B2 behind Cloudflare's Lagos point of presence.

View live

Writing

Stack
LangGraphLangChainAnthropic ClaudeOpenAI APIpgvector
NestJSFastAPIPostgreSQLMongoDBRedis
Next.jsReactTypeScriptTailwind CSSReact Native
Stacks / ClaritySolidityWagmi + ViemStacks SDK
DockerDocker ComposeCoolifyAWSBackblaze B2
JestpytestGitHub Actions

Engagement

I take fractional CTO roles for early-stage teams that need technical ownership without a full-time hire, and contract work for teams that need a senior full-stack or AI systems engineer. Every engagement starts the same way: I learn the product, research the alternatives your customers already use, and write the spec — then send a proposal with a fixed scope, a timeline, and infrastructure costs priced up front. You see the number before anyone writes code. I work best with a real problem to solve, not a feature list to implement.

Open for fractional CTO engagements and contract work — reach out for current availability.
Typical response time: 24 hours