Moni-lite is a small internal service where a user holds a USDC balance and can send USDC to another address. For context: Moni is a crypto-native payments app for Latin America, and USDC is a dollar-pegged stablecoin (1 USDC is worth roughly 1 US dollar). It runs on Base, an Ethereum Layer 2 network. This app reads a user's balance from the chain and sends USDC from a wallet the user connects in the browser.
It is a small pnpm monorepo with two packages:
packages/web— the Next.js client (wallet connection, balance card, send form).packages/server— a Hono API on Node that reads balances from the chain and records sends.
The browser talks to the server over HTTP; the server reads from the chain and persists to a local SQLite database.
- Next.js (App Router) with TypeScript for the web client
- Hono on Node for the API server
- wagmi + viem + Coinbase Wallet for wallet connection and client-side signing
- Drizzle + SQLite for local persistence
- Zod for input validation
- Tailwind for styling
Requires Node 22+ and pnpm.
cp packages/web/.env.example packages/web/.env.local
cp packages/server/.env.example packages/server/.env
pnpm install
pnpm devpnpm dev starts both packages in parallel:
- web on http://localhost:3000
- server on http://localhost:8787
Then open http://localhost:3000.
Connect your own wallet on Base Sepolia (e.g. Coinbase Wallet). At the start of the session, share your wallet address with your interviewer and they'll send you test USDC to work with.
This is a collaborative pairing session. Think of it as a normal day on the team picking up an under-reviewed internal app. There are three parts:
-
Get oriented. Read through the code and understand what the app does. Be ready to walk us through it: how a balance gets read, how a send works, and how the web and server pieces fit together.
-
Make it production-ready. There's at least one bug producing incorrect balances, and we're not sure the service is safe to expose as-is. Find and fix what would hurt us in production.
-
Stretch (if there's time). Add a per-user daily send limit of $1,000 per day. Sends beyond the limit should be rejected with a clear error, and the UI should show the user how much of their daily allowance remains.
Use AI (Cursor / Claude / ChatGPT) however you like. We care about how you think about what it produces, not whether you use it.
packages/
web/ Next.js client
src/
app/ routes, layout, providers
components/ UI: connect wallet, balance card, send form
lib/ chain + USDC helpers and wallet config
server/ Hono API on Node
src/
routes/ balance + transfer handlers
lib/ chain + USDC helpers
db/ Drizzle schema and SQLite client