PowerPay Wallet is a monorepo managed with Turborepo and pnpm. It contains a Next.js client, a mock bank, an Express webhook service, and shared packages for database, schemas, UI, store, and tooling.
apps/powerpayclient: Next.js app — the main wallet client (port 3001)apps/mock-hdfc: Next.js app — mock bank simulator (port 3003)apps/bank-webhook: Express service — receives bank webhooks (port 3002)packages/db: Prisma database packagepackages/schemas: Shared Zod schemaspackages/store: Shared Redux storepackages/ui: Shared React UI componentspackages/eslint-config: Shared ESLint configpackages/typescript-config: Shared TS configs
- Node.js >= 18
- pnpm (workspace managed)
- Docker (for Postgres and optional app builds)
- Install dependencies
pnpm install- Start Postgres (local via Docker)
docker compose up -d powerpay_postgres- Set environment variables (see Environment) and run development servers
pnpm devApps start on:
- Client: http://localhost:3001
- Webhook: http://localhost:3002
- Mock bank: http://localhost:3003
pnpm build # build all apps/packages
pnpm dev # run all dev servers (uncached, persistent)
pnpm lint # lint across the repo
pnpm test # run tests
pnpm check-types # TypeScript checks
pnpm db:generate # prisma generate in packages/db
pnpm db:migrate # prisma migrate dev in packages/db
pnpm studio # prisma studioGlobal environment variables used across apps (configure at the root or per app as needed):
DATABASE_URLCLIENT_JWT_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETMERCHANT_AUTH_SECRETBANK_HOSTNAMESUCCESS_WEBHOOK_URLFAILURE_WEBHOOK_URLBANK_SECRETWEBHOOK_SECRETWEBHOOK_PORT(default 3002)POWERPAY_MOCKBANK_TRANSFER_REQNEXT_PUBLIC_CLOUDINARY_CLOUD_NAMENEXT_PUBLIC_CLOUDINARY_API_KEYCLOUDINARY_API_SECRETNEXTAUTH_URL
See each app/package README for exact usage.
This repo includes a Postgres service via docker-compose.yaml.
docker compose up -d powerpay_postgres
# Then set DATABASE_URL, e.g.
export DATABASE_URL="postgresql://postgres:sacredpassword@localhost:5432/powerpay"
# Generate Prisma client
pnpm db:generate
# Run dev migrations
pnpm db:migrateEach app has its own Dockerfile. Example builds:
# Client (port 3001)
docker build -t powerpayclient -f apps/powerpayclient/Dockerfile .
docker run --rm -p 3001:3001 --env-file .env.local powerpayclient
# Webhook (port 3002)
docker build -t bank-webhook -f apps/bank-webhook/Dockerfile .
docker run --rm -p 3002:3002 -e WEBHOOK_SECRET=... -e WEBHOOK_PORT=3002 -e DATABASE_URL=... bank-webhook
# Mock bank (port 3003)
docker build -t mock-hdfc -f apps/mock-hdfc/Dockerfile .
docker run --rm -p 3003:3003 --env-file .env.mock mock-hdfc- Next.js 15, React 19
- Express
- Prisma
- Zod, Redux Toolkit
- Tailwind CSS
- Turborepo, pnpm
- Create a feature branch
- Make changes with tests
- Run
pnpm lint && pnpm test - Open a pull request
MIT
Maintained by Sarthak (@venomhare). I enjoy building full‑stack TypeScript apps and scalable monorepos. If you find this project helpful, please consider starring it and sharing feedback.