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.
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
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
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
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
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