— Case Study

Nexiae — Non-Custodial Crypto Wallet

A non-custodial BNB Smart Chain wallet built as a working proof of concept — on-device key generation, biometric locking and real mainnet transactions behind deliberate safety ceilings.

React Native Expo TypeScript Web3

My role

Sole developer — architecture, security model and UI

Status

Live demo — proof of concept

Running on BNB Smart Chain mainnet with a 0.01 BNB send ceiling. Clickable web preview is live; Android APK ships via EAS. Built as a demonstrator, not a place to store funds.

Try it yourself

Don't take my word for it — open it and click through.

  • · Open the web demo — Runs in the browser, no install. Signing is disabled here by design.
  • · Download for Android — Installable APK, 35 MB — the full build, including signing. It runs on BNB mainnet and moves real funds, capped at 0.01 BNB per send.

What to look at

  1. 1 Create a new wallet. The 12-word phrase appears exactly once and is never stored — this is a demo wallet, so write it down or discard it.
  2. 2 Close and reopen it. The wallet locks behind a fingerprint or face scan on Android, Windows Hello or Touch ID in the browser. While locked the UI is not mounted at all, not merely hidden.
  3. 3 On the dashboard, refresh the balance — the USD valuation is live, over real on-chain balances.
  4. 4 Open Receive. The QR code is generated on the device rather than fetched from a server.
  5. 5 Open History and follow any transaction out to BscScan — the app never asks you to take its word for a balance.
  6. 6 In the browser demo, try Send: it refuses to sign, because a browser cannot store a key securely. Sending works only in the Android build.

The problem

Self-custody asks people to personally secure a private key, and most wallets hand that problem straight to the user: here is a seed phrase, do not lose it, do not show it to anyone. The security model is sound and the user experience is not, which is why most people still leave their assets on an exchange.

Nexiae is a proof of concept for the other side of that trade-off — keys generated and stored on the device, unlocked with the fingerprint or face scan people already use, and a send flow built so that the irreversible action is deliberately hard to take by accident. It runs against BNB Smart Chain mainnet with real funds, because a wallet that only works on a testnet proves very little.

Tech stack

Mobile
React Native Expo TypeScript
Blockchain
ethers v6 BNB Smart Chain PancakeSwap V2
Security
expo-secure-store Biometrics WebAuthn
Delivery
EAS Build Vercel

How it's built

Keys are generated on-device with ethers v6 (BIP-39 12-word mnemonic, BIP-44 derivation) seeded from the OS CSPRNG. The private key lives in expo-secure-store — iOS Keychain and Android Keystore-encrypted storage — is excluded from device backups, and is read only at the moment a transaction is signed. The mnemonic is shown exactly once at creation and never persisted.

Access is gated by Face ID or fingerprint through expo-local-authentication on device, WebAuthn (Windows Hello / Touch ID) on the web preview, with a PIN fallback where neither exists. While locked, the wallet UI is not mounted at all rather than merely hidden.

Because mainnet transactions are irreversible, the send path is built around friction in the right places: address checksum validation, a mandatory review step showing the full recipient, gas estimate and total before anything is signed, and a hard ceiling on a single send. Signing is blocked outright in the browser build, since a browser cannot store a key securely — the hosted preview is read-only by design.

On top of that sits a bottom-tab dashboard with live USD portfolio valuation, tracked BEP-20 balances, a QR receive screen, local transaction history linked through to BscScan, and a PancakeSwap V2 swap flow including the approve-then-swap sequence.

Screenshots & demo

Dashboard on the Android build. Live USD valuation over real BNB and BEP-20 balances, with the standing reminder that this build moves real funds.
Dashboard on the Android build. Live USD valuation over real BNB and BEP-20 balances, with the standing reminder that this build moves real funds.
Settings. The chain is hard-wired to mainnet rather than switchable, and the per-transaction ceiling is stated rather than buried.
Settings. The chain is hard-wired to mainnet rather than switchable, and the per-transaction ceiling is stated rather than buried.
Swap via PancakeSwap. Irreversibility and slippage are spelled out on the screen where the decision is actually made.
Swap via PancakeSwap. Irreversibility and slippage are spelled out on the screen where the decision is actually made.
History. Every transaction links out to BscScan, so nothing has to be taken on the app's word.
History. Every transaction links out to BscScan, so nothing has to be taken on the app's word.
The same swap confirmed on-chain. A wallet is only credible if its transactions are independently verifiable.
The same swap confirmed on-chain. A wallet is only credible if its transactions are independently verifiable.

Want something like this built?

Tell me what you're building and I'll tell you how I'd approach it — architecture, stack and a realistic timeline.

Book a project scoping call

Usually replies within a day · Nigeria

More Projects

FarmBux

FarmBux

A Nigerian farm-to-consumer agriculture marketplace connecting farms directly to the people buying from them, across web and mobile.

Laravel 11 Next.js React Native Marketplace

RiskLock AI

A fintech risk-enforcement platform that connects investors, traders and account managers through MT5 — and enforces risk rules automatically instead of relying on trust.

Python FastAPI PostgreSQL Fintech
REIGNITE — Sales Funnel Landing Page

REIGNITE — Sales Funnel Landing Page

A high-converting, single-page book/course sales funnel — hero with a 3D book mockup, social proof, chapter previews, pricing tiers, a 60-day guarantee and a live countdown. Built and hosted right here on this site.

Laravel Blade Tailwind CSS Alpine.js