Emmanuel Doji

Portfolio · 2026

000%

Case studies

Deep dives,
honestly written.

Selected work, with the constraints I hit, the decisions I made, and the metrics that came out the other side.

01

Foniolabs.xyz — Sanity + Next.js + Claude Code MCP

My personal lab's static-exported site on shared hosting meant every content change ran through code. I wanted to publish without opening a PR — and wanted AI-native operations as a first-class capability, not a sticker.

  • Next.js 16
  • Sanity
  • GROQ
  • Vercel
  • Claude Code MCP
02

Pagrin — Frontend Across a Multi-App Turborepo

Two products — a partners dashboard and an embeddable web SDK — needed to share a chat UI, analytics, i18n, and a design language. Copy-pasting across two repos would have rotted within a quarter.

  • Next.js 16
  • Turborepo
  • React 19
  • next-intl
  • @pagrin/ai-chat
03

Rabit — Embedded Wallet SDK with Non-Custodial Recovery

Embedded wallet SDKs force product teams to choose between custodial (centralized, regulated, single point of failure) and seed-phrase (terrible UX). Recovery without either was the hard problem, and the third option — MPC — was locked behind enterprise contracts.

  • TypeScript
  • Turborepo
  • Changesets
  • viem
  • @solana/web3.js
04

SkoolBox — Offline-First AI Tutor for Nigerian Schools

AI-assisted teaching assumes always-on broadband. In the school I help operate that's not the deployment reality. SkoolBox needed to work offline, sync when it could, and still feel like a modern AI-powered classroom tool.

  • Tauri 2
  • Rust
  • React 18
  • TypeScript
  • SQLite
05

TitaCenter — Seven Financial Products, One Coherent Interface

Tita Group needed a flagship fintech surface that did on-ramp, off-ramp, exchange, trade, invoicing, payment gateway, and wallet — without feeling like seven different apps duct-taped together.

  • Next.js 16
  • React 19
  • TanStack Query
  • Framer Motion
  • Recharts