Skip to content
View cnpierrepapi's full-sized avatar

Block or report cnpierrepapi

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
cnpierrepapi/README.md

Hi, I'm Chukwudumaga Nnawuogo 👋

  • 🏗️ Founder & Director, Onenept Studios (Delaware C-corp). I build software that shows its work.
  • 🔍 Right now that means two things. AI agents that tell you where every answer came from, like MIGRAGENT and ASHEARD. And on-chain tools that read the chain themselves instead of trusting someone's dashboard, like Hashcats live and leaf-alert.
  • 🧩 I also build for clients. A puzzle-gated NFT allowlist and an online shop are live this month.
  • 🤝 When something I build on turns out to be wrong, I send the fix back upstream. Three of those are merged so far.
  • 🎓 MSc IT Management with Data Analytics, GBS Malta (in progress) · MSc Innovation, Strategy & Entrepreneurship, Grenoble École de Management (Distinction) · BEng Electrical & Electronics Engineering, Covenant University
  • 🚀 Open to remote and contract work: AI Product Manager, Customer Centric Engineer, Forward Deployed Engineer

📬 Contact


🏆 Achievements

Every line links to the thing itself.

  • Three pull requests merged into other people's projects. Two in DataHub in August, one in CALL-E in September.
  • Six of my bug reports became fixes. CALL-E's maintainers shipped a merged PR for each and closed them: calle-docs#39, #43, #44, call-e-integrations#107, #108, #109.
  • A Google ADK maintainer checked my diagnosis on adk-python#6880 against the client library, said it lined up exactly, and asked me for the fix.
  • Credited by name in datahub#19537, the cleanup that came out of my schemaField work.
  • asheard is on npm, published from CI with signed provenance.

🛠️ Languages

Python TypeScript JavaScript Java SQL GraphQL HTML/CSS


🤖 AI & data

Gemini Google ADK PyTorch scikit-learn Pandas NumPy DataHub pgvector Voyage AI Jupyter


⚙️ Web & data stores

Next.js React Node.js Express.js FastAPI Tailwind CSS Prisma PostgreSQL Supabase Redis SQLite


☁️ Cloud, payments & tooling

Vercel Google Cloud Cloud Run Firestore AWS Docker Stripe Paystack Solana npm Git GitHub Actions


💻 Most used languages

Measured across my own repos with the GitHub languages API, not estimated. Last counted 14 Sep 2026.

Python 48 percent TypeScript 45 percent JavaScript 3 percent CSS 2 percent


🚀 Projects

📞 ASHEARD | TypeScript, Next.js, Upstash Redis | Sep 2026 | Live

  • CALL-E tells you how a phone call ended in three different places, and the three disagree. ASHEARD reads all of them and says which field said what. When no field says anything, it says that too, instead of guessing.
  • The finding that made it worth building: a voicemail box that "completed the task" and answered nothing scored 0.90 confidence. A call that really did get the right answer scored 0.92. Same label. There is no threshold between them.
  • On npm as asheard. The review console and a skill built on it are merged into CALL-E's own repo.

🛂 MIGRAGENT | Gemini 3.5, Google ADK, Cloud Run, Firestore, Python | Aug 2026 | Live

  • You are moving country or getting licensed to work in one. Fill one short form, upload the documents you already have, and an agent reads the official government sources and hands back a guide you can save as a PDF. No chat window.
  • Over 2,000 live requirements across 16 lanes, and every single one carries the source link plus the date it was read. No source, no claim: it goes to an open questions section instead.
  • A scheduled round re-reads the sources every day, so when a rule moves the guide moves with it.

📈 Warmleads | Next.js, TypeScript, Supabase, Prisma, Stripe, Paystack | 2026 | Live

  • Scores local businesses on how badly they need what an agency sells, so outreach starts from evidence instead of a list. 10,675 scored businesses, live billing in two currencies.
  • Taught me more about pricing than about code: the first pricing model needed roughly 1,400 subscribers to work. The fix was the customer, not the feature set.

📄 Dossier | Next.js, TypeScript, Voyage embeddings, pgvector, NDJSON streaming | 2026 | Live

  • Answers you can check. Bring a PDF, pasted text or a URL and every answer cites the passages it came from. Or name a company and a tool-using agent reads their site and the web, then hands back a brief.
  • Everything streams, so you watch each search and each page open as it happens instead of staring at a spinner.

🩺 Solana Error Doctor | TypeScript, Solana | 2026

  • Turns an opaque chain error into a root cause and a verified fix. Shipped as a public skill for coding agents.

🤝 Upstream contributions

DataHub

One thread, running since July 2026, on how DataHub models incidents. DataHub could raise an incident on a table but not on a column, so the metadata model and the docs disagreed about which entity types were actually supported. I took the column case and the documentation.

  • datahub#19115 · merged 20 Aug 2026 · Incident support for schemaField, so a data quality problem attaches to the column it belongs to instead of the whole dataset.
  • datahub#19405 · merged 24 Aug 2026 · The permission check for a column incident asked whether you could edit the column, and nobody holds permissions on a column. It now asks about the parent dataset, which is where permissions actually live.
  • datahub#18685 · open · Generates the supported-entity table from the metadata model at build time, rather than asking someone to remember to update a page.
  • datahub#18684 · open · Two self-hosted MCP troubleshooting entries, both from problems I hit myself.
  • datahub-skills#66 · open · A skill that traces which models and dashboards a dataset change is about to break.

The UI half of the column work is built and tested on my fork. I asked before opening it, and the maintainer said the product side isn't settled yet. Fair enough. It waits.

CALL-E

I built ASHEARD on CALL-E's phone-call API in September, placed real calls, and wrote down every place the docs and the payloads disagreed.

  • awesome-phone-call-agents#337 · merged 11 Sep 2026 · A skill for reading what actually happened to a call, plus a console that shows the answer next to the field it came from. Four rounds of review before it went in, most of it about security, and the first round found a real hole in my demo. Fixed properly, not patched.
  • Fourteen issues across their docs, integrations, both server SDKs, the n8n node and the Dify plugin. Six are fixed and closed. The one I'm happiest about is calle-docs#39: the first example in their authentication guide returned 405 for a good key and a bad key alike, so it couldn't do the one job it was there for.
  • server-sdk-typescript#17 · open · Two wait functions in the same package with opposite ideas of when a call is finished. One of them sometimes hands back a call with no result on a call that has one.
  • awesome-phone-call-agents#196 · open, p1 · Someone else's timestamp bug. I sent the validation they asked for, including the part that goes against the reporter's own theory.

Google ADK

Building MIGRAGENT on Google's Agent Development Kit turned up four things worth sending back. One issue is mine and is now a pull request, opened after a maintainer asked for it. The other three are threads somebody else opened where I could add the measurement or the workaround that was missing.

  • adk-python#6880 · open · A custom model class gets one config object holding 35 fields that belong in three different places in the request, and nothing says which is which. Put the tools in the wrong half and the call still returns 200, so your agent silently has no tools. A maintainer checked the field table against the client library and confirmed it.
  • adk-python#6935 · open · The fix. Instead of documenting where each field goes, it hands the job to the converter the official client already uses, so there's one copy of the mapping and it moves when the library moves. My own hand-written list had already gone stale by two fields in a day, which was the argument.
  • adk-python#2425 · open · A design for cancelling a running agent. Another contributor measured that cancelling leaves a sync tool and an async tool in different shapes. I traced where ADK passes the leftover call on to the model and ran it on Gemini. Latent, not a live bug, and I took back an earlier line of mine that said otherwise.
  • adk-python#2792 · open · Stopping an agent early prints a stack trace for something you chose to do, plus the workaround.
  • python-genai#782 · open · Thinking spends two to three thousand tokens before writing a character, so any output limit under about 4k is a zero budget dressed as a generous one.

Smaller ones

  • effectstream#895 · open · The Midnight cross-chain template doesn't build from a clean clone. Five separate reasons, each with the fix that worked.
  • solana-ai-kit#19 · open · Adds Solana Error Doctor to the registry.
  • phantom/blocklist#1819 · open · A whitelist request for a domain Phantom was flagging.

🧭 How I work

  • Build on real data. Live markets, real documents, production lineage. A demo that only works on fixture data has not been tested.
  • Prove it. A claim should link to a source or settle on chain. I would rather ship a measured result that is inconvenient than a confident one I cannot support.
  • Build for one user first. If it is not useful to a single named person, scale will not save it.
  • Test on the deployed thing. Localhost agrees with you. Production does not.

Popular repositories Loading

  1. blocklist blocklist Public

    Forked from phantom/blocklist

    JavaScript

  2. onenept-site onenept-site Public

    TypeScript

  3. solana-error-doctor solana-error-doctor Public

    Diagnostic skill for AI coding agents: paste a Solana error, get the root cause and the verified fix. Symptom-routed chapters (Anchor, toolchain, transactions, tokens, RPC, wallet, oracles) + /sola…

    JavaScript

  4. solana-ai-kit solana-ai-kit Public template

    Forked from solanabr/solana-ai-kit

    Claude Code / Codex / AI configs for the expert Solana builder. CLAUDE.md, agents, commands, hooks, rules, skills and settings across Web, Anchor, Pinnochio, Unity, Mobile, security and more.

    Shell

  5. dossier dossier Public

    Chat with your own documents. Upload a PDF, text, or URL and get answers with citations. RAG over pgvector.

    TypeScript

  6. cnpierrepapi cnpierrepapi Public

    Profile